#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;
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. */
/* [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
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
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. */
/* 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
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)
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,
}
}
-static void
+static _Noreturn void
xheader_set_single_keyword (char *kw)
{
USAGE_ERROR ((0, 0, _("Keyword %s is unknown or not yet implemented"), kw));
if (eq == kw)
USAGE_ERROR ((0, 0, _("Malformed pax option: %s"), quote (kw)));
-
+
if (eq[-1] == ':')
{
p--;
nptr = umaxtostr (n, nbuf);
len += nbuf + sizeof nbuf - 1 - nptr;
break;
-
+
default:
len += 2;
}
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);
}
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);
}
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))
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);
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),
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);
}
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))
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))
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);
}
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);
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);
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);
}
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))
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);
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),
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);
}
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))
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);
}
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))
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))
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))
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;
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)
{
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);
}
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);
}