static int FORMAT (test_input_t *t) { t->sfs = sfs_create(0, t->fd, 0); if(t->sfs == NULL) return FAIL; info("format!!"); if(sfs_format(t->sfs, O_FAT|O_HASH_ROOT_DIR, sfs_size, block_size) == FAIL) return FAIL; sfs_destroy(t->sfs); return SUCCESS; }
static int LOAD (test_input_t *t) { t->sfs = sfs_create(0, t->fd, 0); if(t->sfs == NULL) { return FAIL; } if(sfs_open(t->sfs, t->load_option) == FAIL) { error("TEST>can't load sfs"); return FAIL; } return SUCCESS; }
void browse_sfs(int sfs_handle) { int done; char cmd[256], *fn; int ret, perm; done = 0; printf("Welcome to SFS Browsing Shell v3.0\n\n"); printf("Block size : %d bytes\n", sb.block_size); printf("Partition size : %d blocks\n", sb.partition_size); printf("File entry size: %d bytes\n", sb.entry_size); printf("Entry tbl size : %d blocks\n", sb.entry_table_size); printf("Entry count : %d\n", sb.entry_count); printf("\n"); init_browsing(sfs_handle); while (!done) { printf(" $> "); ret = scanf("%[^\n]", cmd); if (ret < 0) { done = 1; printf("\n"); continue; } else { getchar(); if (ret == 0) continue; } if (strcmp(cmd, "?") == 0) { usage(); continue; } else if (strcmp(cmd, "quit") == 0) { done = 1; continue; } else if (strcmp(cmd, "list") == 0) { sfs_list(sfs_handle); continue; } else if (strncmp(cmd, "create", 6) == 0) { if (cmd[6] == ' ') { fn = cmd + 7; while (*fn == ' ') fn++; if (*fn != '\0') { sfs_create(sfs_handle, fn); continue; } } } else if (strncmp(cmd, "remove", 6) == 0) { if (cmd[6] == ' ') { fn = cmd + 7; while (*fn == ' ') fn++; if (*fn != '\0') { sfs_remove(sfs_handle, fn); continue; } } } else if (strncmp(cmd, "chperm", 6) == 0) { if (cmd[6] == ' ') { perm = cmd[7] - '0'; if ((0 <= perm) && (perm <= 7) && (cmd[8] == ' ')) { fn = cmd + 9; while (*fn == ' ') fn++; if (*fn != '\0') { sfs_chperm(sfs_handle, fn, perm); continue; } } } } else if (strncmp(cmd, "read", 4) == 0) { if (cmd[4] == ' ') { fn = cmd + 5; while (*fn == ' ') fn++; if (*fn != '\0') { sfs_read(sfs_handle, fn); continue; } } } else if (strncmp(cmd, "write", 5) == 0) { if (cmd[5] == ' ') { fn = cmd + 6; while (*fn == ' ') fn++; if (*fn != '\0') { sfs_write(sfs_handle, fn); continue; } } } printf("Unknown/Incorrect command: %s\n", cmd); usage(); } shut_browsing(sfs_handle); }
main() { int i; int retval; /* used to hold return values of file system calls */ /* do forever: 1) print a list of available commands 2) read a command 3) read arguments for the command 4) perform the requested operation 5) display the results of the operation */ while(1) { /* print a list of available commands */ printf("\n"); printf("o: open a file\n"); printf("r: read from a file\n"); printf("w: write to a file\n"); printf("R: read from a directory\n"); printf("c: close a file\n"); printf("m: create (make) a new file\n"); printf("d: delete a file\n"); printf("s: get the size of a file\n"); printf("t: get the type of a file\n"); printf("i: initialize the file system\n"); printf("q: quit - exit this program\n"); /* read in the next command */ printf("\nCommand? "); if (gets(command_buffer) == NULL) break; /* determine which command was requested */ switch(command_buffer[0]) { case 'o': /* Open a file */ printf("Enter full path name of file to open: "); scanf(INPUT_BUF_FORMAT,data_buffer_1); retval = sfs_open(data_buffer_1); if (retval >= 0) { printf("Open succeeded. File Descriptor number is %d\n",retval); } else { printf("Error. Return value was %d\n",retval); } break; case 'r': /* Read from a file */ printf("Enter file descriptor number: "); scanf("%d",&p1); printf("Enter read start location: "); scanf("%d",&p2); printf("Enter number of bytes to read: "); scanf("%d",&p3); retval = sfs_read(p1,p2,p3,io_buffer); if (retval > 0) { printf("Read succeeded.\n"); printf("The following data was read (only printable ASCII will display)\n"); for(i=0;i<p3;i++) { putchar(io_buffer[i]); } printf("\n"); } else { printf("Error. Return value was %d\n",retval); } break; case 'w': /* Write to a file */ printf("Enter file descriptor number: "); scanf("%d",&p1); printf("Enter write start location: "); scanf("%d",&p2); printf("Enter number of bytes to write: "); scanf("%d",&p3); printf("This program allows only non-white-space, printable ASCII characters to be written to a file.\n"); printf("Enter %d characters to be written: ",p3); scanf(IO_BUF_FORMAT,io_buffer); retval = sfs_write(p1,p2,p3,io_buffer); if (retval > 0) { printf("Write succeeded.\n"); printf("Wrote %s to the disk\n",io_buffer); } else { printf("Error. Return value was %d\n",retval); } break; case 'R': /* Read from a directory */ printf("Enter file descriptor number: "); scanf("%d",&p1); retval = sfs_readdir(p1,io_buffer); if (retval > 0) { printf("sfs_readdir succeeded.\n"); printf("Directory entry is: %s\n",io_buffer); } else if (retval == 0) { printf("sfs_readdir succeeded.\n"); printf("No more entries in this directory\n"); } else { printf("Error. Return value was %d\n",retval); } break; case 'c': /* Close a file */ printf("Enter file descriptor number: "); scanf("%d",&p1); retval = sfs_close(p1); if (retval > 0) { printf("sfs_close succeeded.\n"); } else { printf("Error. Return value was %d\n",retval); } break; case 'm': /* Create a new file */ printf("Enter full path name of new file: "); scanf(INPUT_BUF_FORMAT,data_buffer_1); printf("Enter 0 for regular file, 1 for directory: "); scanf("%d",&p1); retval = sfs_create(data_buffer_1,p1); if (retval > 0) { printf("sfs_create succeeded.\n"); } else { printf("Error. Return value was %d\n",retval); } break; case 'd': /* Delete a file */ printf("Enter full path name of file to delete: "); scanf(INPUT_BUF_FORMAT,data_buffer_1); retval = sfs_delete(data_buffer_1); if (retval > 0) { printf("sfs_delete succeeded.\n"); } else { printf("Error. Return value was %d\n",retval); } break; case 's': /* Get the size of a file */ printf("Enter full path name of file: "); scanf(INPUT_BUF_FORMAT,data_buffer_1); retval = sfs_getsize(data_buffer_1); if (retval >= 0) { printf("sfs_getsize succeeded.\n"); printf("size = %d\n",retval); } else { printf("Error. Return value was %d\n",retval); } break; case 't': /* Get the type of a file */ printf("Enter full path name of file: "); scanf(INPUT_BUF_FORMAT,data_buffer_1); retval = sfs_gettype(data_buffer_1); if (retval >= 0) { printf("sfs_gettype succeeded.\n"); if (retval == 0) { printf("file type is REGULAR\n"); } else if (retval == 1) { printf("file type is DIRECTORY\n"); } else { printf("file has unknown type %d\n",retval); } } else { printf("Error. Return value was %d\n",retval); } break; case 'i': /* Initialize the file system */ printf("Enter 1 to erase disk while initializing, 0 otherwise: "); scanf("%d",&p1); retval = sfs_initialize(p1); if (retval > 0) { printf("sfs_initialize succeeded.\n"); } else { printf("Error. Return value was %d\n",retval); } break; case 'q': /* Quit this program */ break; default: printf("Unknown command: %s\n",command_buffer); break; } if (command_buffer[0] == 'q') break; /* cleanup the newline that remains after reading command parameter(s) */ gets(command_buffer); } }