diff options
author | Bill Kendall <wkendall@sgi.com> | 2009-10-22 16:52:32 +0000 |
---|---|---|
committer | Alex Elder <aelder@sgi.com> | 2009-10-23 15:16:34 -0500 |
commit | 040e37332f4c86033fa9f84c95fbe04a4f89ff42 (patch) | |
tree | 3d9887ef756972d73ac6acaf40d59ae6d1061a51 | |
parent | cd1534881b1eb96b3eef6bb4d00b789cb31b18b8 (diff) | |
download | xfsdump-dev-040e37332f4c86033fa9f84c95fbe04a4f89ff42.tar.gz |
use lpath_to_handle when restoring symlinks
Update xfsrestore to use the new lpath_to_handle function
when dealing with symlinks.
Signed-off-by: Bill Kendall <wkendall@sgi.com>
Reviewed-by: Alex Elder <aelder@sgi.com>
Signed-off-by: Alex Elder <aelder@sgi.com>
-rw-r--r-- | restore/content.c | 55 |
1 files changed, 21 insertions, 34 deletions
diff --git a/restore/content.c b/restore/content.c index eb6e78c5..99549a8e 100644 --- a/restore/content.c +++ b/restore/content.c @@ -797,7 +797,6 @@ static void partial_reg(ix_t d_index, xfs_ino_t ino, off64_t fsize, off64_t offset, off64_t sz); static bool_t partial_check (xfs_ino_t ino, off64_t fsize); static bool_t partial_check2 (partial_rest_t *isptr, off64_t fsize); -static int do_fssetdm_by_handle( char *path, fsdmidata_t *fdmp); static int quotafilecheck(char *type, char *dstdir, char *quotafile); /* definition of locally defined global variables ****************************/ @@ -7895,14 +7894,28 @@ restore_symlink( drive_t *drivep, } if ( persp->a.restoredmpr) { - fsdmidata_t fssetdm; - - /* Restore DMAPI fields. */ + fsdmidata_t fssetdm; + void *hanp; + size_t hlen=0; - fssetdm.fsd_dmevmask = bstatp->bs_dmevmask; - fssetdm.fsd_padding = 0; - fssetdm.fsd_dmstate = bstatp->bs_dmstate; - rval = do_fssetdm_by_handle(path, &fssetdm); + /* Restore DMAPI fields. */ + fssetdm.fsd_dmevmask = bstatp->bs_dmevmask; + fssetdm.fsd_padding = 0; + fssetdm.fsd_dmstate = bstatp->bs_dmstate; + + if (lpath_to_handle(persp->a.dstdir, path, &hanp, &hlen)) { + mlog( MLOG_NORMAL | MLOG_WARNING, _( + "lpath_to_handle of %s failed: %s\n"), + path, strerror( errno )); + } else { + if (fssetdm_by_handle(hanp, hlen, &fssetdm)) { + mlog( MLOG_NORMAL | MLOG_WARNING, + _("fssetdm_by_handle of %s " + "failed: %s\n"), + path, strerror( errno )); + } + free_handle(hanp, hlen); + } } } @@ -9525,32 +9538,6 @@ display_needed_objects( purp_t purp, } static int -do_fssetdm_by_handle( - char *path, - fsdmidata_t *fdmp) -{ - void *hanp; - size_t hlen=0; - int rc; - - if (path_to_handle(path, &hanp, &hlen)) { - mlog( MLOG_NORMAL | MLOG_WARNING, _( - "path_to_handle of %s failed:%s\n"), - path, strerror( errno )); - return -1; - } - - rc = fssetdm_by_handle(hanp, hlen, fdmp); - free_handle(hanp, hlen); - if (rc) { - mlog( MLOG_NORMAL | MLOG_WARNING, _( - "fssetdm_by_handle of %s failed %s\n"), - path, strerror( errno )); - } - return rc; -} - -static int quotafilecheck(char *type, char *dstdir, char *quotafile) { struct stat s; |