diff -r c4bcba8023a9 -r 1fd1d221092d librazor/rpm.c --- a/librazor/rpm.c Sat Aug 23 16:28:31 2014 +0100 +++ b/librazor/rpm.c Fri Oct 03 15:05:33 2014 +0100 @@ -613,7 +613,8 @@ rpm = zalloc(sizeof *rpm); if (rpm == NULL) { - razor_set_error(error, NULL, "Not enough memory"); + razor_set_error(error, RAZOR_POSIX_ERROR, ENOMEM, NULL, + "Not enough memory"); return NULL; } memset(rpm, 0, sizeof *rpm); @@ -650,7 +651,9 @@ &count); if (name) { razor_rpm_close(rpm); - razor_set_error(error, filename, + razor_set_error(error, RAZOR_GENERAL_ERROR, + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, + filename, "Old filenames not supported"); return NULL; } @@ -670,7 +673,9 @@ &count); if (prefix) { razor_rpm_close(rpm); - razor_set_error(error, filename, + razor_set_error(error, RAZOR_GENERAL_ERROR, + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, + filename, "Default prefix not supported"); return NULL; } @@ -737,7 +742,8 @@ installer->stream.avail_out = length; err = inflate(&installer->stream, Z_SYNC_FLUSH); if (err != Z_OK && err != Z_STREAM_END) { - razor_atomic_abort(installer->atomic, "Failed to inflate"); + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err, + "Failed to inflate"); return -1; } @@ -762,7 +768,8 @@ err = inflate(&installer->stream, Z_SYNC_FLUSH); if (err != Z_OK && err != Z_STREAM_END) { - razor_atomic_abort(installer->atomic, "Failed to inflate"); + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err, + "Failed to inflate"); return -1; } @@ -806,6 +813,8 @@ return -1; if (installer->length >= sizeof installer->buffer) { razor_atomic_abort(installer->atomic, + RAZOR_GENERAL_ERROR, + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, "Link target too long"); return -1; } @@ -824,7 +833,8 @@ free(buffer); buffer = razor_concat(s, " are not supported on this platform", NULL); - razor_atomic_abort(installer->atomic, buffer); + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR, + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, buffer); free(buffer); return -1; case CDEV: @@ -838,7 +848,8 @@ goto unsupported; default: free(buffer); - razor_atomic_abort(installer->atomic, "Unknown file type"); + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR, + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, "Unknown file type"); return -1; } } @@ -1048,7 +1059,8 @@ gz_header = installer->rpm->payload; if (gz_header[0] != 0x1f || gz_header[1] != 0x8b) { - razor_atomic_abort(installer->atomic, + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR, + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, "Payload section doesn't have gz header"); return -1; } @@ -1057,7 +1069,8 @@ flags = gz_header[3]; if (method != Z_DEFLATED || flags != 0) { - razor_atomic_abort(installer->atomic, + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR, + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, "Unknown payload compression method or " "flags set"); return -1; @@ -1078,7 +1091,7 @@ if (err != Z_OK) { sprintf(buffer, "%d", err); s = razor_concat("inflateEnd error: ", buffer, NULL); - razor_atomic_abort(installer->atomic, s); + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err, s); free(s); return -1; } @@ -1097,7 +1110,7 @@ if (err != Z_OK) { sprintf(buffer, "%d", err); s = razor_concat("inflateEnd error: ", buffer, NULL); - razor_atomic_abort(installer->atomic, s); + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err, s); free(s); } @@ -1132,7 +1145,7 @@ const char *path; size_t filesize; char *s; - int retval = 0; + int retval = 0, code; assert (rpm != NULL); assert (root != NULL); @@ -1142,9 +1155,10 @@ installer.atomic = atomic; /* FIXME: Only do this before a transaction, not per rpm. */ - if (*root && (stat(root, &buf) < 0 || !S_ISDIR(buf.st_mode))) { + if (*root && ((retval = stat(root, &buf)) || !S_ISDIR(buf.st_mode))) { + code = retval ? errno : ENOTDIR; s = razor_concat(root, ": Directory does not exist", NULL); - razor_atomic_abort(atomic, s); + razor_atomic_abort(atomic, RAZOR_POSIX_ERROR, code, s); free(s); return -1; }