git: 2cab4be46b0e - main - install: Prefer strsnvis() to strsvis().
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 27 Mar 2024 11:26:24 UTC
The branch main has been updated by des:
URL: https://cgit.FreeBSD.org/src/commit/?id=2cab4be46b0eeb64b8ade010bc16245151af5ccd
commit 2cab4be46b0eeb64b8ade010bc16245151af5ccd
Author: Dag-Erling Smørgrav <des@FreeBSD.org>
AuthorDate: 2024-03-27 10:03:59 +0000
Commit: Dag-Erling Smørgrav <des@FreeBSD.org>
CommitDate: 2024-03-27 10:03:59 +0000
install: Prefer strsnvis() to strsvis().
MFC after: 1 week
Sponsored by: Klara, Inc.
Reviewed by: allanjude
Differential Revision: https://reviews.freebsd.org/D44514
---
usr.bin/xinstall/xinstall.c | 19 +++++++++++--------
1 file changed, 11 insertions(+), 8 deletions(-)
diff --git a/usr.bin/xinstall/xinstall.c b/usr.bin/xinstall/xinstall.c
index 1e5adadd8f49..01e5bf0b5174 100644
--- a/usr.bin/xinstall/xinstall.c
+++ b/usr.bin/xinstall/xinstall.c
@@ -1529,15 +1529,18 @@ metadata_log(const char *path, const char *type, struct timespec *ts,
static const char extra[] = { ' ', '\t', '\n', '\\', '#', '\0' };
const char *p;
char *buf;
- size_t destlen;
+ size_t buflen, destlen;
struct flock metalog_lock;
if (!metafp)
return;
- /* Buffer for strsvis(3). */
- buf = (char *)malloc(4 * strlen(path) + 1);
- if (buf == NULL) {
- warnx("%s", strerror(ENOMEM));
+ /* Buffer for strsnvis(3), used for both path and slink. */
+ buflen = strlen(path);
+ if (slink && strlen(slink) > buflen)
+ buflen = strlen(slink);
+ buflen = 4 * buflen + 1;
+ if ((buf = malloc(buflen)) == NULL) {
+ warn(NULL);
return;
}
@@ -1562,7 +1565,7 @@ metadata_log(const char *path, const char *type, struct timespec *ts,
}
while (*p && *p == '/')
p++;
- strsvis(buf, p, VIS_OCTAL, extra);
+ strsnvis(buf, buflen, p, VIS_OCTAL, extra);
p = buf;
/* Print details. */
fprintf(metafp, ".%s%s type=%s", *p ? "/" : "", p, type);
@@ -1572,14 +1575,14 @@ metadata_log(const char *path, const char *type, struct timespec *ts,
fprintf(metafp, " gname=%s", group);
fprintf(metafp, " mode=%#o", mode);
if (slink) {
- strsvis(buf, slink, VIS_CSTYLE, extra); /* encode link */
+ strsnvis(buf, buflen, slink, VIS_CSTYLE, extra);
fprintf(metafp, " link=%s", buf);
}
if (*type == 'f') /* type=file */
fprintf(metafp, " size=%lld", (long long)size);
if (ts != NULL && dopreserve)
fprintf(metafp, " time=%lld.%09ld",
- (long long)ts[1].tv_sec, ts[1].tv_nsec);
+ (long long)ts[1].tv_sec, ts[1].tv_nsec);
if (digestresult && digest)
fprintf(metafp, " %s=%s", digest, digestresult);
if (fflags)