Remove XFA_SKIPPING from iterator.
authorjbj <devnull@localhost>
Mon, 5 Feb 2001 17:55:34 +0000 (17:55 +0000)
committerjbj <devnull@localhost>
Mon, 5 Feb 2001 17:55:34 +0000 (17:55 +0000)
Make sure that external stages are properly postponed.

CVS patchset: 4521
CVS date: 2001/02/05 17:55:34

lib/cpio.c
lib/rollback.h
po/rpm.pot

index 5a0c020..da3797d 100644 (file)
@@ -210,7 +210,7 @@ static int mapNextIterator(void * this) {
        if (!((i = iter->i) < fi->fc))
            return -1;
        iter->i++;
-    } while (fi->actions && XFA_SKIPPING(fi->actions[i]));
+    } while (0);
 
     iter->isave = i;
 
@@ -902,6 +902,7 @@ fprintf(stderr, "*** %s:%s %s\n", fiTypeString(fi), fileActionString(fsm->action
            break;
 
        case FA_SKIPNETSHARED:
+if (_fsm_debug)
 fprintf(stderr, "*** %s:%s %s\n", fiTypeString(fi), fileActionString(fsm->action), fsm->path);
            if (fi->type == TR_ADDED)
                fi->fstates[i] = RPMFILE_STATE_NETSHARED;
@@ -1351,16 +1352,13 @@ int fsmStage(FSM_t fsm, fileStage stage)
            }
 
            /* Read next header from payload. */
-           rc = fsmStage(fsm, FSM_POS);
-           if (!rc)
-               rc = fsmStage(fsm, FSM_NEXT);
+           rc = fsmStage(fsm, FSM_NEXT);
        }
+       if (rc) break;
 
        /* Generate file path. */
