static rc_t open_dir_or_tar( const KDirectory *dir, const KDirectory **sub, const char * name ) { rc_t rc1, rc2; rc1 = KDirectoryOpenDirRead( dir, sub, true, name ); if ( rc1 != 0 ) { rc2 = KDirectoryOpenTarArchiveRead( dir, sub, true, name ); if ( rc2 == 0 ) rc1 = rc2; } return rc1; }
static rc_t open_dir_as_archive (const char * path, const KFile ** file) { rc_t rc; KPathType kpt; const KDirectory * d; assert (path != NULL); assert (path[0] != '\0'); assert (file != NULL); rc = 0; kpt = KDirectoryPathType (kdir, path); switch (kpt) { case kptFile: STSMSG (1, ("Opening as archive %s\n", path)); rc = KDirectoryOpenSraArchiveRead (kdir, &d, false, path); if (rc != 0) rc = KDirectoryOpenTarArchiveRead (kdir, &d, false, path); if (rc != 0) rc = RC (rcExe, rcParam, rcOpening, rcDirectory, rcInvalid); break; default: rc = RC (rcExe, rcNoTarg, rcParsing, rcParam, rcInvalid); PLOGERR (klogFatal, (klogFatal, rc, "Parameter [$(P)] must be a directory", PLOG_S(P), path)); return rc; case kptDir: /* KOutMsg ("%s: opening dir\n",__func__); */ rc = KDirectoryVOpenDirRead (kdir, &d, false, path, NULL); } if (rc == 0) { /* KOutMsg ("%s: dir to archive\n",__func__); */ rc = KDirectoryOpenTocFileRead (d, file, alignment, pnamesFilter, NULL, sort_size_then_rel_path ); KDirectoryRelease (d); } return rc; }