Rename rpmcpioStrerror to rpmfileStrerror and move it to rpmarchive.h and rpmfi.c
This makes the error codes part of the public API and allows using the new archive API.
This commit is contained in:
parent
9dbd72ac72
commit
2092a11014
|
@ -86,7 +86,7 @@ static rpmRC cpio_doio(FD_t fdo, Package pkg, const char * fmodeMacro)
|
|||
&pkg->cpioArchiveSize, &failedFile);
|
||||
|
||||
if (fsmrc) {
|
||||
char *emsg = rpmcpioStrerror(fsmrc);
|
||||
char *emsg = rpmfileStrerror(fsmrc);
|
||||
if (failedFile)
|
||||
rpmlog(RPMLOG_ERR, _("create archive failed on file %s: %s\n"),
|
||||
failedFile, emsg);
|
||||
|
|
58
lib/cpio.c
58
lib/cpio.c
|
@ -16,7 +16,6 @@
|
|||
#else
|
||||
#include <sys/types.h> /* already included from system.h */
|
||||
#endif
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <rpm/rpmio.h>
|
||||
|
@ -461,60 +460,3 @@ rpmcpio_t rpmcpioFree(rpmcpio_t cpio)
|
|||
}
|
||||
return NULL;
|
||||
}
|
||||
|
||||
char * rpmcpioStrerror(int rc)
|
||||
{
|
||||
char *msg = NULL;
|
||||
const char *s = NULL;
|
||||
const char *prefix = "cpio";
|
||||
int myerrno = errno;
|
||||
|
||||
switch (rc) {
|
||||
default:
|
||||
break;
|
||||
case RPMERR_BAD_MAGIC: s = _("Bad magic"); break;
|
||||
case RPMERR_BAD_HEADER: s = _("Bad/unreadable header");break;
|
||||
|
||||
case RPMERR_OPEN_FAILED: s = "open"; break;
|
||||
case RPMERR_CHMOD_FAILED: s = "chmod"; break;
|
||||
case RPMERR_CHOWN_FAILED: s = "chown"; break;
|
||||
case RPMERR_WRITE_FAILED: s = "write"; break;
|
||||
case RPMERR_UTIME_FAILED: s = "utime"; break;
|
||||
case RPMERR_UNLINK_FAILED: s = "unlink"; break;
|
||||
case RPMERR_RENAME_FAILED: s = "rename"; break;
|
||||
case RPMERR_SYMLINK_FAILED: s = "symlink"; break;
|
||||
case RPMERR_STAT_FAILED: s = "stat"; break;
|
||||
case RPMERR_LSTAT_FAILED: s = "lstat"; break;
|
||||
case RPMERR_MKDIR_FAILED: s = "mkdir"; break;
|
||||
case RPMERR_RMDIR_FAILED: s = "rmdir"; break;
|
||||
case RPMERR_MKNOD_FAILED: s = "mknod"; break;
|
||||
case RPMERR_MKFIFO_FAILED: s = "mkfifo"; break;
|
||||
case RPMERR_LINK_FAILED: s = "link"; break;
|
||||
case RPMERR_READLINK_FAILED: s = "readlink"; break;
|
||||
case RPMERR_READ_FAILED: s = "read"; break;
|
||||
case RPMERR_COPY_FAILED: s = "copy"; break;
|
||||
case RPMERR_LSETFCON_FAILED: s = "lsetfilecon"; break;
|
||||
case RPMERR_SETCAP_FAILED: s = "cap_set_file"; break;
|
||||
|
||||
case RPMERR_HDR_SIZE: s = _("Header size too big"); break;
|
||||
case RPMERR_FILE_SIZE: s = _("File too large for archive"); break;
|
||||
case RPMERR_UNKNOWN_FILETYPE: s = _("Unknown file type"); break;
|
||||
case RPMERR_MISSING_FILE: s = _("Missing file(s)"); break;
|
||||
case RPMERR_DIGEST_MISMATCH: s = _("Digest mismatch"); break;
|
||||
case RPMERR_INTERNAL: s = _("Internal error"); break;
|
||||
case RPMERR_UNMAPPED_FILE: s = _("Archive file not in header"); break;
|
||||
case RPMERR_ENOENT: s = strerror(ENOENT); break;
|
||||
case RPMERR_ENOTEMPTY: s = strerror(ENOTEMPTY); break;
|
||||
}
|
||||
|
||||
if (s != NULL) {
|
||||
rasprintf(&msg, "%s: %s", prefix, s);
|
||||
if (myerrno <= RPMERR_CHECK_ERRNO) {
|
||||
rstrscat(&msg, _(" failed - "), strerror(myerrno), NULL);
|
||||
}
|
||||
} else {
|
||||
rasprintf(&msg, _("%s: (error 0x%x)"), prefix, rc);
|
||||
}
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
|
|
@ -71,14 +71,6 @@ void rpmcpioSetExpectedFileSize(rpmcpio_t cpio, off_t fsize);
|
|||
|
||||
ssize_t rpmcpioRead(rpmcpio_t cpio, void * buf, size_t size);
|
||||
|
||||
/** \ingroup payload
|
||||
* Return formatted error message on payload handling failure.
|
||||
* @param rc error code
|
||||
* @return formatted error string (malloced)
|
||||
*/
|
||||
/* XXX should be RPM_GNUC_INTERNAL too but build/pack.c uses */
|
||||
char * rpmcpioStrerror(int rc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
|
|
@ -17,7 +17,6 @@
|
|||
#include <rpm/rpmstring.h>
|
||||
#include <rpm/argv.h>
|
||||
|
||||
#include "lib/cpio.h"
|
||||
#include "lib/fsm.h" /* XXX CPIO_FOO/FSM_FOO constants */
|
||||
#include "lib/rpmchroot.h"
|
||||
#include "lib/rpmfi_internal.h" /* XXX replaced/states... */
|
||||
|
@ -729,7 +728,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkgStage stage)
|
|||
if (fsmrc) {
|
||||
char *emsg;
|
||||
errno = saved_errno;
|
||||
emsg = rpmcpioStrerror(fsmrc);
|
||||
emsg = rpmfileStrerror(fsmrc);
|
||||
rpmlog(RPMLOG_ERR,
|
||||
_("unpacking of archive failed%s%s: %s\n"),
|
||||
(psm->failedFile != NULL ? _(" on file ") : ""),
|
||||
|
@ -835,7 +834,7 @@ static rpmRC rpmpsmStage(rpmpsm psm, pkgStage stage)
|
|||
break;
|
||||
case PSM_FINI:
|
||||
if (rc) {
|
||||
char *emsg = rpmcpioStrerror(rc);
|
||||
char *emsg = rpmfileStrerror(rc);
|
||||
if (psm->failedFile)
|
||||
rpmlog(RPMLOG_ERR,
|
||||
_("%s failed on file %s: %s\n"),
|
||||
|
|
|
@ -46,4 +46,19 @@ enum rpmfilesErrorCodes {
|
|||
RPMERR_SETCAP_FAILED = -32787,
|
||||
};
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/** \ingroup payload
|
||||
* Return formatted error message on payload handling failure.
|
||||
* @param rc error code
|
||||
* @return formatted error string (malloced)
|
||||
*/
|
||||
char * rpmfileStrerror(int rc);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* H_ARCHIVE */
|
||||
|
|
58
lib/rpmfi.c
58
lib/rpmfi.c
|
@ -11,6 +11,7 @@
|
|||
#include <rpm/rpmstring.h>
|
||||
#include <rpm/rpmmacro.h> /* XXX rpmCleanPath */
|
||||
#include <rpm/rpmds.h>
|
||||
#include <errno.h>
|
||||
|
||||
#include "lib/rpmfi_internal.h"
|
||||
#include "lib/rpmte_internal.h" /* relocations */
|
||||
|
@ -1971,3 +1972,60 @@ int rpmfiArchiveReadToFile(rpmfi fi, FD_t fd, int nodigest)
|
|||
exit:
|
||||
return rc;
|
||||
}
|
||||
|
||||
char * rpmfileStrerror(int rc)
|
||||
{
|
||||
char *msg = NULL;
|
||||
const char *s = NULL;
|
||||
const char *prefix = "cpio";
|
||||
int myerrno = errno;
|
||||
|
||||
switch (rc) {
|
||||
default:
|
||||
break;
|
||||
case RPMERR_BAD_MAGIC: s = _("Bad magic"); break;
|
||||
case RPMERR_BAD_HEADER: s = _("Bad/unreadable header");break;
|
||||
|
||||
case RPMERR_OPEN_FAILED: s = "open"; break;
|
||||
case RPMERR_CHMOD_FAILED: s = "chmod"; break;
|
||||
case RPMERR_CHOWN_FAILED: s = "chown"; break;
|
||||
case RPMERR_WRITE_FAILED: s = "write"; break;
|
||||
case RPMERR_UTIME_FAILED: s = "utime"; break;
|
||||
case RPMERR_UNLINK_FAILED: s = "unlink"; break;
|
||||
case RPMERR_RENAME_FAILED: s = "rename"; break;
|
||||
case RPMERR_SYMLINK_FAILED: s = "symlink"; break;
|
||||
case RPMERR_STAT_FAILED: s = "stat"; break;
|
||||
case RPMERR_LSTAT_FAILED: s = "lstat"; break;
|
||||
case RPMERR_MKDIR_FAILED: s = "mkdir"; break;
|
||||
case RPMERR_RMDIR_FAILED: s = "rmdir"; break;
|
||||
case RPMERR_MKNOD_FAILED: s = "mknod"; break;
|
||||
case RPMERR_MKFIFO_FAILED: s = "mkfifo"; break;
|
||||
case RPMERR_LINK_FAILED: s = "link"; break;
|
||||
case RPMERR_READLINK_FAILED: s = "readlink"; break;
|
||||
case RPMERR_READ_FAILED: s = "read"; break;
|
||||
case RPMERR_COPY_FAILED: s = "copy"; break;
|
||||
case RPMERR_LSETFCON_FAILED: s = "lsetfilecon"; break;
|
||||
case RPMERR_SETCAP_FAILED: s = "cap_set_file"; break;
|
||||
|
||||
case RPMERR_HDR_SIZE: s = _("Header size too big"); break;
|
||||
case RPMERR_FILE_SIZE: s = _("File too large for archive"); break;
|
||||
case RPMERR_UNKNOWN_FILETYPE: s = _("Unknown file type"); break;
|
||||
case RPMERR_MISSING_FILE: s = _("Missing file(s)"); break;
|
||||
case RPMERR_DIGEST_MISMATCH: s = _("Digest mismatch"); break;
|
||||
case RPMERR_INTERNAL: s = _("Internal error"); break;
|
||||
case RPMERR_UNMAPPED_FILE: s = _("Archive file not in header"); break;
|
||||
case RPMERR_ENOENT: s = strerror(ENOENT); break;
|
||||
case RPMERR_ENOTEMPTY: s = strerror(ENOTEMPTY); break;
|
||||
}
|
||||
|
||||
if (s != NULL) {
|
||||
rasprintf(&msg, "%s: %s", prefix, s);
|
||||
if (myerrno <= RPMERR_CHECK_ERRNO) {
|
||||
rstrscat(&msg, _(" failed - "), strerror(myerrno), NULL);
|
||||
}
|
||||
} else {
|
||||
rasprintf(&msg, _("%s: (error 0x%x)"), prefix, rc);
|
||||
}
|
||||
|
||||
return msg;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue