add headerWrite return code and check for errors.

CVS patchset: 3250
CVS date: 1999/08/24 15:18:43
This commit is contained in:
jbj 1999-08-24 15:18:43 +00:00
parent e04da27415
commit 438d40966e
9 changed files with 120 additions and 90 deletions

View File

@ -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).

View 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);

View 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)

View 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);

View 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)

View 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)

View 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));

View 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 ""

View 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;
}