/* * validate.c */ #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <fcntl.h> #include <stdlib.h> #include <sys/time.h> #include <sys/resource.h> #include <ctype.h> #include <signal.h> #include <errno.h> #include <string.h> #include <stdio.h> #include <time.h> #include <memory.h> #include "fix.h" #include "file.h" #include "player.h" /* External functions */ /* Prototypes for func's in this file */ int pfiles_to_process(void); int test_write_directory(char *); int test_read_file(char *); void do_tests(void); int test_write_directory(char *dname) { int fd, length; char *oldstack; oldstack = stack; sprintf(stack, "%s.open_test", dname); fd = open(oldstack, O_CREAT | O_WRONLY | O_SYNC | O_TRUNC, S_IRUSR | S_IWUSR); if (fd < 0) return 0; if (write(fd, oldstack, 1) < 0) return 0; close(fd); stack = oldstack; return 1; } int test_read_file(char *file) { int fd, opened = 1; fd = open(file, O_RDONLY | O_NDELAY); if (fd <0) opened = 0; close(fd); return(opened); } int pfiles_to_process() { char c; int fd, opened = 0; char *oldstack; for (c = 'a'; c<= 'z'; c++) { oldstack = stack; sprintf(stack, "%s%c", rc_options->pfile_path, c); fd = open(oldstack, O_RDONLY | O_NDELAY); if (fd >= 0) opened++; close(fd); stack = oldstack; } return(opened); } void do_tests() { int x; char *oldstack; printf(" - Update will now check files and directories -\n"); /* First check to see if any player files exist */ printf(" Checking player files exist ...."); if (!(x = pfiles_to_process())) { printf(" No.\n"); printf(" There are no player files to process, aborting update!\n" " Bye bye, please call again when you have some player files for me :)\n"); exit(0); }else printf(" Yes - %d file/(s) found to update\n", x); /* Check we can write out to the new_pfile directory */ printf(" Checking update can write to: \n [%s] ....", rc_options->new_pfile_path); if (!(test_write_directory(rc_options->new_pfile_path))) { printf(" No.\n"); printf(" Check to make sure directory exists and that write permissions have been set :)\n"); exit(0); }else printf(" Yes.\n"); /* Check we can read the room data needed */ printf(" Checking files (data & keys) exist ....\n"); printf(" data ...."); oldstack = stack; sprintf(stack, "%sdata",rc_options->prooms_path); if (!(test_read_file(oldstack))) { printf(" No.\n"); printf(" Failed to find %sdata - Bye !!\n", rc_options->prooms_path); exit(0); }else printf(" Yes.\n"); stack = oldstack; printf(" keys ...."); sprintf(stack, "%skeys",rc_options->prooms_path); if (!(test_read_file(oldstack))) { printf(" No.\n"); printf(" Failed to find %skeys - Bye !!\n", rc_options->prooms_path); exit(0); }else printf(" Yes.\n"); stack = oldstack; }