1.1 --- a/librazor/rpm.c Sat Aug 23 16:28:31 2014 +0100
1.2 +++ b/librazor/rpm.c Thu Oct 09 17:27:41 2014 +0100
1.3 @@ -613,7 +613,8 @@
1.4
1.5 rpm = zalloc(sizeof *rpm);
1.6 if (rpm == NULL) {
1.7 - razor_set_error(error, NULL, "Not enough memory");
1.8 + razor_set_error(error, RAZOR_POSIX_ERROR, ENOMEM, NULL,
1.9 + "Not enough memory");
1.10 return NULL;
1.11 }
1.12 memset(rpm, 0, sizeof *rpm);
1.13 @@ -650,7 +651,9 @@
1.14 &count);
1.15 if (name) {
1.16 razor_rpm_close(rpm);
1.17 - razor_set_error(error, filename,
1.18 + razor_set_error(error, RAZOR_GENERAL_ERROR,
1.19 + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED,
1.20 + filename,
1.21 "Old filenames not supported");
1.22 return NULL;
1.23 }
1.24 @@ -670,7 +673,9 @@
1.25 &count);
1.26 if (prefix) {
1.27 razor_rpm_close(rpm);
1.28 - razor_set_error(error, filename,
1.29 + razor_set_error(error, RAZOR_GENERAL_ERROR,
1.30 + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED,
1.31 + filename,
1.32 "Default prefix not supported");
1.33 return NULL;
1.34 }
1.35 @@ -737,7 +742,8 @@
1.36 installer->stream.avail_out = length;
1.37 err = inflate(&installer->stream, Z_SYNC_FLUSH);
1.38 if (err != Z_OK && err != Z_STREAM_END) {
1.39 - razor_atomic_abort(installer->atomic, "Failed to inflate");
1.40 + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err,
1.41 + "Failed to inflate");
1.42 return -1;
1.43 }
1.44
1.45 @@ -762,7 +768,8 @@
1.46
1.47 err = inflate(&installer->stream, Z_SYNC_FLUSH);
1.48 if (err != Z_OK && err != Z_STREAM_END) {
1.49 - razor_atomic_abort(installer->atomic, "Failed to inflate");
1.50 + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err,
1.51 + "Failed to inflate");
1.52 return -1;
1.53 }
1.54
1.55 @@ -806,6 +813,8 @@
1.56 return -1;
1.57 if (installer->length >= sizeof installer->buffer) {
1.58 razor_atomic_abort(installer->atomic,
1.59 + RAZOR_GENERAL_ERROR,
1.60 + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED,
1.61 "Link target too long");
1.62 return -1;
1.63 }
1.64 @@ -824,7 +833,8 @@
1.65 free(buffer);
1.66 buffer = razor_concat(s, " are not supported on this platform",
1.67 NULL);
1.68 - razor_atomic_abort(installer->atomic, buffer);
1.69 + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR,
1.70 + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, buffer);
1.71 free(buffer);
1.72 return -1;
1.73 case CDEV:
1.74 @@ -838,7 +848,8 @@
1.75 goto unsupported;
1.76 default:
1.77 free(buffer);
1.78 - razor_atomic_abort(installer->atomic, "Unknown file type");
1.79 + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR,
1.80 + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED, "Unknown file type");
1.81 return -1;
1.82 }
1.83 }
1.84 @@ -1048,7 +1059,8 @@
1.85
1.86 gz_header = installer->rpm->payload;
1.87 if (gz_header[0] != 0x1f || gz_header[1] != 0x8b) {
1.88 - razor_atomic_abort(installer->atomic,
1.89 + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR,
1.90 + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED,
1.91 "Payload section doesn't have gz header");
1.92 return -1;
1.93 }
1.94 @@ -1057,7 +1069,8 @@
1.95 flags = gz_header[3];
1.96
1.97 if (method != Z_DEFLATED || flags != 0) {
1.98 - razor_atomic_abort(installer->atomic,
1.99 + razor_atomic_abort(installer->atomic, RAZOR_GENERAL_ERROR,
1.100 + RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED,
1.101 "Unknown payload compression method or "
1.102 "flags set");
1.103 return -1;
1.104 @@ -1078,7 +1091,7 @@
1.105 if (err != Z_OK) {
1.106 sprintf(buffer, "%d", err);
1.107 s = razor_concat("inflateEnd error: ", buffer, NULL);
1.108 - razor_atomic_abort(installer->atomic, s);
1.109 + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err, s);
1.110 free(s);
1.111 return -1;
1.112 }
1.113 @@ -1097,7 +1110,7 @@
1.114 if (err != Z_OK) {
1.115 sprintf(buffer, "%d", err);
1.116 s = razor_concat("inflateEnd error: ", buffer, NULL);
1.117 - razor_atomic_abort(installer->atomic, s);
1.118 + razor_atomic_abort(installer->atomic, RAZOR_ZLIB_ERROR, err, s);
1.119 free(s);
1.120 }
1.121
1.122 @@ -1132,7 +1145,7 @@
1.123 const char *path;
1.124 size_t filesize;
1.125 char *s;
1.126 - int retval = 0;
1.127 + int retval = 0, code;
1.128
1.129 assert (rpm != NULL);
1.130 assert (root != NULL);
1.131 @@ -1142,9 +1155,10 @@
1.132 installer.atomic = atomic;
1.133
1.134 /* FIXME: Only do this before a transaction, not per rpm. */
1.135 - if (*root && (stat(root, &buf) < 0 || !S_ISDIR(buf.st_mode))) {
1.136 + if (*root && ((retval = stat(root, &buf)) || !S_ISDIR(buf.st_mode))) {
1.137 + code = retval ? errno : ENOTDIR;
1.138 s = razor_concat(root, ": Directory does not exist", NULL);
1.139 - razor_atomic_abort(atomic, s);
1.140 + razor_atomic_abort(atomic, RAZOR_POSIX_ERROR, code, s);
1.141 free(s);
1.142 return -1;
1.143 }