add headerWrite return code and check for errors.
authorjbj <devnull@localhost>
Tue, 24 Aug 1999 15:18:43 +0000 (15:18 +0000)
committerjbj <devnull@localhost>
Tue, 24 Aug 1999 15:18:43 +0000 (15:18 +0000)
CVS patchset: 3250
CVS date: 1999/08/24 15:18:43

CHANGES
build/pack.c
lib/header.c
lib/header.h
lib/rpmdb.c
lib/signature.c
lib/test.c
po/rpm.pot
tools/rpmheader.c

diff --git a/CHANGES b/CHANGES
index e15b6b0..52c7ce9 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -34,6 +34,7 @@
        - add %_install_langs to configure languages to be installed.
        - add LC_ALL/LC_MESSAGES to query locale search.
        - fix: segfault with "--sign" w/o supplying files (#4651).
+       - add headerWrite return code and check for errors.
 
 3.0.1 -> 3.0.2
        - eliminate armv4 entries from rpmrc (Andrew E. Mileski).
index db0228d..b305ae3 100644 (file)
@@ -240,16 +240,17 @@ int writeRPM(Header h, const char *fileName, int type,
        rpmError(RPMERR_CREATE, _("Unable to open temp file"));
        return RPMERR_CREATE;
     }
-    headerWrite(fd, h, HEADER_MAGIC_YES);
-            
-    /* Write the archive and get the size */
-    if (csa->cpioList != NULL) {
-       rc = cpio_gzip(fd, csa);
-    } else if (fdFileno(csa->cpioFdIn) >= 0) {
-       rc = cpio_copy(fd, csa);
-    } else {
-       rpmError(RPMERR_CREATE, _("Bad CSA data"));
-       rc = RPMERR_BADARG;
+    if (headerWrite(fd, h, HEADER_MAGIC_YES)) {
+       rc = RPMERR_NOSPACE;
+    } else { /* Write the archive and get the size */
+       if (csa->cpioList != NULL) {
+           rc = cpio_gzip(fd, csa);
+       } else if (fdFileno(csa->cpioFdIn) >= 0) {
+           rc = cpio_copy(fd, csa);
+       } else {
+           rpmError(RPMERR_CREATE, _("Bad CSA data"));
+           rc = RPMERR_BADARG;
+       }
     }
     if (rc != 0) {
        fdClose(fd);
@@ -264,12 +265,19 @@ int writeRPM(Header h, const char *fileName, int type,
                RPM_INT32_TYPE, &csa->cpioArchiveSize, 1);
     }
     (void)fdLseek(fd, 0,  SEEK_SET);
-    headerWrite(fd, h, HEADER_MAGIC_YES);
+    if (headerWrite(fd, h, HEADER_MAGIC_YES))
+       rc = RPMERR_NOSPACE;
 
     fdClose(fd);
+    unlink(fileName);
+
+    if (rc) {
+       unlink(sigtarget);
+       xfree(sigtarget);
+       return rc;
+    }
 
     /* Open the output file */
-    unlink(fileName);
     if (fdFileno(fd = fdOpen(fileName, O_WRONLY|O_CREAT|O_TRUNC, 0644)) < 0) {
        rpmError(RPMERR_CREATE, _("Could not open %s\n"), fileName);
        unlink(sigtarget);
index 19bf496..bb494b6 100644 (file)
@@ -458,23 +458,37 @@ void *headerUnload(Header h)
 /*                                                                  */
 /********************************************************************/
 
-void headerWrite(FD_t fd, Header h, int magicp)
+int headerWrite(FD_t fd, Header h, int magicp)
 {
     void * p;
     int length;
     int_32 l;
+    ssize_t nb;
 
     p = doHeaderUnload(h, &length);
 
     if (magicp) {
-       (void)fdWrite(fd, header_magic, sizeof(header_magic));
+       nb = fdWrite(fd, header_magic, sizeof(header_magic));
+       if (nb != sizeof(header_magic)) {
+           free(p);
+           return 1;
+       }
        l = htonl(0);
-       (void)fdWrite(fd, &l, sizeof(l));
+       nb = fdWrite(fd, &l, sizeof(l));
+       if (nb != sizeof(l)) {
+           free(p);
+           return 1;
+       }
     }
     
-    (void)fdWrite(fd, p, length);
+    nb = fdWrite(fd, p, length);
+    if (nb != length) {
+       free(p);
+       return 1;
+    }
 
     free(p);
+    return 0;
 }
 
 Header headerRead(FD_t fd, int magicp)
index 572e90a..5a9918e 100644 (file)
@@ -71,7 +71,7 @@ extern const struct headerSprintfExtension headerDefaultFormats[];
 
 /* read and write a header from a file */
 Header headerRead(FD_t fd, int magicp);
-void headerWrite(FD_t fd, Header h, int magicp);
+int headerWrite(FD_t fd, Header h, int magicp);
 Header headerGzRead(FD_t fd, int magicp);
 void headerGzWrite(FD_t fd, Header h, int magicp);
 unsigned int headerSizeof(Header h, int magicp);
index 4fd2d58..b068da5 100644 (file)
@@ -580,18 +580,16 @@ int rpmdbAdd(rpmdb db, Header dbentry)
 
     dboffset = faAlloc(db->pkgs, headerSizeof(dbentry, HEADER_MAGIC_NO));
     if (!dboffset) {
-       rpmError(RPMERR_DBCORRUPT, _("cannot allocate space for database"));
-       unblockSignals();
-       if (providesCount) free(providesList);
-       if (requiredbyCount) free(requiredbyList);
-       if (conflictCount) free(conflictList);
-       if (triggerCount) free(triggerList);
-       if (count) free(fileList);
-       return 1;
+       rc = 1;
+    } else {
+       (void)faLseek(db->pkgs, dboffset, SEEK_SET);
+       rc = headerWrite(faFileno(db->pkgs), dbentry, HEADER_MAGIC_NO);
     }
-    (void)faLseek(db->pkgs, dboffset, SEEK_SET);
 
-    headerWrite(faFileno(db->pkgs), dbentry, HEADER_MAGIC_NO);
+    if (rc) {
+       rpmError(RPMERR_DBCORRUPT, _("cannot allocate space for database"));
+       goto exit;
+    }
 
     /* Now update the appropriate indexes */
     if (addIndexEntry(db->nameIndex, name, dboffset, 0))
@@ -635,6 +633,7 @@ int rpmdbAdd(rpmdb db, Header dbentry)
     dbiSyncIndex(db->requiredbyIndex);
     dbiSyncIndex(db->triggerIndex);
 
+exit:
     unblockSignals();
 
     if (requiredbyCount) free(requiredbyList);
@@ -650,6 +649,7 @@ int rpmdbUpdateRecord(rpmdb db, int offset, Header newHeader)
 {
     Header oldHeader;
     int oldSize;
+    int rc = 0;
 
     oldHeader = rpmdbGetRecord(db, offset);
     if (oldHeader == NULL) {
@@ -673,12 +673,12 @@ int rpmdbUpdateRecord(rpmdb db, int offset, Header newHeader)
 
        (void)faLseek(db->pkgs, offset, SEEK_SET);
 
-       headerWrite(faFileno(db->pkgs), newHeader, HEADER_MAGIC_NO);
+       rc = headerWrite(faFileno(db->pkgs), newHeader, HEADER_MAGIC_NO);
 
        unblockSignals();
     }
 
-    return 0;
+    return rc;
 }
 
 void rpmdbRemoveDatabase(const char * rootdir, const char * dbpath)
index 2e01af0..70a83f9 100644 (file)
@@ -211,17 +211,22 @@ int rpmWriteSignature(FD_t fd, Header header)
 {
     int sigSize, pad;
     unsigned char buf[8];
+    int rc = 0;
     
-    headerWrite(fd, header, HEADER_MAGIC_YES);
+    rc = headerWrite(fd, header, HEADER_MAGIC_YES);
+    if (rc)
+       return rc;
+
     sigSize = headerSizeof(header, HEADER_MAGIC_YES);
     pad = (8 - (sigSize % 8)) % 8;
     if (pad) {
        rpmMessage(RPMMESS_DEBUG, _("Signature size: %d\n"), sigSize);
        rpmMessage(RPMMESS_DEBUG, _("Signature pad : %d\n"), pad);
        memset(buf, 0, pad);
-       (void)fdWrite(fd, buf, pad);
+       if (fdWrite(fd, buf, pad) != pad)
+           rc = 1;
     }
-    return 0;
+    return rc;
 }
 
 Header rpmNewSignature(void)
index 1824d3c..6ba8187 100644 (file)
@@ -12,6 +12,7 @@ void main(int argc, char **argv)
     int_16 i16 = 1;
     int_16 i16a[] = {100, 200, 300};
     char ca[] = "char array";
+    int rc;
 
     h = headerNew();
 
@@ -26,7 +27,7 @@ void main(int argc, char **argv)
 
     fprintf(stdout, "Original = %d\n", headerSizeof(h));
     fd = open("test.out", O_WRONLY|O_CREAT);
-    headerWrite(fd, h);
+    rc = headerWrite(fd, h);
     close(fd);
     h2 = headerCopy(h);
     fprintf(stdout, "Copy     = %d\n", headerSizeof(h2));
index b3a48f9..5542586 100644 (file)
@@ -6,7 +6,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 1999-08-24 10:09-0400\n"
+"POT-Creation-Date: 1999-08-24 11:10-0400\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"
@@ -1409,7 +1409,7 @@ msgstr ""
 msgid "Could not open %%files file: %s"
 msgstr ""
 
-#: ../build/files.c:1150 ../build/pack.c:425
+#: ../build/files.c:1150 ../build/pack.c:433
 #, c-format
 msgid "line: %s"
 msgstr ""
@@ -1496,72 +1496,72 @@ msgstr ""
 msgid "Bad CSA data"
 msgstr ""
 
-#: ../build/pack.c:274
+#: ../build/pack.c:282
 #, c-format
 msgid "Could not open %s\n"
 msgstr ""
 
-#: ../build/pack.c:306 ../build/pack.c:349
+#: ../build/pack.c:314 ../build/pack.c:357
 #, c-format
 msgid "Unable to write package: %s"
 msgstr ""
 
-#: ../build/pack.c:322 ../lib/rpmchecksig.c:94
+#: ../build/pack.c:330 ../lib/rpmchecksig.c:94
 #, c-format
 msgid "Generating signature: %d\n"
 msgstr ""
 
-#: ../build/pack.c:339
+#: ../build/pack.c:347
 #, c-format
 msgid "Unable to read sigtarget: %s"
 msgstr ""
 
-#: ../build/pack.c:364
+#: ../build/pack.c:372
 #, c-format
 msgid "Wrote: %s\n"
 msgstr ""
 
-#: ../build/pack.c:379
+#: ../build/pack.c:387
 #, c-format
 msgid "create archive failed on file %s: %s"
 msgstr ""
 
-#: ../build/pack.c:395
+#: ../build/pack.c:403
 #, c-format
 msgid "cpio_copy write failed: %s"
 msgstr ""
 
-#: ../build/pack.c:402
+#: ../build/pack.c:410
 #, c-format
 msgid "cpio_copy read failed: %s"
 msgstr ""
 
-#: ../build/pack.c:481
+#: ../build/pack.c:489
 #, c-format
 msgid "Could not open PreIn file: %s"
 msgstr ""
 
-#: ../build/pack.c:488
+#: ../build/pack.c:496
 #, c-format
 msgid "Could not open PreUn file: %s"
 msgstr ""
 
-#: ../build/pack.c:495
+#: ../build/pack.c:503
 #, c-format
 msgid "Could not open PostIn file: %s"
 msgstr ""
 
-#: ../build/pack.c:502
+#: ../build/pack.c:510
 #, c-format
 msgid "Could not open PostUn file: %s"
 msgstr ""
 
-#: ../build/pack.c:510
+#: ../build/pack.c:518
 #, c-format
 msgid "Could not open VerifyScript file: %s"
 msgstr ""
 
-#: ../build/pack.c:526
+#: ../build/pack.c:534
 #, c-format
 msgid "Could not open Trigger script file: %s"
 msgstr ""
@@ -2020,8 +2020,8 @@ msgid ""
 msgstr ""
 
 #: ../lib/formats.c:65 ../lib/formats.c:83 ../lib/formats.c:104
-#: ../lib/formats.c:137 ../lib/header.c:2058 ../lib/header.c:2075
-#: ../lib/header.c:2095
+#: ../lib/formats.c:137 ../lib/header.c:2072 ../lib/header.c:2089
+#: ../lib/header.c:2109
 msgid "(not a number)"
 msgstr ""
 
@@ -2107,74 +2107,74 @@ msgstr ""
 msgid "Data type %d not supported\n"
 msgstr ""
 
-#: ../lib/header.c:714
+#: ../lib/header.c:728
 #, c-format
 msgid "Data type %d not supprted\n"
 msgstr ""
 
-#: ../lib/header.c:1058
+#: ../lib/header.c:1072
 #, c-format
 msgid "Bad count for headerAddEntry(): %d\n"
 msgstr ""
 
-#: ../lib/header.c:1458
+#: ../lib/header.c:1472
 #, c-format
 msgid "missing { after %"
 msgstr ""
 
-#: ../lib/header.c:1486
+#: ../lib/header.c:1500
 msgid "missing } after %{"
 msgstr ""
 
-#: ../lib/header.c:1498
+#: ../lib/header.c:1512
 msgid "empty tag format"
 msgstr ""
 
-#: ../lib/header.c:1508
+#: ../lib/header.c:1522
 msgid "empty tag name"
 msgstr ""
 
-#: ../lib/header.c:1523
+#: ../lib/header.c:1537
 msgid "unknown tag"
 msgstr ""
 
-#: ../lib/header.c:1549
+#: ../lib/header.c:1563
 msgid "] expected at end of array"
 msgstr ""
 
-#: ../lib/header.c:1565
+#: ../lib/header.c:1579
 msgid "unexpected ]"
 msgstr ""
 
-#: ../lib/header.c:1567
+#: ../lib/header.c:1581
 msgid "unexpected }"
 msgstr ""
 
-#: ../lib/header.c:1619
+#: ../lib/header.c:1633
 msgid "? expected in expression"
 msgstr ""
 
-#: ../lib/header.c:1626
+#: ../lib/header.c:1640
 msgid "{ expected after ? in expression"
 msgstr ""
 
-#: ../lib/header.c:1636 ../lib/header.c:1668
+#: ../lib/header.c:1650 ../lib/header.c:1682
 msgid "} expected in expression"
 msgstr ""
 
-#: ../lib/header.c:1643
+#: ../lib/header.c:1657
 msgid ": expected following ? subexpression"
 msgstr ""
 
-#: ../lib/header.c:1656
+#: ../lib/header.c:1670
 msgid "{ expected after : in expression"
 msgstr ""
 
-#: ../lib/header.c:1675
+#: ../lib/header.c:1689
 msgid "| expected at end of expression"
 msgstr ""
 
-#: ../lib/header.c:1842
+#: ../lib/header.c:1856
 msgid "(unknown type)"
 msgstr ""
 
@@ -2891,7 +2891,7 @@ msgstr ""
 msgid "package has no files\n"
 msgstr ""
 
-#: ../lib/rpmdb.c:583
+#: ../lib/rpmdb.c:590
 msgid "cannot allocate space for database"
 msgstr ""
 
@@ -3129,90 +3129,90 @@ msgid "New Header signature\n"
 msgstr ""
 
 #. 8-byte pad
-#: ../lib/signature.c:181 ../lib/signature.c:219
+#: ../lib/signature.c:181 ../lib/signature.c:223
 #, c-format
 msgid "Signature size: %d\n"
 msgstr ""
 
-#: ../lib/signature.c:182 ../lib/signature.c:220
+#: ../lib/signature.c:182 ../lib/signature.c:224
 #, c-format
 msgid "Signature pad : %d\n"
 msgstr ""
 
-#: ../lib/signature.c:276 ../lib/signature.c:712
+#: ../lib/signature.c:281 ../lib/signature.c:717
 msgid "Couldn't exec pgp"
 msgstr ""
 
-#: ../lib/signature.c:287
+#: ../lib/signature.c:292
 msgid "pgp failed"
 msgstr ""
 
 #. PGP failed to write signature
 #. Just in case
-#: ../lib/signature.c:294
+#: ../lib/signature.c:299
 msgid "pgp failed to write signature"
 msgstr ""
 
-#: ../lib/signature.c:299
+#: ../lib/signature.c:304
 #, c-format
 msgid "PGP sig size: %d\n"
 msgstr ""
 
-#: ../lib/signature.c:310 ../lib/signature.c:386
+#: ../lib/signature.c:315 ../lib/signature.c:391
 msgid "unable to read the signature"
 msgstr ""
 
-#: ../lib/signature.c:315
+#: ../lib/signature.c:320
 #, c-format
 msgid "Got %d bytes of PGP sig\n"
 msgstr ""
 
-#: ../lib/signature.c:352 ../lib/signature.c:687
+#: ../lib/signature.c:357 ../lib/signature.c:692
 msgid "Couldn't exec gpg"
 msgstr ""
 
-#: ../lib/signature.c:363
+#: ../lib/signature.c:368
 msgid "gpg failed"
 msgstr ""
 
 #. GPG failed to write signature
 #. Just in case
-#: ../lib/signature.c:370
+#: ../lib/signature.c:375
 msgid "gpg failed to write signature"
 msgstr ""
 
-#: ../lib/signature.c:375
+#: ../lib/signature.c:380
 #, c-format
 msgid "GPG sig size: %d\n"
 msgstr ""
 
-#: ../lib/signature.c:391
+#: ../lib/signature.c:396
 #, c-format
 msgid "Got %d bytes of GPG sig\n"
 msgstr ""
 
-#: ../lib/signature.c:510 ../lib/signature.c:557
+#: ../lib/signature.c:515 ../lib/signature.c:562
 msgid "Could not run pgp.  Use --nopgp to skip PGP checks."
 msgstr ""
 
-#: ../lib/signature.c:555 ../lib/signature.c:627
+#: ../lib/signature.c:560 ../lib/signature.c:632
 msgid "exec failed!\n"
 msgstr ""
 
-#: ../lib/signature.c:629
+#: ../lib/signature.c:634
 msgid "Could not run gpg.  Use --nogpg to skip GPG checks."
 msgstr ""
 
 #. This case should have been screened out long ago.
-#: ../lib/signature.c:716 ../lib/signature.c:769
+#: ../lib/signature.c:721 ../lib/signature.c:774
 msgid "Invalid %%_signature spec in macro file"
 msgstr ""
 
-#: ../lib/signature.c:749
+#: ../lib/signature.c:754
 msgid "You must set \"%%_gpg_name\" in your macro file"
 msgstr ""
 
-#: ../lib/signature.c:761
+#: ../lib/signature.c:766
 msgid "You must set \"%%_pgp_name\" in your macro file"
 msgstr ""
 
index e8d3813..16b6131 100644 (file)
@@ -11,6 +11,7 @@ int main(int argc, char **argv)
     FD_t fdi, fdo;
     struct rpmlead lead;
     Header hd;
+    int rc;
     
     if (argc == 1) {
        fdi = fdDup(STDIN_FILENO);
@@ -27,7 +28,7 @@ int main(int argc, char **argv)
     hd = headerRead(fdi, (lead.major >= 3) ?
                    HEADER_MAGIC_YES : HEADER_MAGIC_NO);
     fdo = fdDup(STDOUT_FILENO);
-    headerWrite(fdo, hd, HEADER_MAGIC_YES);
+    rc = headerWrite(fdo, hd, HEADER_MAGIC_YES);
     
-    return 0;
+    return rc;
 }