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
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
|
--- fortune-mod-1.2.1/util/strfile.c.orig 2007-07-27 00:40:54.687140050 +0100
+++ fortune-mod-1.2.1/util/strfile.c 2007-07-27 00:41:14.184165656 +0100
@@ -144,7 +135,7 @@
typedef struct
{
char first;
- off_t pos;
+ int32_t pos;
}
STR;
@@ -159,7 +150,7 @@
int Xflag = FALSE; /* set rotated bit */
long Num_pts = 0; /* number of pointers/strings */
-off_t *Seekpts;
+int32_t *Seekpts;
FILE *Sort_1, *Sort_2; /* pointers for sorting */
@@ -237,9 +228,9 @@
* add_offset:
* Add an offset to the list, or write it out, as appropriate.
*/
-void add_offset(FILE * fp, off_t off)
+void add_offset(FILE * fp, int32_t off)
{
- off_t net;
+ int32_t net;
if (!STORING_PTRS)
{
@@ -258,9 +249,9 @@
* fix_last_offset:
* Used when we have two separators in a row.
*/
-void fix_last_offset(FILE * fp, off_t off)
+void fix_last_offset(FILE * fp, int32_t off)
{
- off_t net;
+ int32_t net;
if (!STORING_PTRS)
{
@@ -333,7 +324,7 @@
do_order(void)
{
register long i;
- register off_t *lp;
+ register int32_t *lp;
register STR *fp;
Sort_1 = fopen(Infile, "r");
@@ -384,8 +375,8 @@
void randomize(void)
{
register int cnt, i;
- register off_t tmp;
- register off_t *sp;
+ register int32_t tmp;
+ register int32_t *sp;
extern time_t time(time_t *);
srandom((int) (time((time_t *) NULL) + getpid()));
@@ -422,7 +413,7 @@
{
register unsigned char *sp;
register FILE *inf, *outf;
- register off_t last_off, length, pos, *p;
+ register int32_t last_off, length, pos, *p;
register int first, cnt;
register char *nsp;
register STR *fp;
@@ -514,14 +505,19 @@
if (!Sflag)
{
printf("\"%s\" created\n", Outfile);
- if (Num_pts == 2)
- puts("There was 1 string");
+ if (Num_pts == 1)
+ puts("There was no string");
else
- printf("There were %ld strings\n", Num_pts - 1);
- printf("Longest string: %lu byte%s\n", Tbl.str_longlen,
- Tbl.str_longlen == 1 ? "" : "s");
- printf("Shortest string: %lu byte%s\n", Tbl.str_shortlen,
- Tbl.str_shortlen == 1 ? "" : "s");
+ {
+ if (Num_pts == 2)
+ puts("There was 1 string");
+ else
+ printf("There were %ld strings\n", Num_pts - 1);
+ printf("Longest string: %lu byte%s\n", Tbl.str_longlen,
+ Tbl.str_longlen == 1 ? "" : "s");
+ printf("Shortest string: %lu byte%s\n", Tbl.str_shortlen,
+ Tbl.str_shortlen == 1 ? "" : "s");
+ }
}
fseek(outf, (off_t) 0, 0);
@@ -533,12 +529,19 @@
Tbl.str_longlen = htonl(Tbl.str_longlen);
Tbl.str_shortlen = htonl(Tbl.str_shortlen);
Tbl.str_flags = htonl(Tbl.str_flags);
- fwrite((char *) &Tbl, sizeof Tbl, 1, outf);
+ fwrite(&Tbl.str_version, sizeof Tbl.str_version, 1, outf);
+ fwrite(&Tbl.str_numstr, sizeof Tbl.str_numstr, 1, outf);
+ fwrite(&Tbl.str_longlen, sizeof Tbl.str_longlen, 1, outf);
+ fwrite(&Tbl.str_shortlen, sizeof Tbl.str_shortlen, 1, outf);
+ fwrite(&Tbl.str_flags, sizeof Tbl.str_flags, 1, outf);
+ fwrite( Tbl.stuff, sizeof Tbl.stuff, 1, outf);
if (STORING_PTRS)
{
for (p = Seekpts, cnt = Num_pts; cnt--; ++p)
+ {
*p = htonl(*p);
- fwrite((char *) Seekpts, sizeof *Seekpts, (int) Num_pts, outf);
+ fwrite(p, sizeof *p, 1, outf);
+ }
}
fclose(outf);
exit(0);
--- fortune-mod-1.2.1/util/strfile.h 2000-01-29 11:14:34.000000000 +0000
+++ fortune-mod-1.2.1/util/strfile.h 2007-07-27 00:25:46.825640014 +0100
@@ -38,24 +38,19 @@
* @(#)strfile.h 8.1 (Berkeley) 5/31/93
*/
-/* Modified Jan 2000, Chris Ausbrooks <weed@bucket.pp.ualr.edu>
- * + Changed VERSION to FILE_VERSION to avoid warnings caused by
- * automake/autoconf.
- */
-
#define STR_ENDSTRING(line,tbl) \
((line)[0] == (tbl).str_delim && (line)[1] == '\n')
typedef struct { /* information table */
-#define FILE_VERSION 1
- unsigned long str_version; /* version number */
- unsigned long str_numstr; /* # of strings in the file */
- unsigned long str_longlen; /* length of longest string */
- unsigned long str_shortlen; /* length of shortest string */
+#define FILE_VERSION 2
+ u_int32_t str_version; /* version number */
+ u_int32_t str_numstr; /* # of strings in the file */
+ u_int32_t str_longlen; /* length of longest string */
+ u_int32_t str_shortlen; /* length of shortest string */
#define STR_RANDOM 0x1 /* randomized pointers */
#define STR_ORDERED 0x2 /* ordered pointers */
#define STR_ROTATED 0x4 /* rot-13'd text */
- unsigned long str_flags; /* bit field for flags */
- unsigned char stuff[4]; /* long aligned space */
+ u_int32_t str_flags; /* bit field for flags */
+ u_int8_t stuff[4]; /* long aligned space */
#define str_delim stuff[0] /* delimiting character */
} STRFILE;
|