Module Name: src
Committed By: rillig
Date: Sun Dec 20 13:46:27 UTC 2020
Modified Files:
src/usr.bin/make: arch.c
Log Message:
make(1): eliminate libName_freeIt from Arch_ParseArchive
To generate a diff of this commit:
cvs rdiff -u -r1.190 -r1.191 src/usr.bin/make/arch.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.190 src/usr.bin/make/arch.c:1.191
--- src/usr.bin/make/arch.c:1.190 Sun Dec 20 13:38:43 2020
+++ src/usr.bin/make/arch.c Sun Dec 20 13:46:27 2020
@@ -1,4 +1,4 @@
-/* $NetBSD: arch.c,v 1.190 2020/12/20 13:38:43 rillig Exp $ */
+/* $NetBSD: arch.c,v 1.191 2020/12/20 13:46:27 rillig Exp $ */
/*
* Copyright (c) 1988, 1989, 1990, 1993
@@ -125,7 +125,7 @@
#include "config.h"
/* "@(#)arch.c 8.2 (Berkeley) 1/2/94" */
-MAKE_RCSID("$NetBSD: arch.c,v 1.190 2020/12/20 13:38:43 rillig Exp $");
+MAKE_RCSID("$NetBSD: arch.c,v 1.191 2020/12/20 13:46:27 rillig Exp $");
typedef struct List ArchList;
typedef struct ListNode ArchListNode;
@@ -186,18 +186,17 @@ Arch_ParseArchive(char **pp, GNodeList *
{
char *cp; /* Pointer into line */
GNode *gn; /* New node */
- char *libName; /* Library-part of specification */
- char *libName_freeIt = NULL;
+ MFStr libName; /* Library-part of specification */
char *memName; /* Member-part of specification */
char saveChar; /* Ending delimiter of member-name */
Boolean expandLibName; /* Whether the parsed libName contains
* variable expressions that need to be
* expanded */
- libName = *pp;
+ libName = MFStr_InitRefer(*pp);
expandLibName = FALSE;
- for (cp = libName; *cp != '(' && *cp != '\0';) {
+ for (cp = libName.str; *cp != '(' && *cp != '\0';) {
if (*cp == '$') {
/* Expand nested variable expressions. */
/* XXX: This code can probably be shortened. */
@@ -222,10 +221,11 @@ Arch_ParseArchive(char **pp, GNodeList *
*cp++ = '\0';
if (expandLibName) {
- (void)Var_Subst(libName, ctxt, VARE_WANTRES | VARE_UNDEFERR,
- &libName);
+ char *expanded;
+ (void)Var_Subst(libName.str, ctxt,
+ VARE_WANTRES | VARE_UNDEFERR, &expanded);
/* TODO: handle errors */
- libName_freeIt = libName;
+ libName = MFStr_InitOwn(expanded);
}
@@ -314,7 +314,7 @@ Arch_ParseArchive(char **pp, GNodeList *
* Now form an archive spec and recurse to deal with
* nested variables and multi-word variable values.
*/
- fullName = str_concat4(libName, "(", memName, ")");
+ fullName = str_concat4(libName.str, "(", memName, ")");
p = fullName;
if (strchr(memName, '$') != NULL &&
@@ -344,7 +344,7 @@ Arch_ParseArchive(char **pp, GNodeList *
while (!Lst_IsEmpty(&members)) {
char *member = Lst_Dequeue(&members);
- char *fullname = str_concat4(libName, "(",
+ char *fullname = str_concat4(libName.str, "(",
member, ")");
free(member);
@@ -357,7 +357,7 @@ Arch_ParseArchive(char **pp, GNodeList *
Lst_Done(&members);
} else {
- char *fullname = str_concat4(libName, "(", memName,
+ char *fullname = str_concat4(libName.str, "(", memName,
")");
gn = Targ_GetNode(fullname);
free(fullname);
@@ -378,7 +378,7 @@ Arch_ParseArchive(char **pp, GNodeList *
*cp = saveChar;
}
- free(libName_freeIt);
+ MFStr_Done(&libName);
cp++; /* skip the ')' */
/* We promised that pp would be set up at the next non-space. */