diff options
author | Paul Eggert <eggert@cs.ucla.edu> | 2021-02-27 18:42:58 -0800 |
---|---|---|
committer | Paul Eggert <eggert@cs.ucla.edu> | 2021-03-01 00:18:44 -0800 |
commit | f4e2411bf53027c53f440b836143e64eb171a3ad (patch) | |
tree | 9bf5d3da5fdba217e59f2518fea8f36ac45db9de | |
parent | ace146f6a4f41bd92e2a2c67776f7300e4242ab0 (diff) | |
download | tar-f4e2411bf53027c53f440b836143e64eb171a3ad.tar.gz |
maint: port better to non-GCC compilers
This can be helpful in porting to compilers like Oracle Developer
Studio that support some but not all GCC attributes.
* lib/wordsplit.c (FALLTHROUGH): Remove; now done by attribute.h.
* lib/wordsplit.h (__WORDSPLIT_ATTRIBUTE_FORMAT): Remove;
all uses replaced by ATTRIBUTE_FORMAT.
* lib/wordsplit.h, src/buffer.c, src/common.h, src/compare.c:
* src/sparse.c, src/system.c, src/xheader.c:
Prefer ATTRIBUTE_FORMAT, MAYBE_UNUSED, _Noreturn, etc. to
__attribute__.
-rw-r--r-- | lib/wordsplit.c | 10 | ||||
-rw-r--r-- | lib/wordsplit.h | 31 | ||||
-rw-r--r-- | src/buffer.c | 2 | ||||
-rw-r--r-- | src/common.h | 13 | ||||
-rw-r--r-- | src/compare.c | 3 | ||||
-rw-r--r-- | src/sparse.c | 12 | ||||
-rw-r--r-- | src/system.c | 4 | ||||
-rw-r--r-- | src/xheader.c | 97 |
8 files changed, 77 insertions, 95 deletions
diff --git a/lib/wordsplit.c b/lib/wordsplit.c index 28390c5b..d8ce1247 100644 --- a/lib/wordsplit.c +++ b/lib/wordsplit.c @@ -36,14 +36,6 @@ #define _(msgid) gettext (msgid) #define N_(msgid) msgid -#ifndef FALLTHROUGH -# if __GNUC__ < 7 -# define FALLTHROUGH ((void) 0) -# else -# define FALLTHROUGH __attribute__ ((__fallthrough__)) -# endif -#endif - #include <wordsplit.h> #define ISWS(c) ((c)==' '||(c)=='\t'||(c)=='\n') @@ -74,7 +66,7 @@ _wsplt_alloc_die (struct wordsplit *wsp) abort (); } -static void __WORDSPLIT_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) +static void ATTRIBUTE_FORMAT ((__printf__, 1, 2)) _wsplt_error (const char *fmt, ...) { va_list ap; diff --git a/lib/wordsplit.h b/lib/wordsplit.h index ff7f6e37..bca3b6dc 100644 --- a/lib/wordsplit.h +++ b/lib/wordsplit.h @@ -18,12 +18,7 @@ #define __WORDSPLIT_H #include <stddef.h> - -#if 2 < __GNUC__ + (7 <= __GNUC_MINOR__) -# define __WORDSPLIT_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) -#else -# define __WORDSPLIT_ATTRIBUTE_FORMAT(spec) /* empty */ -#endif +#include <attribute.h> typedef struct wordsplit wordsplit_t; @@ -36,16 +31,16 @@ typedef struct wordsplit wordsplit_t; must be set (or unset, if starting with !) in ws_flags (if starting with WRDSF_) or ws_options (if starting with WRDSO_) to initialize or use the given member. - + If not redefined explicitly, most of them are set to some reasonable default value upon entry to wordsplit(). */ -struct wordsplit +struct wordsplit { size_t ws_wordc; /* [Output] Number of words in ws_wordv. */ char **ws_wordv; /* [Output] Array of parsed out words. */ size_t ws_offs; /* [Input] (WRDSF_DOOFFS) Number of initial elements in ws_wordv to fill with NULLs. */ - size_t ws_wordn; /* Number of elements ws_wordv can accomodate. */ + size_t ws_wordn; /* Number of elements ws_wordv can accomodate. */ unsigned ws_flags; /* [Input] Flags passed to wordsplit. */ unsigned ws_options; /* [Input] (WRDSF_OPTIONS) Additional options. */ @@ -62,11 +57,11 @@ struct wordsplit /* [Input] (WRDSF_ALLOC_DIE) Function called when out of memory. Must not return. */ void (*ws_error) (const char *, ...) - __attribute__ ((__format__ (__printf__, 1, 2))); + ATTRIBUTE_FORMAT ((printf, 1, 2)); /* [Input] (WRDSF_ERROR) Function used for error reporting */ void (*ws_debug) (const char *, ...) - __attribute__ ((__format__ (__printf__, 1, 2))); + ATTRIBUTE_FORMAT ((printf, 1, 2)); /* [Input] (WRDSF_DEBUG) Function used for debug output. */ const char **ws_env; /* [Input] (WRDSF_ENV, !WRDSF_NOVAR) Array of @@ -75,7 +70,7 @@ struct wordsplit char **ws_envbuf; size_t ws_envidx; size_t ws_envsiz; - + int (*ws_getvar) (char **ret, const char *var, size_t len, void *clos); /* [Input] (WRDSF_GETVAR, !WRDSF_NOVAR) Looks up the name VAR (LEN bytes long) in the table of @@ -100,8 +95,8 @@ struct wordsplit See ws_getvar for a discussion of possible return values. */ - - const char *ws_input; /* Input string (the S argument to wordsplit. */ + + const char *ws_input; /* Input string (the S argument to wordsplit. */ size_t ws_len; /* Length of ws_input. */ size_t ws_endp; /* Points past the last processed byte in ws_input. */ @@ -221,9 +216,9 @@ struct wordsplit /* Handle hex escapes in quoted strings */ #define WRDSO_XESC_QUOTE 0x00000400 -#define WRDSO_BSKEEP WRDSO_BSKEEP_WORD -#define WRDSO_OESC WRDSO_OESC_WORD -#define WRDSO_XESC WRDSO_XESC_WORD +#define WRDSO_BSKEEP WRDSO_BSKEEP_WORD +#define WRDSO_OESC WRDSO_OESC_WORD +#define WRDSO_XESC WRDSO_XESC_WORD /* Indices into ws_escape */ #define WRDSX_WORD 0 @@ -254,7 +249,7 @@ void wordsplit_free_envbuf (wordsplit_t *ws); int wordsplit_get_words (wordsplit_t *ws, size_t *wordc, char ***wordv); static inline void wordsplit_getwords (wordsplit_t *ws, size_t *wordc, char ***wordv) - __attribute__ ((deprecated)); + DEPRECATED; static inline void wordsplit_getwords (wordsplit_t *ws, size_t *wordc, char ***wordv) diff --git a/src/buffer.c b/src/buffer.c index e4386252..a5e74de7 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -1850,7 +1850,7 @@ simple_flush_read (void) /* Simple flush write (no multi-volume or label extensions) */ static void -simple_flush_write (size_t level __attribute__((unused))) +simple_flush_write (size_t level MAYBE_UNUSED) { ssize_t status; diff --git a/src/common.h b/src/common.h index 3af33298..4b0ba2b2 100644 --- a/src/common.h +++ b/src/common.h @@ -464,7 +464,7 @@ void reset_eof (void); void set_next_block_after (union block *block); void clear_read_error_count (void); void xclose (int fd); -void archive_write_error (ssize_t status) __attribute__ ((noreturn)); +_Noreturn void archive_write_error (ssize_t status); void archive_read_error (void); off_t seek_archive (off_t size); void set_start_time (void); @@ -727,9 +727,8 @@ void stat_diag (char const *name); void file_removed_diag (const char *name, bool top_level, void (*diagfn) (char const *name)); void write_error_details (char const *name, size_t status, size_t size); -void write_fatal (char const *name) __attribute__ ((noreturn)); -void write_fatal_details (char const *name, ssize_t status, size_t size) - __attribute__ ((noreturn)); +_Noreturn void write_fatal (char const *name); +_Noreturn void write_fatal_details (char const *name, ssize_t status, size_t size); pid_t xfork (void); void xpipe (int fd[2]); @@ -797,14 +796,14 @@ bool contains_dot_dot (char const *name); /* Module tar.c. */ -void usage (int); +_Noreturn void usage (int); int confirm (const char *message_action, const char *name); void tar_stat_init (struct tar_stat_info *st); bool tar_stat_close (struct tar_stat_info *st); void tar_stat_destroy (struct tar_stat_info *st); -void usage (int) __attribute__ ((noreturn)); +_Noreturn void usage (int); int tar_timespec_cmp (struct timespec a, struct timespec b); const char *archive_format_string (enum archive_format fmt); const char *subcommand_string (enum subcommand c); @@ -913,7 +912,7 @@ void sys_exec_checkpoint_script (const char *script_name, /* Module compare.c */ void report_difference (struct tar_stat_info *st, const char *message, ...) - __attribute__ ((format (printf, 2, 3))); + ATTRIBUTE_FORMAT ((printf, 2, 3)); /* Module sparse.c */ bool sparse_member_p (struct tar_stat_info *st); diff --git a/src/compare.c b/src/compare.c index feb28b87..5808655e 100644 --- a/src/compare.c +++ b/src/compare.c @@ -73,8 +73,7 @@ report_difference (struct tar_stat_info *st, const char *fmt, ...) /* Take a buffer returned by read_and_process and do nothing with it. */ static int -process_noop (size_t size __attribute__ ((unused)), - char *data __attribute__ ((unused))) +process_noop (size_t size MAYBE_UNUSED, char *data MAYBE_UNUSED) { return 1; } diff --git a/src/sparse.c b/src/sparse.c index c13d4a55..243e1c51 100644 --- a/src/sparse.c +++ b/src/sparse.c @@ -439,7 +439,7 @@ sparse_dump_region (struct tar_sparse_file *file, size_t i) - (file->stat_info->sparse_map[i].offset + file->stat_info->sparse_map[i].numbytes - bytes_left); - + WARNOPT (WARN_FILE_SHRANK, (0, 0, ngettext ("%s: File shrank by %s byte; padding with zeros", @@ -627,7 +627,7 @@ check_sparse_region (struct tar_sparse_file *file, off_t beg, off_t end) report_difference (file->stat_info, _("Size differs")); return false; } - + if (!zero_block_p (diff_buffer, bytes_read)) { char begbuf[INT_BUFSIZE_BOUND (off_t)]; @@ -666,7 +666,7 @@ check_data_region (struct tar_sparse_file *file, size_t i) return false; } set_next_block_after (blk); - file->dumped_size += BLOCKSIZE; + file->dumped_size += BLOCKSIZE; bytes_read = safe_read (file->fd, diff_buffer, rdsize); if (bytes_read == SAFE_READ_ERROR) { @@ -754,7 +754,7 @@ enum oldgnu_add_status }; static bool -oldgnu_sparse_member_p (struct tar_sparse_file *file __attribute__ ((unused))) +oldgnu_sparse_member_p (struct tar_sparse_file *file MAYBE_UNUSED) { return current_header->header.typeflag == GNUTYPE_SPARSE; } @@ -898,7 +898,7 @@ static struct tar_sparse_optab const oldgnu_optab = { /* Star */ static bool -star_sparse_member_p (struct tar_sparse_file *file __attribute__ ((unused))) +star_sparse_member_p (struct tar_sparse_file *file MAYBE_UNUSED) { return current_header->header.typeflag == GNUTYPE_SPARSE; } @@ -1250,7 +1250,7 @@ pax_decode_header (struct tar_sparse_file *file) char *p; size_t i; off_t start; - + #define COPY_BUF(b,buf,src) do \ { \ char *endp = b->buffer + BLOCKSIZE; \ diff --git a/src/system.c b/src/system.c index 9e273bc7..eb41c28d 100644 --- a/src/system.c +++ b/src/system.c @@ -298,10 +298,8 @@ xdup2 (int from, int into) } } -static void wait_for_grandchild (pid_t pid) __attribute__ ((__noreturn__)); - /* Propagate any failure of the grandchild back to the parent. */ -static void +static _Noreturn void wait_for_grandchild (pid_t pid) { int wait_status; diff --git a/src/xheader.c b/src/xheader.c index 229137ea..e773a951 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -29,7 +29,6 @@ static void xheader_init (struct xheader *xhdr); static bool xheader_protected_pattern_p (char const *pattern); static bool xheader_protected_keyword_p (char const *keyword); -static void xheader_set_single_keyword (char *) __attribute__ ((noreturn)); /* Used by xheader_finish() */ static void code_string (char const *string, char const *keyword, @@ -158,7 +157,7 @@ xheader_list_destroy (struct keyword_list **root) } } -static void +static _Noreturn void xheader_set_single_keyword (char *kw) { USAGE_ERROR ((0, 0, _("Keyword %s is unknown or not yet implemented"), kw)); @@ -186,7 +185,7 @@ xheader_set_keyword_equal (char *kw, char *eq) if (eq == kw) USAGE_ERROR ((0, 0, _("Malformed pax option: %s"), quote (kw))); - + if (eq[-1] == ':') { p--; @@ -306,7 +305,7 @@ xheader_format_name (struct tar_stat_info *st, const char *fmt, size_t n) nptr = umaxtostr (n, nbuf); len += nbuf + sizeof nbuf - 1 - nptr; break; - + default: len += 2; } @@ -804,7 +803,7 @@ xheader_decode (struct tar_stat_info *st) static void decg (void *data, char const *keyword, char const *value, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { struct keyword_list **kwl = data; struct xhdr_tab const *tab = locate_handler (keyword); @@ -1196,24 +1195,24 @@ decode_num (uintmax_t *num, char const *arg, uintmax_t maxval, } static void -dummy_coder (struct tar_stat_info const *st __attribute__ ((unused)), - char const *keyword __attribute__ ((unused)), - struct xheader *xhdr __attribute__ ((unused)), - void const *data __attribute__ ((unused))) +dummy_coder (struct tar_stat_info const *st MAYBE_UNUSED, + char const *keyword MAYBE_UNUSED, + struct xheader *xhdr MAYBE_UNUSED, + void const *data MAYBE_UNUSED) { } static void -dummy_decoder (struct tar_stat_info *st __attribute__ ((unused)), - char const *keyword __attribute__ ((unused)), - char const *arg __attribute__ ((unused)), - size_t size __attribute__((unused))) +dummy_decoder (struct tar_stat_info *st MAYBE_UNUSED, + char const *keyword MAYBE_UNUSED, + char const *arg MAYBE_UNUSED, + size_t size MAYBE_UNUSED) { } static void atime_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_time (st->atime, keyword, xhdr); } @@ -1222,7 +1221,7 @@ static void atime_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { struct timespec ts; if (decode_time (&ts, arg, keyword)) @@ -1231,7 +1230,7 @@ atime_decoder (struct tar_stat_info *st, static void gid_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_signed_num (st->stat.st_gid, keyword, TYPE_MINIMUM (gid_t), TYPE_MAXIMUM (gid_t), xhdr); @@ -1241,7 +1240,7 @@ static void gid_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { intmax_t u; if (decode_signed_num (&u, arg, TYPE_MINIMUM (gid_t), @@ -1251,39 +1250,39 @@ gid_decoder (struct tar_stat_info *st, static void gname_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_string (st->gname, keyword, xhdr); } static void gname_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { decode_string (&st->gname, arg); } static void linkpath_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_string (st->link_name, keyword, xhdr); } static void linkpath_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { decode_string (&st->link_name, arg); } static void ctime_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_time (st->ctime, keyword, xhdr); } @@ -1292,7 +1291,7 @@ static void ctime_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { struct timespec ts; if (decode_time (&ts, arg, keyword)) @@ -1311,7 +1310,7 @@ static void mtime_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { struct timespec ts; if (decode_time (&ts, arg, keyword)) @@ -1320,7 +1319,7 @@ mtime_decoder (struct tar_stat_info *st, static void path_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_string (st->file_name, keyword, xhdr); } @@ -1336,9 +1335,9 @@ raw_path_decoder (struct tar_stat_info *st, char const *arg) static void path_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { if (! st->sparse_name_done) raw_path_decoder (st, arg); @@ -1346,9 +1345,9 @@ path_decoder (struct tar_stat_info *st, static void sparse_path_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { st->sparse_name_done = true; raw_path_decoder (st, arg); @@ -1356,7 +1355,7 @@ sparse_path_decoder (struct tar_stat_info *st, static void size_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_num (st->stat.st_size, keyword, xhdr); } @@ -1365,7 +1364,7 @@ static void size_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1374,7 +1373,7 @@ size_decoder (struct tar_stat_info *st, static void uid_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_signed_num (st->stat.st_uid, keyword, TYPE_MINIMUM (uid_t), TYPE_MAXIMUM (uid_t), xhdr); @@ -1384,7 +1383,7 @@ static void uid_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { intmax_t u; if (decode_signed_num (&u, arg, TYPE_MINIMUM (uid_t), @@ -1394,16 +1393,16 @@ uid_decoder (struct tar_stat_info *st, static void uname_coder (struct tar_stat_info const *st, char const *keyword, - struct xheader *xhdr, void const *data __attribute__ ((unused))) + struct xheader *xhdr, void const *data MAYBE_UNUSED) { code_string (st->uname, keyword, xhdr); } static void uname_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { decode_string (&st->uname, arg); } @@ -1419,7 +1418,7 @@ static void sparse_size_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1432,7 +1431,7 @@ sparse_size_decoder (struct tar_stat_info *st, static void sparse_numblocks_coder (struct tar_stat_info const *st, char const *keyword, struct xheader *xhdr, - void const *data __attribute__ ((unused))) + void const *data MAYBE_UNUSED) { code_num (st->sparse_map_avail, keyword, xhdr); } @@ -1441,7 +1440,7 @@ static void sparse_numblocks_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { uintmax_t u; if (decode_num (&u, arg, SIZE_MAX, keyword)) @@ -1464,7 +1463,7 @@ static void sparse_offset_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1489,7 +1488,7 @@ static void sparse_numbytes_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { uintmax_t u; if (decode_num (&u, arg, TYPE_MAXIMUM (off_t), keyword)) @@ -1506,7 +1505,7 @@ static void sparse_map_decoder (struct tar_stat_info *st, char const *keyword, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { int offset = 1; struct sp_array e; @@ -1588,7 +1587,7 @@ dumpdir_coder (struct tar_stat_info const *st, char const *keyword, static void dumpdir_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, size_t size) { @@ -1605,9 +1604,9 @@ volume_label_coder (struct tar_stat_info const *st, char const *keyword, static void volume_label_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { decode_string (&volume_label, arg); } @@ -1651,9 +1650,9 @@ volume_offset_decoder (struct tar_stat_info *st, static void volume_filename_decoder (struct tar_stat_info *st, - char const *keyword __attribute__((unused)), + char const *keyword MAYBE_UNUSED, char const *arg, - size_t size __attribute__((unused))) + size_t size MAYBE_UNUSED) { decode_string (&continued_file_name, arg); } |