diff options
| author | Justin M. Keyes <justinkz@gmail.com> | 2015-07-26 14:09:03 -0400 | 
|---|---|---|
| committer | Justin M. Keyes <justinkz@gmail.com> | 2015-07-26 14:09:03 -0400 | 
| commit | 122ad63ac90542d2c2964b071783799cfcdf2e07 (patch) | |
| tree | 79b335278e5639c1c544f14072e35b38e219c80d /src/nvim/eval.c | |
| parent | 7a6bf3f418c5ad94ac2ac71f21275a87d08e87b9 (diff) | |
| parent | 01901e00389446840c19839a29c001096aae6dc0 (diff) | |
| download | rneovim-122ad63ac90542d2c2964b071783799cfcdf2e07.tar.gz rneovim-122ad63ac90542d2c2964b071783799cfcdf2e07.tar.bz2 rneovim-122ad63ac90542d2c2964b071783799cfcdf2e07.zip | |
Merge pull request #3041 from ZyX-I/better-mkdir
Move recursive directory creation function to os/fs.c
Diffstat (limited to 'src/nvim/eval.c')
| -rw-r--r-- | src/nvim/eval.c | 42 | 
1 files changed, 13 insertions, 29 deletions
| diff --git a/src/nvim/eval.c b/src/nvim/eval.c index 0e0ccc67de..18188696b9 100644 --- a/src/nvim/eval.c +++ b/src/nvim/eval.c @@ -11684,33 +11684,6 @@ static void f_min(typval_T *argvars, typval_T *rettv)    max_min(argvars, rettv, FALSE);  } - -/* - * Create the directory in which "dir" is located, and higher levels when - * needed. - */ -static int mkdir_recurse(char_u *dir, int prot) -{ -  char_u      *p; -  char_u      *updir; -  int r = FAIL; - -  /* Get end of directory name in "dir". -   * We're done when it's "/" or "c:/". */ -  p = path_tail_with_sep(dir); -  if (p <= get_past_head(dir)) -    return OK; - -  /* If the directory exists we're done.  Otherwise: create it.*/ -  updir = vim_strnsave(dir, (int)(p - dir)); -  if (os_isdir(updir)) -    r = OK; -  else if (mkdir_recurse(updir, prot) == OK) -    r = vim_mkdir_emsg(updir, prot); -  xfree(updir); -  return r; -} -  /*   * "mkdir()" function   */ @@ -11735,8 +11708,19 @@ static void f_mkdir(typval_T *argvars, typval_T *rettv)      if (argvars[1].v_type != VAR_UNKNOWN) {        if (argvars[2].v_type != VAR_UNKNOWN)          prot = get_tv_number_chk(&argvars[2], NULL); -      if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0) -        mkdir_recurse(dir, prot); +      if (prot != -1 && STRCMP(get_tv_string(&argvars[1]), "p") == 0) { +        char *failed_dir; +        int ret = os_mkdir_recurse((char *) dir, prot, &failed_dir); +        if (ret != 0) { +          EMSG3(_(e_mkdir), failed_dir, os_strerror(ret)); +          xfree(failed_dir); +          rettv->vval.v_number = FAIL; +          return; +        } else { +          rettv->vval.v_number = OK; +          return; +        } +      }      }      rettv->vval.v_number = prot == -1 ? FAIL : vim_mkdir_emsg(dir, prot);    } | 
