git: 80f2602e48eb - stable/14 - install: Prefer strsnvis() to strsvis().
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 04 Apr 2024 11:38:50 UTC
The branch stable/14 has been updated by des:
URL: https://cgit.FreeBSD.org/src/commit/?id=80f2602e48ebafcc5b82909724f970d2103185c4
commit 80f2602e48ebafcc5b82909724f970d2103185c4
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-04-04 09:43:15 +0000
install: Prefer strsnvis() to strsvis().
MFC after: 1 week
Sponsored by: Klara, Inc.
Reviewed by: allanjude
Differential Revision: https://reviews.freebsd.org/D44514
(cherry picked from commit 2cab4be46b0eeb64b8ade010bc16245151af5ccd)
---
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 1ab9cac76f2f..3764c5ef92fa 100644
--- a/usr.bin/xinstall/xinstall.c
+++ b/usr.bin/xinstall/xinstall.c
@@ -1542,15 +1542,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;
}
@@ -1575,7 +1578,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);
@@ -1585,14 +1588,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)