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
|
--- elvrec.c.orig Mon Mar 21 14:27:37 1994
+++ elvrec.c Sun Jan 28 20:52:16 2001
@@ -10,6 +10,7 @@
*/
+#include <sys/param.h>
#include <stdio.h>
#include "config.h"
#include "vi.h"
@@ -22,8 +23,8 @@
char *basename; /* the name of the file to recover */
char *outname; /* the name of the file to write to */
{
- char pathname[500]; /* full pathname of the file to recover */
- char line[600]; /* a line from the /usr/preserve/Index file */
+ char pathname[MAXPATHLEN]; /* full pathname of the file to recover */
+ char line[MAXPATHLEN]; /* a line from the /usr/preserve/Index file */
int ch; /* a character from the text being recovered */
FILE *from; /* the /usr/preserve file, or /usr/preserve/Index */
FILE *to; /* the user's text file */
@@ -42,19 +43,15 @@
if (basename[0] != SLASH)
# endif
{
- ptr = getcwd(pathname, sizeof pathname);
- if (ptr != pathname)
- {
- strcpy(pathname, ptr);
- }
- ptr = pathname + strlen(pathname);
- *ptr++ = SLASH;
- strcpy(ptr, basename);
+ if ((ptr = getcwd(pathname, sizeof pathname)) == NULL)
+ err(1, "getcwd() failed");
+ snprintf(pathname, sizeof(pathname), "%s/%s", ptr,
+ basename);
}
else
#endif
{
- strcpy(pathname, basename);
+ strlcpy(pathname, basename, sizeof(pathname));
}
}
@@ -67,6 +64,8 @@
* version of this file.
*/
from = fopen(PRSVINDEX, "r");
+ if (!from)
+ err(1, "fopen() %s failed", PRSVINDEX);
while (from && fgets(line, sizeof line, from))
{
/* strip off the newline from the end of the string */
|