-       if (!rc)
-           rc = fsmMapPath(fsm);
-       if (rc)
-           break;
+       rc = fsmMapPath(fsm);
+       if (rc) break;
 
        /* Perform lstat/stat for disk file. */
        rc = fsmStage(fsm, (!(fsm->mapFlags & CPIO_FOLLOW_SYMLINKS)
@@ -1373,12 +1371,14 @@ int fsmStage(FSM_t fsm, fileStage stage)
            fsm->exists = 1;
        }
        fsm->diskchecked = 1;
+       if (rc) break;
 
        /* On build, the disk file stat is what's remapped. */
        if (fsm->goal == FSM_BUILD)
            *st = *ost;                 /* structure assignment */
 
-       (void) fsmMapAttrs(fsm);
+       rc = fsmMapAttrs(fsm);
+       if (rc) break;
 
        fsm->postpone = XFA_SKIPPING(fsm->action);
        if (fsm->goal == FSM_INSTALL || fsm->goal == FSM_BUILD) {
@@ -1502,9 +1502,13 @@ int fsmStage(FSM_t fsm, fileStage stage)
        }
        break;
     case FSM_PROCESS:
+       if (fsm->postpone) {
+           if (fsm->goal == FSM_INSTALL)
+               rc = fsmStage(fsm, FSM_EAT);
+           break;
+       }
+
        if (fsm->goal == FSM_BUILD) {
-           if (fsm->postpone)
-               break;
            if (!S_ISDIR(st->st_mode) && st->st_nlink > 1) {
                struct hardLink * li, * prev;
                rc = writeLinkedFile(fsm);
@@ -1528,12 +1532,6 @@ int fsmStage(FSM_t fsm, fileStage stage)
        if (fsm->goal != FSM_INSTALL)
            break;
 
-       (void) fsmStage(fsm, FSM_POS);
-       if (fsm->postpone) {
-           (void) fsmStage(fsm, FSM_EAT);
-           break;
-       }
-
        if (S_ISREG(st->st_mode)) {
            const char * path = fsm->path;
            if (fsm->osuffix)
@@ -1617,7 +1615,9 @@ rpmMessage(RPMMESS_WARNING, _("%s saved as %s\n"), fsm->opath, fsm->path);
        }
        break;
     case FSM_UNDO:
-       if (fsm->goal == FSM_INSTALL && !fsm->postpone) {
+       if (fsm->postpone)
+           break;
+       if (fsm->goal == FSM_INSTALL) {
            (void) fsmStage(fsm,
                (S_ISDIR(st->st_mode) ? FSM_RMDIR : FSM_UNLINK));
 
@@ -1631,16 +1631,13 @@ rpmMessage(RPMMESS_WARNING, _("%s saved as %s\n"), fsm->opath, fsm->path);
            *fsm->failedFile = xstrdup(fsm->path);
        break;
     case FSM_FINI:
-       if (fsm->goal == FSM_INSTALL) {
-           if (!fsm->postpone && fsm->commit) {
-               if (!S_ISDIR(st->st_mode) && st->st_nlink > 1) {
-                   rc = fsmCommitLinks(fsm);
-               } else {
-                   rc = fsmStage(fsm, FSM_COMMIT);
-               }
-           }
+       if (!fsm->postpone) {
+           if (fsm->goal == FSM_INSTALL && fsm->commit)
+               rc = ((!S_ISDIR(st->st_mode) && st->st_nlink > 1)
+                       ? fsmCommitLinks(fsm) : fsmStage(fsm, FSM_COMMIT));
        }
        fsm->path = _free(fsm->path);
+       fsm->opath = _free(fsm->opath);
        memset(st, 0, sizeof(*st));
        memset(ost, 0, sizeof(*ost));
        break;
@@ -1769,7 +1766,7 @@ opath = _free(opath);
     case FSM_MKDIR:
        rc = Mkdir(fsm->path, (st->st_mode & 07777));
        if (_fsm_debug && (stage & FSM_SYSCALL))
-           rpmMessage(RPMMESS_DEBUG, " %8s (%s, 0%o) %s\n", cur,
+           rpmMessage(RPMMESS_DEBUG, " %8s (%s, 0%04o) %s\n", cur,
                fsm->path, (st->st_mode & 07777),
                (rc < 0 ? strerror(errno) : ""));
        if (rc < 0)     rc = CPIOERR_MKDIR_FAILED;
@@ -1802,7 +1799,7 @@ opath = _free(opath);
     case FSM_CHMOD:
        rc = chmod(fsm->path, (st->st_mode & 07777));
        if (_fsm_debug && (stage & FSM_SYSCALL))
-           rpmMessage(RPMMESS_DEBUG, " %8s (%s, 0%o) %s\n", cur,
+           rpmMessage(RPMMESS_DEBUG, " %8s (%s, 0%04o) %s\n", cur,
                fsm->path, (st->st_mode & 07777),
                (rc < 0 ? strerror(errno) : ""));
        if (rc < 0)     rc = CPIOERR_CHMOD_FAILED;
@@ -1836,7 +1833,7 @@ opath = _free(opath);
     case FSM_MKFIFO:
        rc = mkfifo(fsm->path, (st->st_mode & 07777));
        if (_fsm_debug && (stage & FSM_SYSCALL))
-           rpmMessage(RPMMESS_DEBUG, " %8s (%s, 0%o) %s\n", cur,
+           rpmMessage(RPMMESS_DEBUG, " %8s (%s, 0%04o) %s\n", cur,
                fsm->path, (st->st_mode & 07777),
                (rc < 0 ? strerror(errno) : ""));
        if (rc < 0)     rc = CPIOERR_MKFIFO_FAILED;
@@ -1888,6 +1885,8 @@ opath = _free(opath);
            fsm->path = _free(fsm->path);
            rc = CPIOERR_HDR_TRAILER;
        }
+       if (!rc)
+           rc = fsmStage(fsm, FSM_POS);
        break;
     case FSM_EAT:
        for (left = st->st_size; left > 0; left -= fsm->rdnb) {
@@ -1916,10 +1915,12 @@ opath = _free(opath);
        rc = cpioTrailerWrite(fsm);
        break;
     case FSM_HREAD:
-       rc = cpioHeaderRead(fsm, st);   /* Read next payload header. */
+       rc = fsmStage(fsm, FSM_POS);
+       if (!rc)
+           rc = cpioHeaderRead(fsm, st);       /* Read next payload header. */
        break;
     case FSM_HWRITE:
-       rc = cpioHeaderWrite(fsm, st);  /* Write next payload header. */
+       rc = cpioHeaderWrite(fsm, st);          /* Write next payload header. */
        break;
     case FSM_DREAD:
        fsm->rdnb = Fread(fsm->wrbuf, sizeof(*fsm->wrbuf), fsm->wrlen, fsm->cfd);
index ec60540..b30dcbb 100644 (file)
@@ -64,7 +64,7 @@ typedef enum fileStage_e {
     FSM_CHROOT =  _fs(48),
 
     FSM_NEXT   =  _fd(65),
-    FSM_EAT    =  _fi(66),
+    FSM_EAT    =  _fd(66),
     FSM_POS    =  _fd(67),
     FSM_PAD    =  _fd(68),
     FSM_TRAILER        =  _fd(69),
index b727ad8..3be2050 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2001-02-04 17:14-0500\n"
+"POT-Creation-Date: 2001-02-05 12:47-0500\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
 "Language-Team: LANGUAGE <LL@li.org>\n"
@@ -2224,50 +2224,50 @@ msgstr ""
 msgid "%9d %s\n"
 msgstr ""
 
-#: lib/cpio.c:1548
+#: lib/cpio.c:1546
 #, c-format
 msgid "%s saved as %s\n"
 msgstr ""
 
-#: lib/cpio.c:1654
+#: lib/cpio.c:1651
 #, c-format
 msgid "%s created as %s\n"
 msgstr ""
 
-#: lib/cpio.c:2130
+#: lib/cpio.c:2131
 #, c-format
 msgid "(error 0x%x)"
 msgstr ""
 
-#: lib/cpio.c:2133
+#: lib/cpio.c:2134
 msgid "Bad magic"
 msgstr ""
 
-#: lib/cpio.c:2134
+#: lib/cpio.c:2135
 msgid "Bad/unreadable  header"
 msgstr ""
 
-#: lib/cpio.c:2155
+#: lib/cpio.c:2156
 msgid "Header size too big"
 msgstr ""
 
-#: lib/cpio.c:2156
+#: lib/cpio.c:2157
 msgid "Unknown file type"
 msgstr ""
 
-#: lib/cpio.c:2157
+#: lib/cpio.c:2158
 msgid "Missing hard link"
 msgstr ""
 
-#: lib/cpio.c:2158
+#: lib/cpio.c:2159
 msgid "MD5 sum mismatch"
 msgstr ""
 
-#: lib/cpio.c:2159
+#: lib/cpio.c:2160
 msgid "Internal error"
 msgstr ""
 
-#: lib/cpio.c:2168
+#: lib/cpio.c:2169
 msgid " failed - "
 msgstr ""