C_SIMPLE_HTTP_StaticFileInfo file_info;
memset(&file_info, 0, sizeof(C_SIMPLE_HTTP_StaticFileInfo));
- if (!static_dir || !path || !c_simple_http_is_xdg_mime_available()) {
+ if (!static_dir || !path) {
+ file_info.result = STATIC_FILE_RESULT_InvalidParameter;
+ return file_info;
+ } else if (!c_simple_http_is_xdg_mime_available()) {
+ file_info.result = STATIC_FILE_RESULT_NoXDGMimeAvailable;
return file_info;
}
buf_size *= 2;
buf = realloc(buf, buf_size);
if (buf == NULL) {
+ file_info.result = STATIC_FILE_RESULT_InternalError;
return file_info;
}
} else {
free(buf);
+ file_info.result = STATIC_FILE_RESULT_InternalError;
return file_info;
}
} else {
"ERROR: Failed to chdir into \"%s\"! (errno %d)\n",
static_dir,
errno);
+ file_info.result = STATIC_FILE_RESULT_InternalError;
return file_info;
}
}
if (path[idx] == 0) {
fprintf(stderr, "ERROR: Received invalid path \"%s\"!\n", path);
+ file_info.result = STATIC_FILE_RESULT_InvalidParameter;
return file_info;
}
}
if (fd == NULL) {
fprintf(stderr, "ERROR: Failed to open path \"%s\"!\n", path + idx);
+ file_info.result = STATIC_FILE_RESULT_FileError;
return file_info;
}
long long_ret = ftell(fd);
if (long_ret < 0) {
fprintf(stderr, "ERROR: Failed to seek in path fd \"%s\"!\n", path);
+ file_info.result = STATIC_FILE_RESULT_FileError;
return file_info;
}
fseek(fd, 0, SEEK_SET);
fprintf(stderr, "ERROR: Failed to read path fd \"%s\"!\n", path);
free(file_info.buf);
file_info.buf_size = 0;
+ file_info.result = STATIC_FILE_RESULT_FileError;
return file_info;
}
c_simple_http_cleanup_static_file_info(&file_info);
close(from_xdg_mime_pipe[1]);
close(from_xdg_mime_pipe[0]);
+ file_info.result = STATIC_FILE_RESULT_InternalError;
return file_info;
}
c_simple_http_cleanup_static_file_info(&file_info);
close(from_xdg_mime_pipe[1]);
close(from_xdg_mime_pipe[0]);
+ file_info.result = STATIC_FILE_RESULT_InternalError;
return file_info;
}
if (buf == NULL) {
c_simple_http_cleanup_static_file_info(&file_info);
close(from_xdg_mime_pipe[0]);
+ file_info.result = STATIC_FILE_RESULT_InternalError;
return file_info;
}
}
if (ret != 0) {
c_simple_http_cleanup_static_file_info(&file_info);
+ file_info.result = STATIC_FILE_RESULT_InternalError;
return file_info;
}
file_info.mime_type = buf;
+ file_info.result = STATIC_FILE_RESULT_OK;
return file_info;
}
// Standard library includes.
#include <stdint.h>
+typedef enum C_SIMPLE_HTTP_StaticFileResult {
+ STATIC_FILE_RESULT_OK,
+ STATIC_FILE_RESULT_FileError,
+ STATIC_FILE_RESULT_InvalidParameter,
+ STATIC_FILE_RESULT_NoXDGMimeAvailable,
+ STATIC_FILE_RESULT_InternalError
+} C_SIMPLE_HTTP_StaticFileResult;
+
typedef struct C_SIMPLE_HTTP_StaticFileInfo {
char *buf;
uint64_t buf_size;
char *mime_type;
+ C_SIMPLE_HTTP_StaticFileResult result;
} C_SIMPLE_HTTP_StaticFileInfo;
/// Returns non-zero if "xdg_mime" is available.