Пример #1
0
void moveResource(char *resource, char *destination) {
	if (!isNull(resource) && !isNull(destination)) {

		dir_t *destinationDir = filesystem_resolveDirPath(destination, currentDirId, currentDirPrompt, NULL);
		if (!destinationDir) {
			printf("Cannot move: dir '%s' not found.\n", destination);
			return;
		}

		dir_t *dirToMove = filesystem_resolveDirPath(resource, currentDirId, currentDirPrompt, NULL);
		if (dirToMove) {
			filesystem_moveDir(dirToMove, destinationDir->id);
			dir_free(dirToMove);
		} else {
			// If couldn't find a dir, then try to find a file:
			file_t *fileToMove = filesystem_resolveFilePath(resource, currentDirId, currentDirPrompt);
			if (fileToMove) {
				filesystem_moveFile(fileToMove, destinationDir->id);
				file_free(fileToMove);
			} else {
				printf("Cannot move '%s': No such file or directory.\n", resource);
			}
		}

		dir_free(destinationDir);
	}
}
Пример #2
0
void db_free(struct db *db)
{
	worker_free(db->worker);
	dir_free(db->log_dir);
	dir_free(db->index_dir);
	close(db->log_fd);
	free(db);
}
Пример #3
0
struct db *db_new(const char *directory)
{
	struct db *db = _db_new(directory);
	struct file *logfile = file_open_append(db->log_dir, "ydb.log");
	if (logfile == NULL) {
		goto error;
	}

	int fd = file_rind(logfile);
	if (fd == -1) {
		goto error;
	}
	db->log_fd = fd;

	db->index_dir = dir_openat(db->log_dir, "index");
	if (db->index_dir == NULL) {
		db_free(db);
		return NULL;
	}

	return db;
error:;
	dir_free(db->log_dir);
	free(db);
	return NULL;
}
Пример #4
0
void changeDir(char *dirName) {
	char *newDirPrompt;
	dir_t *changeToDir = filesystem_resolveDirPath(dirName ? dirName : "/", currentDirId, currentDirPrompt, &newDirPrompt);
	if (changeToDir) {
		strcpy(currentDirId, changeToDir->id);
		strcpy(currentDirPrompt, newDirPrompt);
		free(newDirPrompt);
		dir_free(changeToDir);
	} else {
		printf("cd %s: No such directory.\n", dirName);
	}
}
Пример #5
0
void makeDir(char *dirName) {
	if (!isNull(dirName)) {

		dir_t *dir = dir_create();
		dir->name = strdup(dirName);
		strcpy(dir->parentId, currentDirId);

		if (!filesystem_addDir(dir)) {
			printf("Cannot create directory '%s': Directory or file already exists with that name.\n", dirName);
		}

		dir_free(dir);
	}
}
Пример #6
0
static void add_archives(const char *path)
{
    Array archives;
    int i;

    if ((archives = dir_scan(path, is_archive, NULL, NULL)))
    {
        array_sort(archives, cmp_dir_items);

        for (i = 0; i < array_len(archives); i++)
            fs_add_path(DIR_ITEM_GET(archives, i)->path);

        dir_free(archives);
    }
}
Пример #7
0
void renameResource(char *resource, char *newName) {
	if (!isNull(resource) && !isNull(newName)) {

		dir_t *dirToMove = filesystem_resolveDirPath(resource, currentDirId, currentDirPrompt, NULL);
		if (dirToMove) {
			filesystem_renameDir(dirToMove, newName);
			dir_free(dirToMove);
		} else {
			// If couldn't find a dir, then try to find a file:
			file_t *fileToMove = filesystem_resolveFilePath(resource, currentDirId, currentDirPrompt);
			if (fileToMove) {
				filesystem_renameFile(fileToMove, newName);
				file_free(fileToMove);
			} else {
				printf("Cannot rename '%s': No such file or directory.\n", resource);
			}
		}
	}
}
Пример #8
0
static struct db *_db_new(const char *directory)
{
	struct db *db = malloc(sizeof(struct db));
	memset(db, 0, sizeof(struct db));
	db->log_fd = 2; /* stderr */

