Пример #1
0
/*
** Make sure empty directories are created
*/
void ensure_empty_dirs_created(void){
  /* Make empty directories? */
  char *zEmptyDirs = db_get("empty-dirs", 0);
  if( zEmptyDirs!=0 ){
    char *bc;
    Blob dirName;
    Blob dirsList;

    blob_zero(&dirsList);
    blob_init(&dirsList, zEmptyDirs, strlen(zEmptyDirs));
    /* Replace commas by spaces */
    bc = blob_str(&dirsList);
    while( (*bc)!='\0' ){
      if( (*bc)==',' ) { *bc = ' '; }
      ++bc;
    }
    /* Make directories */
    blob_zero(&dirName);
    while( blob_token(&dirsList, &dirName) ){
      const char *zDir = blob_str(&dirName);
      /* Make full pathname of the directory */
      Blob path;
      const char *zPath;

      blob_zero(&path);
      blob_appendf(&path, "%s/%s", g.zLocalRoot, zDir);
      zPath = blob_str(&path);
      /* Handle various cases of existence of the directory */
      switch( file_wd_isdir(zPath) ){
        case 0: { /* doesn't exist */
          if( file_mkdir(zPath, 0)!=0 ) {
            fossil_warning("couldn't create directory %s as "
                           "required by empty-dirs setting", zDir);
          }
          break;
        }
        case 1: { /* exists, and is a directory */
          /* do nothing - required directory exists already */
          break;
        }
        case 2: { /* exists, but isn't a directory */
          fossil_warning("file %s found, but a directory is required "
                         "by empty-dirs setting", zDir);
        }
      }
      blob_reset(&path);
    }
  }
}
Пример #2
0
/*
** Create empty directories specified by the empty-dirs setting.
*/
void ensure_empty_dirs_created(void) {
    char *zEmptyDirs = db_get("empty-dirs", 0);
    if( zEmptyDirs!=0 ) {
        int i;
        Blob dirName;
        Blob dirsList;

        zEmptyDirs = fossil_strdup(zEmptyDirs);
        for(i=0; zEmptyDirs[i]; i++) {
            if( zEmptyDirs[i]==',' ) zEmptyDirs[i] = ' ';
        }
        blob_init(&dirsList, zEmptyDirs, -1);
        while( blob_token(&dirsList, &dirName) ) {
            char *zDir = blob_str(&dirName);
            char *zPath = mprintf("%s/%s", g.zLocalRoot, zDir);
            switch( file_wd_isdir(zPath) ) {
            case 0: { /* doesn't exist */
                fossil_free(zPath);
                zPath = mprintf("%s/%s/x", g.zLocalRoot, zDir);
                if( file_mkfolder(zPath, 0, 1)!=0 ) {
                    fossil_warning("couldn't create directory %s as "
                                   "required by empty-dirs setting", zDir);
                }
                break;
            }
            case 1: { /* exists, and is a directory */
                /* do nothing - required directory exists already */
                break;
            }
            case 2: { /* exists, but isn't a directory */
                fossil_warning("file %s found, but a directory is required "
                               "by empty-dirs setting", zDir);
            }
            }
            fossil_free(zPath);
            blob_reset(&dirName);
        }
        blob_reset(&dirsList);
        fossil_free(zEmptyDirs);
    }
}
Пример #3
0
/*
** Parse a blob into space-separated tokens.  Store each token in
** an element of the blobarray aToken[].  aToken[] is nToken elements in
** size.  Return the number of tokens seen.
*/
int blob_tokenize(Blob *pIn, Blob *aToken, int nToken){
  int i;
  for(i=0; i<nToken && blob_token(pIn, &aToken[i]); i++){}
  return i;
}