Module Name:    src
Committed By:   rillig
Date:           Sun Dec 20 12:53:35 UTC 2020

Modified Files:
        src/usr.bin/make: nonints.h var.c

Log Message:
make(1): export FStr and MFStr

These types are a replacement for the pattern "var + var_freeIt" that
enforces these two variables to be updated together.


To generate a diff of this commit:
cvs rdiff -u -r1.175 -r1.176 src/usr.bin/make/nonints.h
cvs rdiff -u -r1.741 -r1.742 src/usr.bin/make/var.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/nonints.h
diff -u src/usr.bin/make/nonints.h:1.175 src/usr.bin/make/nonints.h:1.176
--- src/usr.bin/make/nonints.h:1.175	Sat Dec 19 20:47:24 2020
+++ src/usr.bin/make/nonints.h	Sun Dec 20 12:53:34 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: nonints.h,v 1.175 2020/12/19 20:47:24 rillig Exp $	*/
+/*	$NetBSD: nonints.h,v 1.176 2020/12/20 12:53:34 rillig Exp $	*/
 
 /*-
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -164,12 +164,65 @@ void Parse_MainName(GNodeList *);
 int Parse_GetFatals(void);
 
 /* str.c */
+
+/* A read-only string that may need to be freed after use. */
+typedef struct FStr {
+	const char *str;
+	void *freeIt;
+} FStr;
+
+/* A modifiable string that may need to be freed after use. */
+typedef struct MFStr {
+	char *str;
+	void *freeIt;
+} MFStr;
+
 typedef struct Words {
 	char **words;
 	size_t len;
 	void *freeIt;
 } Words;
 
+/* Return a string that is the sole owner of str. */
+MAKE_INLINE FStr
+FStr_InitOwn(char *str)
+{
+	return (FStr){ str, str };
+}
+
+/* Return a string that refers to the shared str. */
+MAKE_INLINE FStr
+FStr_InitRefer(const char *str)
+{
+	return (FStr){ str, NULL };
+}
+
+MAKE_INLINE void
+FStr_Done(FStr *fstr)
+{
+	free(fstr->freeIt);
+}
+
+/* Return a string that is the sole owner of str. */
+MAKE_INLINE MFStr
+MFStr_InitOwn(char *str)
+{
+	return (MFStr){ str, str };
+}
+
+/* Return a string that refers to the shared str. */
+MAKE_INLINE MFStr
+MFStr_InitRefer(char *str)
+{
+	return (MFStr){ str, NULL };
+}
+
+MAKE_INLINE void
+MFStr_Done(MFStr *mfstr)
+{
+	free(mfstr->freeIt);
+}
+
 Words Str_Words(const char *, Boolean);
 MAKE_INLINE void
 Words_Free(Words w)

Index: src/usr.bin/make/var.c
diff -u src/usr.bin/make/var.c:1.741 src/usr.bin/make/var.c:1.742
--- src/usr.bin/make/var.c:1.741	Sun Dec 20 11:38:51 2020
+++ src/usr.bin/make/var.c	Sun Dec 20 12:53:34 2020
@@ -1,4 +1,4 @@
-/*	$NetBSD: var.c,v 1.741 2020/12/20 11:38:51 rillig Exp $	*/
+/*	$NetBSD: var.c,v 1.742 2020/12/20 12:53:34 rillig Exp $	*/
 
 /*
  * Copyright (c) 1988, 1989, 1990, 1993
@@ -131,13 +131,7 @@
 #include "metachar.h"
 
 /*	"@(#)var.c	8.3 (Berkeley) 3/19/94" */
-MAKE_RCSID("$NetBSD: var.c,v 1.741 2020/12/20 11:38:51 rillig Exp $");
-
-/* A string that may need to be freed after use. */
-typedef struct FStr {
-	const char *str;
-	void *freeIt;
-} FStr;
+MAKE_RCSID("$NetBSD: var.c,v 1.742 2020/12/20 12:53:34 rillig Exp $");
 
 typedef enum VarFlags {
 	VAR_NONE	= 0,
@@ -305,25 +299,6 @@ ENUM_FLAGS_RTTI_6(VarFlags,
 
 static VarExportedMode var_exportedVars = VAR_EXPORTED_NONE;
 
-/* Return an FStr that is the sole owner of str. */
-static FStr
-FStr_InitOwn(char *str)
-{
-	return (FStr){ str, str };
-}
-
-/* Return an FStr that refers to the shared str. */
-static FStr
-FStr_InitRefer(const char *str)
-{
-	return (FStr){ str, NULL };
-}
-
-static void
-FStr_Done(FStr *fstr)
-{
-	free(fstr->freeIt);
-}
 
 static Var *
 VarNew(const char *name, void *name_freeIt, const char *value, VarFlags flags)

Reply via email to