	db->log_dir = dir_open(db, directory);
	if (db->log_dir == NULL) {
		free(db);
		return NULL;
	}
	db->worker = worker_new(db);
	if (db->worker == NULL) {
		dir_free(db->log_dir);
		free(db);
		return NULL;
	}
	return db;
}
Пример #9
0
struct dir *dir_open(struct db *db, const char *pathname)
{
	struct dir *dir = _dir_new(db, NULL, pathname);
	dir->dir = opendir(pathname);
	int r = (dir->dir != NULL) ? 0 : -1;
	if (r == -1) {
		r = mkdir(pathname, 0700);
		DIRTRACE(dir, r, "mkdirat(\"%s\")", dir->pathname);
		if (r == 0) {
			dir->dir = opendir(pathname);
			r = (dir->dir != NULL) ? 0 : -1;
			DIRTRACE(dir, r, "opendir(\"%s\")", pathname);
		}
		if (r == -1) {
			dir_free(dir);
			return NULL;
		}
	}
	return dir;
}
Пример #10
0
signed int fs_read_dir(FileSelector *fs, char *path) {
  fs->offset = 0;
  fs->current = 0;
  fs->selectedfile = NULL;
  if (fs->numentries) {
    dir_free(fs->dir);
    fs->numentries = 0;
  }
  if ((fs->dir = dir_read(path)) == NULL) {
    /* couldn't read device... */
    puts("fs_read_dir failed!");
    return(-1);
  }
  if (fs->dir->numentries) {
    fs->numentries = fs->dir->numentries;
  } else {
    free(fs->dir);
    fs->numentries = 0;
  }
  return(fs->numentries);
}
Пример #11
0
struct dir *dir_openat(struct dir *top_dir, const char *dirname)
{
	struct dir *dir = _dir_new(top_dir->db, top_dir->pathname, dirname);
	dir->dir = opendirat(top_dir->dir, dirname);
	int r = (dir->dir != NULL) ? 0 : -1;
	DIRTRACE(dir, r, "opendirat(\"%s\")", dir->pathname);
	if (r == -1) {
		r = mkdirat(dirfd(top_dir->dir), dirname, 0700);
		DIRTRACE(dir, r, "mkdirat(\"%s\")", dir->pathname);
		if (r == 0) {
			dir->dir = opendirat(top_dir->dir, dirname);
			r = (dir->dir != NULL) ? 0 : -1;
			DIRTRACE(dir, r, "opendirat(\"%s\")", dir->pathname);
		}
		if (r == -1) {
			dir_free(dir);
			return NULL;
		}
	}
	return dir;
}
Пример #12
0
void deleteResource(char **parameters) {
	if (!isNull(parameters[1])) {
		if (string_equals_ignore_case(parameters[1], "-r")) {
			dir_t *dir = filesystem_resolveDirPath(parameters[2], currentDirId, currentDirPrompt, NULL);
			if (dir) {
				filesystem_deleteDir(dir);
				dir_free(dir);
			} else {
				printf("Cannot remove '%s': No such directory.\n", parameters[2]);
			}
		} else {
			file_t *file = filesystem_resolveFilePath(parameters[1], currentDirId, currentDirPrompt);
			if (file) {
				filesystem_deleteFile(file);
				file_free(file);
			} else {
				printf("Cannot remove '%s': No such file.\n", parameters[1]);
			}
		}
	}
}
Пример #13
0
DIR *opendir(const TCHAR *path)
{
	DIR *d;
	UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS); // disable 'no-disk' message box
	DWORD fa = GetFileAttributes(path);

	if ((fa != INVALID_FILE_ATTRIBUTES) && (fa & FILE_ATTRIBUTE_DIRECTORY)) {
		d = dir_calloc();
		if (d != NULL) {
			TCHAR search_path[MAX_PATH];
			bool slash = path[_tcslen(path) - 1] == '\\';

			/* build search path for FindFirstFile, try not to append additional slashes
			 * as it throws Win9x off its groove for root directories */
			_sntprintf(search_path, lengthof(search_path), _T("%s%s*"), path, slash ? _T("") : _T("\\"));
			*lastof(search_path) = '\0';
			d->hFind = FindFirstFile(search_path, &d->fd);

			if (d->hFind != INVALID_HANDLE_VALUE ||
					GetLastError() == ERROR_NO_MORE_FILES) { // the directory is empty
				d->ent.dir = d;
				d->at_first_entry = true;
			} else {
				dir_free(d);
				d = NULL;
			}
		} else {
			errno = ENOMEM;
		}
	} else {
		/* path not found or not a directory */
		d = NULL;
		errno = ENOENT;
	}

	SetErrorMode(sem); // restore previous setting
	return d;
}
Пример #14
0
void fs_dir_free(Array items)
{
    dir_free(items);
}
Пример #15
0
/* Deallocate FileSelector object */
void fs_free(FileSelector *fs) {
  if (fs->dir) {
    dir_free(fs->dir);
  }
  free(fs);
}
Пример #16
0
int closedir(DIR *d)
{
	FindClose(d->hFind);
	dir_free(d);
	return 0;
}