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.