void verify_filesystem_availability(const char *fs_name, const char *env_name) { const char *fs_path; char filepath[120]; const char *tmp_file = ".slurm/tacc_test"; if( (fs_path = getenv(env_name) ) == NULL) { printf("\nUnable to query %s environment variable...(job submission aborted)\n",env_name); exit(1); } // Verify we can write to user's $HOME printf("--> Verifying availability of your %s dir (%s)...",fs_name,fs_path); if( strlen(fs_path) > (sizeof(filepath) + sizeof(tmp_file) - 3) ) { printf("%s dir too long: FAILED\n",fs_name); exit(1); } if (sprintf(filepath,"%s/%s",fs_path,tmp_file) < 0) { printf("error forming test file string: FAILED\n"); exit(1); } if( check_file_path(filepath) != 0) { printf("FAILED\n"); exit(1); } // print to file to verify write capability FILE *fp_test = fopen(filepath,"w"); if(fp_test == NULL) { printf("FAILED\n"); exit(1); } if (fprintf(fp_test,"The answer is %i\n",42) < 0 ) { fclose(fp_test); printf("FAILED\n"); exit(1); } else { fclose(fp_test); printf("OK\n"); } return; }
int main(int argc, char **argv) { char * target_file_path; char target_file_name[256]; unsigned int tpath_index, tfile_index; struct ext2_inode parent, target; if(argc != 3) { fprintf(stderr, "Usage: ext2_rm <image file name> <target path>\n"); exit(1); } if (ext2_init(argv[1]) == -1){ exit(1); } // check target path if(!check_file_path(argv[2]) ) { printf("invaid abs path\n"); return ENOENT; } // get target file path and name target_file_path = malloc(strlen(argv[2])); get_last_entry(argv[2],target_file_name, target_file_path); // check if it is vaild target file name if (! strlen(target_file_name)){ printf("invaid target file name\n"); return ENOENT; } if (is_dir(argv[2])){ printf("invaid target file name\n"); return ENOENT; } // get inode index for source file and target file tfile_index = get_inode_index(argv[2]); tpath_index = get_inode_index(target_file_path); free(target_file_path); // check if source path and target path vaild if(!tpath_index){ printf("No such file or directory\n"); return ENOENT; } // check if the target is the file if(tfile_index){ if(! (get_inode(tfile_index)->i_mode & EXT2_S_IFREG)){ printf("%s not a file\n", target_file_name); return ENOENT; } } remove_inode(get_inode(tpath_index), get_inode(tfile_index), tfile_index); return 0; }