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);