FILE* pakfire_xfopen(FILE* f, const char* mode) {
char buffer[MAX_MAGIC_LENGTH];
+ // Check file handle
if (!f) {
- errno = EBADFD;
+ errno = EBADF;
return NULL;
}
+ // Check mode
if (!mode) {
errno = EINVAL;
return NULL;
return NULL;
}
+ // Check mode
+ if (!mode) {
+ errno = EINVAL;
+ return NULL;
+ }
+
// Fetch the file descriptor
fd = fileno(f);
if (fd < 0) {
lzma_ret ret;
int r;
+ // Check file handle
if (!f) {
- errno = EBADFD;
+ errno = EBADF;
return NULL;
}
+ // Check mode
if (!mode) {
errno = EINVAL;
return NULL;
// Check for a valid file handle
if (!f) {
- errno = EBADFD;
+ errno = EBADF;
return NULL;
}
// Open file
ASSERT(f = fopen(path, "r"));
+ // Invalid inputs
+ ASSERT_ERRNO(function(NULL, "r") == NULL, EBADF);
+ ASSERT_ERRNO(function(f, NULL) == NULL, EINVAL);
+
// Engage decompressor
ASSERT(f = function(f, "r"));
}
static int test_xfopen(const struct test* t) {
+ FILE* f = NULL;
+ int r = EXIT_FAILURE;
+
ASSERT_SUCCESS(read_test(t, pakfire_xfopen, "data/compress/data.gz"));
ASSERT_SUCCESS(read_test(t, pakfire_xfopen, "data/compress/data.xz"));
ASSERT_SUCCESS(read_test(t, pakfire_xfopen, "data/compress/data.zst"));
- return EXIT_SUCCESS;
+ // Open something random
+ f = fopen("/dev/urandom", "r");
+
+ ASSERT_ERRNO(pakfire_xfopen(f, "w") == NULL, ENOTSUP);
+
+ // Success
+ r = EXIT_SUCCESS;
FAIL:
- return EXIT_FAILURE;
+ if (f)
+ fclose(f);
+
+ return r;
}
int main(int argc, const char* argv[]) {