diff options
Diffstat (limited to 'exrecover.c')
| -rw-r--r-- | exrecover.c | 29 |
1 files changed, 18 insertions, 11 deletions
diff --git a/exrecover.c b/exrecover.c index e2fa677..ef2410b 100644 --- a/exrecover.c +++ b/exrecover.c @@ -98,7 +98,8 @@ static char sccsid[] UNUSED = "@(#)exrecover.c 1.23 (gritter) 12/25/06"; #define xstderr (int*)0 typedef int xFILE; extern void perror(const char *); -extern int vsprintf(char *, const char *, va_list); +#include <sys/types.h> +extern int vsnprintf(char *, size_t, const char *, va_list); #endif #define var @@ -109,6 +110,9 @@ extern int vsprintf(char *, const char *, va_list); #include "brk_shim.h" #include <dirent.h> #include <time.h> +#if !defined(HAVE_STRLCPY) || !defined(HAVE_STRLCAT) +# include "compat.h" +#endif #ifndef MAXNAMLEN #ifdef FNSIZE @@ -168,7 +172,7 @@ struct svfile { #ifdef notdef char mydir[] = "/usr/preserve"; #else -char mydir[] = "/var/lib/ex"; +char mydir[] = PRESERVEDIR; #endif /* @@ -239,7 +243,7 @@ main(int argc, char *argv[]) error(catgets(catd, 2, 1, " Wrong number of arguments to exrecover"), 0); - strcpy(file, argv[2]); + strlcpy(file, argv[2], sizeof file); /* * Search for this file. @@ -278,7 +282,7 @@ main(int argc, char *argv[]) while (H.Flines > 0) { ignorl(lseek(tfile, (off_t) ((blocks[b] & BLKMSK) * BUFSIZ), SEEK_SET)); - i = H.Flines < BUFSIZ / sizeof (line) ? + i = H.Flines < (ssize_t)(BUFSIZ / sizeof (line)) ? H.Flines * sizeof (line) : BUFSIZ; if (read(tfile, (char *) dot, i) != i) { perror(nb); @@ -479,7 +483,7 @@ enter(struct svfile *fp, char *fname, int count) fp->sf_time = H.Time; fp->sf_lines = H.Flines; cp2 = fp->sf_name, cp = savedfile; - while (*cp2++ = *cp++); + while ((*cp2++ = *cp++)); for (cp2 = fp->sf_entry, cp = fname; *cp && cp-fname < 14;) *cp2++ = *cp++; *cp2++ = 0; @@ -494,7 +498,7 @@ qucmp(struct svfile *p1, struct svfile *p2) { register int t; - if (t = strcmp(p1->sf_name, p2->sf_name)) + if ((t = strcmp(p1->sf_name, p2->sf_name))) return(t); if (p1->sf_time > p2->sf_time) return(-1); @@ -538,7 +542,7 @@ findtmp(char *dir) * name for later unlinking. */ tfile = bestfd; - strcpy(nb, bestnb); + strlcpy(nb, bestnb, sizeof nb); ignorl(lseek(tfile, (off_t) 0, SEEK_SET)); /* @@ -585,7 +589,9 @@ searchdir(char *dirname) * later, and check that this is really a file * we are looking for. */ - ignore(strcat(strcat(strcpy(nb, dirname), "/"), dirent->d_name)); + strlcpy(nb, dirname, sizeof nb); + strlcat(nb, "/", sizeof nb); + strlcat(nb, dirent->d_name, sizeof nb); if (yeah(nb)) { /* * Well, it is the file we are looking for. @@ -598,7 +604,7 @@ searchdir(char *dirname) ignore(close(bestfd)); bestfd = dup(tfile); besttime = H.Time; - strcpy(bestnb, nb); + strlcpy(bestnb, nb, sizeof bestnb); } /* * Count versions so user can be told there are @@ -755,6 +761,7 @@ putfile(int unused) register char *fp, *lp; register int nib; + (void)unused; a1 = addr1; clrstats(); cntln = addr2 - a1 + 1; @@ -817,7 +824,7 @@ getline(line tl) bp = getblock(tl, READ); nl = nleft; tl &= ~OFFMSK; - while (*lp++ = *bp++) + while ((*lp++ = *bp++)) if (--nl == 0) { bp = getblock(tl += INCRMT, READ); nl = nleft; @@ -889,7 +896,7 @@ xvfprintf(xFILE *fp, char *fmt, va_list ap) if (fp != xstderr) return; - vsprintf(buf, fmt, ap); + vsnprintf(buf, sizeof buf, fmt, ap); write(2, buf, strlen(buf)); } |
