diff --git a/src/internal/tpax_driver_impl.h b/src/internal/tpax_driver_impl.h index 8251fb0..7726e1f 100644 --- a/src/internal/tpax_driver_impl.h +++ b/src/internal/tpax_driver_impl.h @@ -64,6 +64,7 @@ struct tpax_dirent { int fdat; int depth; int flags; + dev_t srdev; dev_t stdev; ino_t stino; size_t nsize; diff --git a/src/logic/tpax_archive_enqueue.c b/src/logic/tpax_archive_enqueue.c index edab132..917c8ca 100644 --- a/src/logic/tpax_archive_enqueue.c +++ b/src/logic/tpax_archive_enqueue.c @@ -192,6 +192,7 @@ static int tpax_archive_add_queue_item( const struct dirent * dirent, const struct tpax_dirent * parent, const char * prefix, + dev_t srdev, dev_t stdev, ino_t stino, int depth, @@ -233,6 +234,7 @@ static int tpax_archive_add_queue_item( cdent->fdat = fdat; cdent->depth = depth; cdent->flags = flags; + cdent->srdev = srdev; cdent->stdev = stdev; cdent->stino = stino; cdent->nsize = needed; @@ -367,7 +369,9 @@ static int tpax_archive_enqueue_dir_entries( if (tpax_archive_add_queue_item( dctx,dirent,dent,0, - st.st_dev,st.st_ino,depth, + st.st_rdev, + st.st_dev,st.st_ino, + depth, TPAX_ITEM_IMPLICIT, fd,&fkeep) < 0) return tpax_archive_enqueue_ret( @@ -406,7 +410,9 @@ static int tpax_archive_enqueue_dir_entries( if (tpax_archive_add_queue_item( dctx,lnkent,cdent,0, - lnkst.st_dev,lnkst.st_ino,depth+1, + lnkst.st_rdev, + lnkst.st_dev,lnkst.st_ino, + depth+1, TPAX_ITEM_IMPLICIT|TPAX_ITEM_SYMLINK, fd,&fkeep) < 0) return tpax_archive_enqueue_ret( @@ -517,6 +523,7 @@ int tpax_archive_enqueue( /* add to queue */ if (tpax_archive_add_queue_item( dctx,dirent,0,prefix, + uctx->st->st_rdev, uctx->st->st_dev, uctx->st->st_ino,0, TPAX_ITEM_EXPLICIT, @@ -551,7 +558,9 @@ int tpax_archive_enqueue( if (tpax_archive_add_queue_item( dctx,lnkent,cdent,0, - lnkst.st_dev,lnkst.st_ino,1, + lnkst.st_rdev, + lnkst.st_dev,lnkst.st_ino, + 1, TPAX_ITEM_EXPLICIT|TPAX_ITEM_SYMLINK, fdat,&fkeep) < 0) return tpax_archive_enqueue_ret(