X-Git-Url: https://git.wh0rd.org/?p=dump.git;a=blobdiff_plain;f=restore%2Fmain.c;h=dfbe8c6ce557ca18d282e67c290b0f8f0ad911ef;hp=98674e4c8fc4c171cbef59a6489e3b436c4160f9;hb=18dc6e86736f5319aa7f1d85bf3dc0f696a981ec;hpb=e1abc9ce25132eef1239047a071c2c1d4822dd9f diff --git a/restore/main.c b/restore/main.c index 98674e4..dfbe8c6 100644 --- a/restore/main.c +++ b/restore/main.c @@ -37,11 +37,12 @@ #ifndef lint static const char rcsid[] = - "$Id: main.c,v 1.44 2003/03/30 15:40:38 stelian Exp $"; + "$Id: main.c,v 1.49 2005/01/14 13:04:56 stelian Exp $"; #endif /* not lint */ #include #include +#include #include #include #include @@ -59,7 +60,15 @@ static const char rcsid[] = #include #include #else /* __linux__ */ +#ifdef sunos +#include +#include +#include +#include +#include +#else #include +#endif #endif /* __linux__ */ #include @@ -77,9 +86,13 @@ static const char rcsid[] = #include "restore.h" #include "extern.h" +int abortifconnerr = 1; /* set to 1 if lib dumprmt.o should exit on connection errors + otherwise just print a message using msg */ + int aflag = 0, bflag = 0, cvtflag = 0, dflag = 0, vflag = 0, yflag = 0; int hflag = 1, mflag = 1, Mflag = 0, Nflag = 0, Vflag = 0, zflag = 0; int uflag = 0, lflag = 0, Lflag = 0, oflag = 0; +int ufs2flag = 0; char *Afile = NULL; int dokerberos = 0; char command = '\0'; @@ -99,6 +112,7 @@ char filesys[NAMELEN]; static const char *stdin_opt = NULL; char *bot_script = NULL; dump_ino_t volinfo[TP_NINOS]; +int wdfd; #ifdef USE_QFA FILE *gTapeposfp; @@ -112,6 +126,8 @@ unsigned long qfadumpdate; long long curtapepos; #endif /* USE_QFA */ +long smtc_errno; + #if defined(__linux__) || defined(sunos) char *__progname; #endif @@ -341,6 +357,10 @@ main(int argc, char *argv[]) else setinput(inputdev); + wdfd = open(".", O_RDONLY); + if (wdfd < 0) + err(1, "can't get current directory"); + if (argc == 0 && !filelist) { argc = 1; *--argv = "."; @@ -379,6 +399,18 @@ main(int argc, char *argv[]) /* end reading header info */ /* tape position table starts here */ gSeekstart = ftell(gTapeposfp); /* remember for later use */ +#ifdef sunos + if (GetSCSIIDFromPath(inputdev, &scsiid)) { + errx(1, "can't get SCSI-ID for %s\n", inputdev); + } + if (scsiid < 0) { + errx(1, "can't get SCSI-ID for %s\n", inputdev); + } + sprintf(smtcpath, "/dev/rsmtc%ld,0", scsiid); + if ((fdsmtc = open(smtcpath, O_RDWR)) == -1) { + errx(1, "can't open smtc device: %s, %d\n", smtcpath, errno); + } +#endif } #endif /* USE_QFA */ @@ -392,6 +424,7 @@ main(int argc, char *argv[]) Vprintf(stdout, "Begin compare restore\n"); compare_ignore_not_found = 0; compare_errors = 0; + Nflag = 1; setup(); printf("filesys = %s\n", filesys); if (STAT(filesys, &stbuf) < 0) @@ -400,9 +433,10 @@ main(int argc, char *argv[]) err(1, "cannot cd to %s", filesys); compare_ignore_not_found = dumptime > 0; initsymtable((char *)0); - extractdirs(0); + extractdirs(1); treescan(".", ROOTINO, nodeupdates); compareleaves(); + comparedirmodes(); checkrestore(); if (compare_errors) { printf("Some files were modified!\n"); @@ -535,6 +569,11 @@ main(int argc, char *argv[]) setdirmodes(oflag ? FORCE : 0); if (dflag) checkrestore(); +#ifdef sunos + if (fdsmtc != -1) { + close(fdsmtc); + } +#endif /* sunos */ #ifdef DEBUG_QFA tiend = time(NULL); titaken = tiend - tistart; @@ -547,6 +586,18 @@ main(int argc, char *argv[]) #ifdef DEBUG_QFA tistart = time(NULL); #endif +#ifdef sunos + if (GetSCSIIDFromPath(inputdev, &scsiid)) { + errx(1, "can't get SCSI-ID for %s\n", inputdev); + } + if (scsiid < 0) { + errx(1, "can't get SCSI-ID for %s\n", inputdev); + } + sprintf(smtcpath, "/dev/rsmtc%ld,0", scsiid); + if ((fdsmtc = open(smtcpath, O_RDWR)) == -1) { + errx(1, "can't open smtc device: %s, %d\n", smtcpath, errno); + } +#endif /* sunos */ setup(); msg("writing QFA positions to %s\n", gTapeposfile); (void) umask(orig_umask); @@ -556,7 +607,7 @@ main(int argc, char *argv[]) errx(1, "can't create tapeposfile\n"); (void) umask(FORCED_UMASK); /* print QFA-file header */ - sprintf(gTps, "%s\n%s\n%ld\n\n", QFA_MAGIC, QFA_VERSION,(unsigned long)spcl.c_date); + sprintf(gTps, "%s\n%s\n%ld\n\n", QFA_MAGIC, QFA_VERSION, (unsigned long)spcl.c_date); if (write(gTapeposfd, gTps, strlen(gTps)) != (ssize_t)strlen(gTps)) errx(1, "can't write tapeposfile\n"); sprintf(gTps, "ino\ttapeno\ttapepos\n"); @@ -578,14 +629,19 @@ main(int argc, char *argv[]) treescan(name, ino, addfile); } createfiles(); +#ifdef sunos + if (fdsmtc != -1) { + close(fdsmtc); + } +#endif /* sunos */ #ifdef DEBUG_QFA tiend = time(NULL); titaken = tiend - tistart; - msg("writing QFA positions took %d:%02d:%02d\n", titaken / 3600, + msg("writing QFA positions took %d:%02d:%02d\n", titaken / 3600, (titaken % 3600) / 60, titaken % 60); #endif /* DEBUG_QFA */ break; -#endif /* USE_QFA */ +#endif /* USE_QFA */ } exit(0); /* NOTREACHED */