This is the mail archive of the binutils@sourceware.org mailing list for the binutils project.
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
| Other format: | [Raw text] | |
Hi, reduced code size by using xasprintf(). Please review the check of mktemp(), which was formerly checking against 0 (regarding glibc man pages that was wrong). I left that check intact (just in case I miss something) and added the check for an empty string, as documented in the glibc man pages. Does it make sense to further replace strlen/malloc/strcpy/strcat sequences by [x]asprintf in order to reduce source lines and library (binary) size ? (In the means of "is it appreciated") A side effect is calming down static analyzers that dislike unbounded memory accesses and thus warn about strcpy() and strcat(). Regards, Tim
From 72b324037c957e53a15cdbeefc1ff49128f0e965 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Tim=20R=C3=BChsen?= <tim.ruehsen@gmx.de>
Date: Thu, 7 Nov 2019 17:53:56 +0100
Subject: [PATCH] libiberty: Fix and cleanup choose_temp_base()
*choose-temp.c (choose_temp_base): Simplify code,
fix checking return value of mktemp().
---
libiberty/ChangeLog | 5 +++++
libiberty/choose-temp.c | 17 ++++++-----------
2 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/libiberty/ChangeLog b/libiberty/ChangeLog
index 95cb1525f2..7a7809ba47 100644
--- a/libiberty/ChangeLog
+++ b/libiberty/ChangeLog
@@ -1,3 +1,8 @@
+2019-11-07 Tim Ruehsen <tim.ruehsen@gmx.de>
+
+ *choose-temp.c (choose_temp_base): Simplify code,
+ fix checking return value of mktemp().
+
2019-08-08 Martin Liska <mliska@suse.cz>
PR bootstrap/91352
diff --git a/libiberty/choose-temp.c b/libiberty/choose-temp.c
index 72c1b710bd..17bb0f27d4 100644
--- a/libiberty/choose-temp.c
+++ b/libiberty/choose-temp.c
@@ -38,7 +38,6 @@ Boston, MA 02110-1301, USA. */
/* Name of temporary file.
mktemp requires 6 trailing X's. */
#define TEMP_FILE "ccXXXXXX"
-#define TEMP_FILE_LEN (sizeof(TEMP_FILE) - 1)
/*
@@ -47,7 +46,7 @@ Boston, MA 02110-1301, USA. */
Return a prefix for temporary file names or @code{NULL} if unable to
find one. The current directory is chosen if all else fails so the
program is exited if a temporary directory can't be found (@code{mktemp}
-fails). The buffer for the result is obtained with @code{xmalloc}.
+fails). The buffer for the result is obtained with @code{xasprintf}.
This function is provided for backwards compatibility only. Its use is
not recommended.
@@ -59,16 +58,12 @@ not recommended.
char *
choose_temp_base (void)
{
- const char *base = choose_tmpdir ();
- char *temp_filename;
- int len;
+ char *temp_filename = xasprintf("%s%s", choose_tmpdir (), TEMP_FILE);
- len = strlen (base);
- temp_filename = XNEWVEC (char, len + TEMP_FILE_LEN + 1);
- strcpy (temp_filename, base);
- strcpy (temp_filename + len, TEMP_FILE);
-
- if (mktemp (temp_filename) == 0)
+ /* mktemp() man page: If a unique name could not be created,
+ * template is made an empty string. */
+ if (mktemp (temp_filename) == NULL || *temp_filename == 0)
abort ();
+
return temp_filename;
}
--
2.24.0
Attachment:
signature.asc
Description: OpenPGP digital signature
| Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
|---|---|---|
| Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |