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
1 changed files with 4 additions and 0 deletions

4
tar.c
View File

@ -193,8 +193,12 @@ archive(const char* path)
readlink(path, h->link, (sizeof h->link)-1);
} else if(S_ISCHR(mode) || S_ISBLK(mode)) {
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->minor, (unsigned)minor(st.st_dev), sizeof h->minor);
#else
return 0;
#endif
} else if(S_ISFIFO(mode)) {
h->type = FIFO;
}