+ else {
+ if (stat(pathname, &statbuf) == -1) {
+ msg("File cannot be accessed (%s).\n", pathname);
+ msg("The ENTIRE dump is aborted.\n");
+ exit(X_STARTUP);
+ }
+ filedev = statbuf.st_dev;
+ if (!(statbuf.st_mode & S_IFDIR)) /* is a file */
+ anydirskipped = maponefile(maxino, &tapesize,
+ directory);
+ else
+ anydirskipped = mapfilesfromdir(maxino, &tapesize,
+ directory);
+ }
+ while (argc--) {
+ int anydirskipped2;
+ char *p = *argv;
+ /* check if file is available */
+ if (stat(p, &statbuf) == -1) {
+ msg("File cannot be accessed (%s).\n", p);
+ msg("The ENTIRE dump is aborted.\n");
+ exit(X_STARTUP);
+ }
+ /* check if file is on same unix partiton as the first
+ * argument */
+ if (statbuf.st_dev != filedev) {
+ msg("Files are not on same file system (%s).\n", p);
+ msg("The ENTIRE dump is aborted.\n");
+ exit(X_STARTUP);
+ }
+ /* check if file is a directory */
+ if (!(statbuf.st_mode & S_IFDIR))
+ anydirskipped2 = maponefile(maxino, &tapesize,
+ p+strlen(dt->fs_file));
+ else
+ /* read directory inodes.
+ * NOTE: nested directories are not recognized
+ * so inodes may be umped twice!
+ */
+ anydirskipped2 = mapfilesfromdir(maxino, &tapesize,
+ p+strlen(dt->fs_file));
+ if (!anydirskipped)
+ anydirskipped = anydirskipped2;
+ argv++;
+ }