Only use major()/minor() if they are available in tar(1)

Otherwise silently ignore them in the archive case.  This is the
same in principle as what we do in the unarchive case.
This commit is contained in:
sin 2014-01-30 16:14:33 +00:00
parent 0a7791a25c
commit e37e2782a9

4
tar.c
View File

@ -193,8 +193,12 @@ archive(const char* path)
readlink(path, h->link, (sizeof h->link)-1); readlink(path, h->link, (sizeof h->link)-1);
} else if(S_ISCHR(mode) || S_ISBLK(mode)) { } else if(S_ISCHR(mode) || S_ISBLK(mode)) {
h->type = S_ISCHR(mode) ? CHARDEV : BLOCKDEV; h->type = S_ISCHR(mode) ? CHARDEV : BLOCKDEV;
#if defined(major) && defined(minor)
putoctal(h->major, (unsigned)major(st.st_dev), sizeof h->major); putoctal(h->major, (unsigned)major(st.st_dev), sizeof h->major);
putoctal(h->minor, (unsigned)minor(st.st_dev), sizeof h->minor); putoctal(h->minor, (unsigned)minor(st.st_dev), sizeof h->minor);
#else
return 0;
#endif
} else if(S_ISFIFO(mode)) { } else if(S_ISFIFO(mode)) {
h->type = FIFO; h->type = FIFO;
} }