X-Git-Url: https://git.dogcows.com/gitweb?a=blobdiff_plain;f=src%2Fxheader.c;h=1441eec8728b5e14f4d1f5bdcf74737fcea20586;hb=c95535bae88651c71eeab8806004994c582256d8;hp=1f1b190d0cc5eca9b47fb3c57b8c9f138e619b81;hpb=f3875c4a269a88121e5c1e72d3dc1a1fe545d2e8;p=chaz%2Ftar diff --git a/src/xheader.c b/src/xheader.c index 1f1b190..1441eec 100644 --- a/src/xheader.c +++ b/src/xheader.c @@ -18,9 +18,7 @@ #include "system.h" -#include #include -#include #include #include "common.h" @@ -38,7 +36,13 @@ struct xhdr_tab void (*decoder) (struct tar_stat_info *, char const *); }; -static struct xhdr_tab const xhdr_tab[]; +/* This declaration must be extern, because ISO C99 section 6.9.2 + prohibits a tentative definition that has both internal linkage and + incomplete type. If we made it static, we'd have to declare its + size which would be a maintenance pain; if we put its initializer + here, we'd need a boatload of forward declarations, which would be + even more of a pain. */ +extern struct xhdr_tab const xhdr_tab[]; static struct xhdr_tab const * locate_handler (char const *keyword) @@ -408,7 +412,7 @@ uname_decoder (struct tar_stat_info *st, char const *arg) assign_string (&st->uname, arg); } -static struct xhdr_tab const xhdr_tab[] = { +struct xhdr_tab const xhdr_tab[] = { { "atime", atime_coder, atime_decoder }, { "comment", dummy_coder, dummy_decoder }, { "charset", dummy_coder, dummy_decoder }, @@ -422,6 +426,9 @@ static struct xhdr_tab const xhdr_tab[] = { { "uid", uid_coder, uid_decoder }, { "uname", uname_coder, uname_decoder }, + /* The number of entries in xhdr_tab must agree with the array + bounds in xhdr_tab's forward declaration. */ + #if 0 /* GNU private keywords (not yet implemented) */ /* Sparse file handling */ { "GNU.sparse.offset", sparse_offset_coder, sparse_offset_decoder },