void __mkdir(const char* pathname) { /* make a new directory */ if (dfile_raw_open(&fd, pathname, DFS_O_DIRECTORY | DFS_O_CREAT) == 0) { dfile_raw_close(&fd); } else rt_kprintf("Can't mkdir %s\n", pathname); }
void __ls(const char* pathname) { struct dfs_stat stat; int length; /* list directory */ if ( dfile_raw_open(&fd, pathname, DFS_O_DIRECTORY) == 0 ) { rt_kprintf("Directory %s:\n", pathname); do { rt_memset(&dirent, 0, sizeof(struct dfs_dirent)); length = dfile_raw_getdents(&fd, &dirent, sizeof(struct dfs_dirent)); if ( length > 0 ) { rt_memset(&stat, 0, sizeof(struct dfs_stat)); /* build full path for each file */ strncpy(fullpath, pathname, 256); strcat(fullpath, "/"); strcat(fullpath, dirent.d_name); dfile_raw_stat(fullpath, &stat); if ( stat.st_mode & DFS_S_IFDIR ) { rt_kprintf("%s\t\t<DIR>\n", dirent.d_name); } else { rt_kprintf("%s\t\t%lu\n", dirent.d_name, stat.st_size); } } }while(length > 0); dfile_raw_close(&fd); } else { rt_kprintf("No such directory\n"); } }
void __cat(const char* filename) { rt_uint32_t length; char buffer[81]; if (dfile_raw_open(&fd, filename, DFS_O_RDONLY) < 0) { rt_kprintf("Open %s failed\n", filename); return; } do { rt_memset(buffer, 0, sizeof(buffer)); length = dfile_raw_read(&fd, buffer, 81); if (length > 0) { rt_kprintf("%s", buffer); } }while (length > 0); dfile_raw_close(&fd); }
/* +------------------------------------------------------------------------------ | Function : open +------------------------------------------------------------------------------ | Description : | | Parameters : | Returns : | +------------------------------------------------------------------------------ */ int open(const char *file, int flags, int mode) { int fd, result; struct dfs_fd* d; /* allocate a fd */ fd = fd_new(); if (fd < 0) return -1; d = fd_get(fd); result = dfile_raw_open(d, file, flags); if (result < 0) { rt_set_errno(result); fd_put(d); fd_put(d); return -1; } /* release the ref-count of fd */ fd_put(d); return fd; }