X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Far.c;h=7b607dcdf570689cb87c718bb16b286baae39f71;hb=575596137b326da0fb261d4c19abe44c172b0cb7;hp=62919ff398e24518be73bc02be069de713230bf8;hpb=b11e2699c7ec42e6d2fc0f4c940f14e7c89b3974;p=platform%2Fupstream%2Fmake.git
diff --git a/src/ar.c b/src/ar.c
index 62919ff..7b607dc 100644
--- a/src/ar.c
+++ b/src/ar.c
@@ -1,5 +1,5 @@
/* Interface to 'ar' archives for GNU Make.
-Copyright (C) 1988-2020 Free Software Foundation, Inc.
+Copyright (C) 1988-2022 Free Software Foundation, Inc.
This file is part of GNU Make.
@@ -13,7 +13,7 @@ WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
A PARTICULAR PURPOSE. See the GNU General Public License for more details.
You should have received a copy of the GNU General Public License along with
-this program. If not, see . */
+this program. If not, see . */
#include "makeint.h"
@@ -22,6 +22,7 @@ this program. If not, see . */
#include "filedef.h"
#include "dep.h"
#include
+#include
/* Return nonzero if NAME is an archive-member reference, zero if not. An
archive-member reference is a name like 'lib(member)' where member is a
@@ -35,7 +36,7 @@ ar_name (const char *name)
const char *p = strchr (name, '(');
const char *end;
- if (p == 0 || p == name)
+ if (p == NULL || p == name)
return 0;
end = p + strlen (p) - 1;
@@ -60,6 +61,9 @@ ar_parse_name (const char *name, char **arname_p, char **memname_p)
*arname_p = xstrdup (name);
p = strchr (*arname_p, '(');
+ /* This is never called unless ar_name() is true so p cannot be NULL. */
+ if (!p)
+ OS (fatal, NILF, "Internal: ar_parse_name: bad name '%s'", *arname_p);
*(p++) = '\0';
p[strlen (p) - 1] = '\0';
*memname_p = p;
@@ -69,10 +73,10 @@ ar_parse_name (const char *name, char **arname_p, char **memname_p)
/* This function is called by 'ar_scan' to find which member to look at. */
/* ARGSUSED */
-static long int
+static intmax_t
ar_member_date_1 (int desc UNUSED, const char *mem, int truncated,
long int hdrpos UNUSED, long int datapos UNUSED,
- long int size UNUSED, long int date,
+ long int size UNUSED, intmax_t date,
int uid UNUSED, int gid UNUSED, unsigned int mode UNUSED,
const void *name)
{
@@ -86,7 +90,7 @@ ar_member_date (const char *name)
{
char *arname;
char *memname;
- long int val;
+ intmax_t val;
ar_parse_name (name, &arname, &memname);
@@ -111,7 +115,7 @@ ar_member_date (const char *name)
free (arname);
- return (val <= 0 ? (time_t) -1 : (time_t) val);
+ return 0 < val && val <= TYPE_MAXIMUM (time_t) ? val : -1;
}
/* Set the archive-member NAME's modtime to now. */
@@ -194,10 +198,10 @@ struct ar_glob_state
/* This function is called by 'ar_scan' to match one archive
element against the pattern in STATE. */
-static long int
+static intmax_t
ar_glob_match (int desc UNUSED, const char *mem, int truncated UNUSED,
long int hdrpos UNUSED, long int datapos UNUSED,
- long int size UNUSED, long int date UNUSED, int uid UNUSED,
+ long int size UNUSED, intmax_t date UNUSED, int uid UNUSED,
int gid UNUSED, unsigned int mode UNUSED, const void *arg)
{
struct ar_glob_state *state = (struct ar_glob_state *)arg;
@@ -218,7 +222,7 @@ ar_glob_match (int desc UNUSED, const char *mem, int truncated UNUSED,
++state->n;
}
- return 0L;
+ return 0;
}
/* Return nonzero if PATTERN contains any metacharacters.