librazor/rpm.c
changeset 448 8476d35b048f
parent 442 c4bcba8023a9
child 458 3f841a46eab5
     1.1 --- a/librazor/rpm.c	Sat Aug 23 16:28:31 2014 +0100
     1.2 +++ b/librazor/rpm.c	Thu Sep 11 18:54:16 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  	}