Module Name: src Committed By: rillig Date: Tue Aug 11 18:41:46 UTC 2020
Modified Files: src/usr.bin/make: arch.c nonints.h str.c Log Message: make(1): add str_concat4 to make the other code simpler There's no need for arch.c to call strlen when there is a high-level API for the same purpose. To generate a diff of this commit: cvs rdiff -u -r1.81 -r1.82 src/usr.bin/make/arch.c cvs rdiff -u -r1.93 -r1.94 src/usr.bin/make/nonints.h cvs rdiff -u -r1.59 -r1.60 src/usr.bin/make/str.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/usr.bin/make/arch.c diff -u src/usr.bin/make/arch.c:1.81 src/usr.bin/make/arch.c:1.82 --- src/usr.bin/make/arch.c:1.81 Mon Aug 3 20:26:09 2020 +++ src/usr.bin/make/arch.c Tue Aug 11 18:41:46 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: arch.c,v 1.81 2020/08/03 20:26:09 rillig Exp $ */ +/* $NetBSD: arch.c,v 1.82 2020/08/11 18:41:46 rillig Exp $ */ /* * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: arch.c,v 1.81 2020/08/03 20:26:09 rillig Exp $"; +static char rcsid[] = "$NetBSD: arch.c,v 1.82 2020/08/11 18:41:46 rillig Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)arch.c 8.2 (Berkeley) 1/2/94"; #else -__RCSID("$NetBSD: arch.c,v 1.81 2020/08/03 20:26:09 rillig Exp $"); +__RCSID("$NetBSD: arch.c,v 1.82 2020/08/11 18:41:46 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -354,7 +354,6 @@ Arch_ParseArchive(char **linePtr, Lst no char *buf; char *sacrifice; char *oldMemName = memName; - size_t sz; memName = Var_Subst(memName, ctxt, VARE_UNDEFERR | VARE_WANTRES); @@ -363,10 +362,7 @@ Arch_ParseArchive(char **linePtr, Lst no * variables and multi-word variable values.... The results * are just placed at the end of the nodeLst we're returning. */ - sz = strlen(memName)+strlen(libName)+3; - buf = sacrifice = bmake_malloc(sz); - - snprintf(buf, sz, "%s(%s)", libName, memName); + buf = sacrifice = str_concat4(libName, "(", memName, ")"); if (strchr(memName, '$') && strcmp(memName, oldMemName) == 0) { /* Index: src/usr.bin/make/nonints.h diff -u src/usr.bin/make/nonints.h:1.93 src/usr.bin/make/nonints.h:1.94 --- src/usr.bin/make/nonints.h:1.93 Mon Aug 10 19:53:19 2020 +++ src/usr.bin/make/nonints.h Tue Aug 11 18:41:46 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: nonints.h,v 1.93 2020/08/10 19:53:19 rillig Exp $ */ +/* $NetBSD: nonints.h,v 1.94 2020/08/11 18:41:46 rillig Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -136,6 +136,7 @@ Lst Parse_MainName(void); /* str.c */ char *str_concat2(const char *, const char *); char *str_concat3(const char *, const char *, const char *); +char *str_concat4(const char *, const char *, const char *, const char *); char **brk_string(const char *, int *, Boolean, char **); char *Str_FindSubstring(const char *, const char *); Boolean Str_Match(const char *, const char *); Index: src/usr.bin/make/str.c diff -u src/usr.bin/make/str.c:1.59 src/usr.bin/make/str.c:1.60 --- src/usr.bin/make/str.c:1.59 Mon Aug 10 19:53:19 2020 +++ src/usr.bin/make/str.c Tue Aug 11 18:41:46 2020 @@ -1,4 +1,4 @@ -/* $NetBSD: str.c,v 1.59 2020/08/10 19:53:19 rillig Exp $ */ +/* $NetBSD: str.c,v 1.60 2020/08/11 18:41:46 rillig Exp $ */ /*- * Copyright (c) 1988, 1989, 1990, 1993 @@ -69,14 +69,14 @@ */ #ifndef MAKE_NATIVE -static char rcsid[] = "$NetBSD: str.c,v 1.59 2020/08/10 19:53:19 rillig Exp $"; +static char rcsid[] = "$NetBSD: str.c,v 1.60 2020/08/11 18:41:46 rillig Exp $"; #else #include <sys/cdefs.h> #ifndef lint #if 0 static char sccsid[] = "@(#)str.c 5.8 (Berkeley) 6/1/90"; #else -__RCSID("$NetBSD: str.c,v 1.59 2020/08/10 19:53:19 rillig Exp $"); +__RCSID("$NetBSD: str.c,v 1.60 2020/08/11 18:41:46 rillig Exp $"); #endif #endif /* not lint */ #endif @@ -109,6 +109,22 @@ str_concat3(const char *s1, const char * return result; } +/* Return the concatenation of s1, s2, s3 and s4, freshly allocated. */ +char * +str_concat4(const char *s1, const char *s2, const char *s3, const char *s4) +{ + size_t len1 = strlen(s1); + size_t len2 = strlen(s2); + size_t len3 = strlen(s3); + size_t len4 = strlen(s4); + char *result = bmake_malloc(len1 + len2 + len3 + len4 + 1); + memcpy(result, s1, len1); + memcpy(result + len1, s2, len2); + memcpy(result + len1 + len2, s3, len3); + memcpy(result + len1 + len2 + len3, s4, len4 + 1); + return result; +} + /*- * brk_string -- * Fracture a string into an array of words (as delineated by tabs or