summaryrefslogtreecommitdiff
path: root/download.c
diff options
context:
space:
mode:
Diffstat (limited to 'download.c')
-rw-r--r--download.c46
1 files changed, 11 insertions, 35 deletions
diff --git a/download.c b/download.c
index 1153a41..5dffd03 100644
--- a/download.c
+++ b/download.c
@@ -76,7 +76,7 @@ build_download_url(const struct kreq * r, struct file * file)
return action_url_len;
}
-struct http_ret
+void
download(struct kreq * r)
{
void *buffer;
@@ -85,22 +85,16 @@ download(struct kreq * r)
char file_path[PATH_MAX];
char *path;
size_t path_size, suffix_len;
- struct http_ret ret;
- /* initialize empty file and return struct to success */
+ /* initialize empty file to success */
f = NULL;
- ret = (struct http_ret) {
- KHTTP_200, ""
- };
/* build requested file path, with suffix or without */
suffix_len = strlen(r->suffix);
if (suffix_len > 0) {
if (str_concat(&path, r->path, ".", r->suffix, NULL) <= 0) {
- ret = (struct http_ret) {
- KHTTP_414,
- "download: unable to build requested file path"
- };
+ http_exit(r, KHTTP_414,
+ "download: unable to build requested file path");
goto end;
}
} else {
@@ -109,54 +103,37 @@ download(struct kreq * r)
/* build file metadata */
f = file_new(path);
if (f == NULL) {
- ret = (struct http_ret) {
- KHTTP_404,
- "download: file metadata failure"
- };
+ http_exit(r, KHTTP_404, "download: file metadata failure");
goto end;
}
/* we do not support downloading folders */
if (f->is_dir) {
- ret = (struct http_ret) {
- KHTTP_400,
- "download: can't download folder"
- };
+ http_exit(r, KHTTP_400, "download: can't download folder");
goto end;
}
/* memory map the file */
path_size = file_get_data_path(f, file_path, PATH_MAX, NULL);
if (path_size == 0 || path_size >= PATH_MAX) {
- ret = (struct http_ret) {
- KHTTP_404,
- "download: unable to build file path"
- };
+ http_exit(r, KHTTP_404, "download: unable to build file path");
goto end;
}
fd = open(file_path, O_RDONLY);
if (fd < 0) {
- ret = (struct http_ret) {
- KHTTP_404,
- "download: unable to open file"
- };
+ http_exit(r, KHTTP_404, "download: unable to open file");
goto end;
}
/* mmap does not work with empty file: st_size = 0 */
if (f->size > 0) {
buffer = mmap(NULL, f->size, PROT_READ, MAP_PRIVATE, fd, 0);
if (buffer == MAP_FAILED) {
- ret = (struct http_ret) {
- KHTTP_500,
- "download: mmap failed"
- };
+ http_exit(r, KHTTP_500, "download: mmap failed");
goto end;
}
}
/* write the file */
if (!http_open_file(r, KHTTP_200, f)) {
- ret = (struct http_ret) {
- KHTTP_500,
- "download: filename url encoding failed"
- };
+ http_exit(r, KHTTP_500,
+ "download: filename url encoding failed");
goto end;
}
if (f->size > 0)
@@ -169,5 +146,4 @@ end:
if (f != NULL && f->size > 0)
munmap(buffer, f->size);
file_free(f);
- return ret;
}