2
|
1 /*
|
|
2 * file.c
|
|
3 */
|
|
4
|
|
5 #include <stdio.h>
|
|
6 #include <string.h>
|
|
7
|
|
8 #ifdef SYSV
|
|
9 #include <fcntl.h>
|
|
10 #else
|
|
11 #include <sys/file.h>
|
|
12 #endif
|
|
13
|
|
14 #include <struct.h>
|
|
15 #include "common.h"
|
|
16 #include "db.h"
|
|
17 #include "main.h"
|
|
18 #include "file.h"
|
|
19 #include "data.h"
|
|
20
|
|
21
|
|
22 int ReadIt(char *fn)
|
|
23 {
|
|
24 struct statentry player;
|
|
25 int plfd;
|
|
26
|
|
27 initDB(); /* set up linked-list */
|
|
28
|
|
29 plfd = open(fn, O_RDONLY, 0644);
|
|
30 if(plfd < 0) {
|
|
31 err_sys("Could not open %s for read", fn);
|
|
32 return 1;
|
|
33 }
|
|
34
|
|
35 while (read(plfd, (void *)&player, sizeof(struct statentry)) ==
|
|
36 sizeof(struct statentry))
|
|
37 addDB(&player); /* add to list */
|
|
38
|
|
39 close(plfd);
|
|
40 return 0;
|
|
41 }
|
|
42
|
|
43 int SaveIt(char *fn)
|
|
44 {
|
|
45 struct plnode *p;
|
|
46 int plfd, cc;
|
|
47
|
|
48 plfd = open(fn, O_CREAT | O_TRUNC | O_WRONLY, 0600);
|
|
49 if(plfd < 0) {
|
|
50 err_sys("Could not open %s for write", fn);
|
|
51 return 1;
|
|
52 }
|
|
53
|
|
54 p = firstEnt;
|
|
55 while(p) {
|
|
56 cc = write(plfd, (void *)(&p->player), (int)sizeof(struct statentry));
|
|
57 if(cc != (int)sizeof(struct statentry)) {
|
|
58 err_sys("Write error");
|
|
59 return 1;
|
|
60 }
|
|
61 p = p->next;
|
|
62 }
|
|
63 return 0;
|
|
64 }
|
|
65
|
|
66 int DoSave(int mode)
|
|
67 {
|
|
68 char name[100], *c;
|
|
69 extern char *playerFile;
|
|
70
|
|
71 printf("Warning! Do not write over the server .players file if there\nare people logged in!\n");
|
|
72 printf("Enter filename, or press return to cancel\n");
|
|
73 printf(" -->"); fflush(stdout);
|
|
74
|
|
75 if(!fgets(name, 100, stdin)) {
|
|
76 err_sys("fgets fail (in DoSave)");
|
|
77 return 1;
|
|
78 }
|
|
79 if(c = strrchr(name, '\n'))
|
|
80 *c = (char)0;
|
|
81
|
|
82 if(!name || !(*name)) return 1;
|
|
83
|
|
84 if(SaveIt(name)) {
|
|
85 Report("");
|
|
86 return 1;
|
|
87 }
|
|
88
|
|
89 ClearChanged();
|
|
90 Report("Player database saved.");
|
|
91 return(0);
|
|
92 }
|
|
93
|
|
94 int DoLoad(int mode)
|
|
95 {
|
|
96 }
|
|
97
|