aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBill Kendall <wkendall@sgi.com>2009-10-22 16:52:32 +0000
committerAlex Elder <aelder@sgi.com>2009-10-23 15:16:34 -0500
commit040e37332f4c86033fa9f84c95fbe04a4f89ff42 (patch)
tree3d9887ef756972d73ac6acaf40d59ae6d1061a51
parentcd1534881b1eb96b3eef6bb4d00b789cb31b18b8 (diff)
downloadxfsdump-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.c55
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;