forked from Synival/BaseMUD
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathfix.patch
More file actions
116 lines (112 loc) · 2.66 KB
/
fix.patch
File metadata and controls
116 lines (112 loc) · 2.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
diff --git a/src/fread.c b/src/fread.c
--- a/src/fread.c
+++ b/src/fread.c
@@ -216,6 +216,7 @@ char *fread_string (FILE *fp, char *buf, size_t size) {
char *plast;
char c;
plast = buf;
c = fread_letter (fp);
if ((*plast++ = c) == '~')
return str_empty;
@@ -228,25 +229,30 @@ char *fread_string (FILE *fp, char *buf, size_t size) {
* it was too dirty for portability.
* -- Furey */
- switch (*plast = getc (fp)) {
- case EOF:
- /* temp fix */
- bug ("fread_string: EOF", 0);
- return NULL;
-
- case '\n':
- plast++;
- *plast++ = '\r';
- break;
-
- case '\r':
- break;
-
- case '~':
- *plast = '\0';
- return buf;
-
- default:
- plast++;
- break;
- }
+ int ich = getc(fp);
+
+ switch (ich) {
+ case EOF:
+ /* temp fix */
+ bug("fread_string: EOF", 0);
+ return NULL;
+
+ case '\n':
+ *plast++ = '\n';
+ *plast++ = '\r';
+ break;
+
+ case '\r':
+ break;
+
+ case '~':
+ *plast = '\0';
+ return buf;
+
+ default:
+ *plast++ = (char)ich;
+ break;
+ }
}
}
@@ -271,6 +277,7 @@ char *fread_string_eol (FILE *fp, char *buf, size_t size) {
static bool char_special[256 - EOF];
char *plast;
if (char_special[EOF - EOF] != TRUE) {
char_special[EOF - EOF] = TRUE;
char_special['\n' - EOF] = TRUE;
char_special['\r' - EOF] = TRUE;
@@ -284,25 +291,32 @@ char *fread_string_eol (FILE *fp, char *buf, size_t size) {
while (1) {
- if (!char_special[(*plast++ = getc (fp)) - EOF])
- continue;
-
- switch (plast[-1]) {
- case EOF:
- bug ("fread_string_eol: EOF", 0);
- exit (1);
- break;
-
- case '\n':
- case '\r':
- plast--;
- *plast = '\0';
- return buf;
-
- default:
- break;
- }
+ int ich = getc(fp);
+
+ if (ich == EOF) {
+ bug("fread_string_eol: EOF", 0);
+ exit(1);
+ }
+
+ *plast++ = (char)ich;
+
+ if (!char_special[(unsigned char)ich - EOF])
+ continue;
+
+ switch (ich) {
+ case '\n':
+ case '\r':
+ plast--;
+ *plast = '\0';
+ return buf;
+
+ default:
+ break;
+ }
}
}