Tweaks for archive error reporting
authorJ. Ali Harlow <ali@juiblex.co.uk>
Fri Jul 08 17:12:16 2016 +0100 (2016-07-08)
changeset 4838087224f30c4
parent 482 6a8a57779674
child 484 51ab167bd416
Tweaks for archive error reporting
librazor/razor.h.in
librazor/uri-io.c
     1.1 --- a/librazor/razor.h.in	Fri Jul 08 15:54:49 2016 +0100
     1.2 +++ b/librazor/razor.h.in	Fri Jul 08 17:12:16 2016 +0100
     1.3 @@ -151,6 +151,7 @@
     1.4  	RAZOR_GENERAL_ERROR_RPM_UNSUPPORTED,
     1.5  	RAZOR_GENERAL_ERROR_UNSUPPORTED_URI,
     1.6  	RAZOR_GENERAL_ERROR_BAD_URI,
     1.7 +	RAZOR_GENERAL_ERROR_UNSUPPORTED_ARCHIVE,
     1.8  };
     1.9  
    1.10  int razor_error_get_domain(struct razor_error *error);
     2.1 --- a/librazor/uri-io.c	Fri Jul 08 15:54:49 2016 +0100
     2.2 +++ b/librazor/uri-io.c	Fri Jul 08 17:12:16 2016 +0100
     2.3 @@ -55,12 +55,13 @@
     2.4  #define strcmp0(s1, s2)		((s1) && (s2) ? strcmp(s1, s2) : \
     2.5  				 (s1) ? 1 : (s2) ? -1 : 0)
     2.6  
     2.7 -#if HAVE_LIBARCHIVE
     2.8  static void *
     2.9  razor_archive_get_file_contents(const char *filename, int fd, const char *path,
    2.10  				size_t *length, struct razor_error **error)
    2.11  {
    2.12 +#if HAVE_LIBARCHIVE
    2.13  	int r;
    2.14 +	const char *errmsg;
    2.15  	void *addr;
    2.16  	const void *buf;
    2.17  	size_t size;
    2.18 @@ -75,8 +76,14 @@
    2.19  	r = archive_read_open_fd(a, fd, 10240);
    2.20  
    2.21  	if (r) {
    2.22 -		razor_set_error(error, RAZOR_POSIX_ERROR, archive_errno(a),
    2.23 -				filename, archive_error_string(a));
    2.24 +		errmsg = archive_error_string(a);
    2.25 +		if (!strcmp(errmsg, "Unrecognized archive format"))
    2.26 +			razor_set_error(error, RAZOR_GENERAL_ERROR,
    2.27 +					RAZOR_GENERAL_ERROR_UNSUPPORTED_ARCHIVE,
    2.28 +					filename, errmsg);
    2.29 +		else
    2.30 +			razor_set_error(error, RAZOR_POSIX_ERROR,
    2.31 +					archive_errno(a), filename, errmsg);
    2.32  		archive_read_finish(a);
    2.33  		return NULL;
    2.34  	}
    2.35 @@ -138,6 +145,13 @@
    2.36  			"No such file or directory in archive");
    2.37  
    2.38  	return NULL;
    2.39 +#else
    2.40 +	razor_set_error(error, RAZOR_GENERAL_ERROR,
    2.41 +			RAZOR_GENERAL_ERROR_UNSUPPORTED_ARCHIVE,
    2.42 +			filename, "Archives are not supported in this build");
    2.43 +
    2.44 +	return NULL;
    2.45 +#endif	/* HAVE_LIBARCHIVE */
    2.46  }
    2.47  
    2.48  static void *
    2.49 @@ -147,6 +161,7 @@
    2.50  	int fd;
    2.51  	char *path, *slash, *s;
    2.52  	void *addr;
    2.53 +	struct razor_error *tmp_error = NULL;
    2.54  
    2.55  	path = strdup(filename);
    2.56  	slash = strrchr(path, '/');
    2.57 @@ -157,7 +172,8 @@
    2.58  		if (fd >= 0) {
    2.59  			addr = razor_archive_get_file_contents(path, fd,
    2.60  							       slash + 1,
    2.61 -							       length, error);
    2.62 +							       length,
    2.63 +							       error);
    2.64  			free(path);
    2.65  			close(fd);
    2.66  			return addr;
    2.67 @@ -185,7 +201,6 @@
    2.68  #endif
    2.69  	return NULL;
    2.70  }
    2.71 -#endif
    2.72  
    2.73  #define OPEN_FILE_USED		(1U<<0)
    2.74  #define OPEN_FILE_MMAPPED	(1U<<1)
    2.75 @@ -210,7 +225,6 @@
    2.76  
    2.77  	fd = open(filename, O_RDONLY | O_BINARY);
    2.78  	if (fd < 0) {
    2.79 -#if HAVE_LIBARCHIVE
    2.80  #ifdef MSWIN_API
    2.81  		if (errno != ENOTDIR && errno != ENOENT) {
    2.82  #else
    2.83 @@ -222,10 +236,6 @@
    2.84  		addr = razor_file_get_contents_archive(filename, &size, error);
    2.85  		if (!addr)
    2.86  			return NULL;
    2.87 -#else
    2.88 -		razor_set_error_posix(error, filename);
    2.89 -		return NULL;
    2.90 -#endif
    2.91  	} else {
    2.92  		if (fstat(fd, &st) < 0) {
    2.93  			razor_set_error_posix(error, filename);