Mercurial > ~darius > hgwebdir.cgi > paradise_server
diff pped/file.c @ 2:2719a89505ba
First entry of Paradise Server 2.9 patch 10 Beta
author | darius |
---|---|
date | Sat, 06 Dec 1997 04:37:01 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/pped/file.c Sat Dec 06 04:37:01 1997 +0000 @@ -0,0 +1,97 @@ +/* + * file.c + */ + +#include <stdio.h> +#include <string.h> + +#ifdef SYSV +#include <fcntl.h> +#else +#include <sys/file.h> +#endif + +#include <struct.h> +#include "common.h" +#include "db.h" +#include "main.h" +#include "file.h" +#include "data.h" + + +int ReadIt(char *fn) +{ + struct statentry player; + int plfd; + + initDB(); /* set up linked-list */ + + plfd = open(fn, O_RDONLY, 0644); + if(plfd < 0) { + err_sys("Could not open %s for read", fn); + return 1; + } + + while (read(plfd, (void *)&player, sizeof(struct statentry)) == + sizeof(struct statentry)) + addDB(&player); /* add to list */ + + close(plfd); + return 0; +} + +int SaveIt(char *fn) +{ + struct plnode *p; + int plfd, cc; + + plfd = open(fn, O_CREAT | O_TRUNC | O_WRONLY, 0600); + if(plfd < 0) { + err_sys("Could not open %s for write", fn); + return 1; + } + + p = firstEnt; + while(p) { + cc = write(plfd, (void *)(&p->player), (int)sizeof(struct statentry)); + if(cc != (int)sizeof(struct statentry)) { + err_sys("Write error"); + return 1; + } + p = p->next; + } + return 0; +} + +int DoSave(int mode) +{ + char name[100], *c; + extern char *playerFile; + + printf("Warning! Do not write over the server .players file if there\nare people logged in!\n"); + printf("Enter filename, or press return to cancel\n"); + printf(" -->"); fflush(stdout); + + if(!fgets(name, 100, stdin)) { + err_sys("fgets fail (in DoSave)"); + return 1; + } + if(c = strrchr(name, '\n')) + *c = (char)0; + + if(!name || !(*name)) return 1; + + if(SaveIt(name)) { + Report(""); + return 1; + } + + ClearChanged(); + Report("Player database saved."); + return(0); +} + +int DoLoad(int mode) +{ +} +