summaryrefslogtreecommitdiff
path: root/upload.c
diff options
context:
space:
mode:
Diffstat (limited to 'upload.c')
-rw-r--r--upload.c66
1 files changed, 17 insertions, 49 deletions
diff --git a/upload.c b/upload.c
index 56cf2c4..d9b38cb 100644
--- a/upload.c
+++ b/upload.c
@@ -121,7 +121,7 @@ header_template_callback(size_t index, void *arg)
* GET request, we print upload form
*/
void
-upload_get(struct kreq * r, struct http_ret * ret, struct file * file)
+upload_get(struct kreq * r, struct file * file)
{
struct khtmlreq html;
struct ktemplate template;
@@ -132,19 +132,13 @@ upload_get(struct kreq * r, struct http_ret * ret, struct file * file)
/* action url is form submit url */
if (build_upload_url(r, file) == 0) {
- *ret = (struct http_ret) {
- KHTTP_500,
- "upload: Can't build upload url"
- };
+ http_exit(r, KHTTP_500, "upload: Can't build upload url");
goto end;
}
/* read template */
tmpl = page_template_new(UPLOAD_URL);
if (tmpl == NULL) {
- *ret = (struct http_ret) {
- KHTTP_500,
- "upload: Unable to read template"
- };
+ http_exit(r, KHTTP_500, "upload: Unable to read template");
goto end;
}
/* print upload form */
@@ -176,7 +170,7 @@ end:
* POST request, we handle upload form
*/
void
-upload_post(struct kreq * r, struct http_ret * ret, struct file * f)
+upload_post(struct kreq * r, struct file * f)
{
char path[PATH_MAX];
FILE *to_write;
@@ -184,13 +178,9 @@ upload_post(struct kreq * r, struct http_ret * ret, struct file * f)
/* prepare action url for return redirection in case of success */
if (build_browse_url(r, f) == 0) {
- *ret = (struct http_ret) {
- KHTTP_500,
- "upload: can't build return url"
- };
+ http_exit(r, KHTTP_500, "upload: can't build return url");
return;
}
-
/*
* data should have been validated prior to handling the request, so
* here we should have an array of fields named "file", each field
@@ -200,33 +190,25 @@ upload_post(struct kreq * r, struct http_ret * ret, struct file * f)
struct kpair *upl = &(r->fields[i]);
path_len = file_get_data_path(f, path, PATH_MAX, upl->file);
if (path_len == 0 || path_len >= PATH_MAX) {
- *ret = (struct http_ret) {
- KHTTP_500,
- "upload: can't build file path"
- };
+ http_exit(r, KHTTP_500,
+ "upload: can't build file path");
return;
}
to_write = fopen(path, "wb");
if (to_write == NULL) {
- *ret = (struct http_ret) {
- KHTTP_500,
- "upload: can't open file for writing"
- };
+ http_exit(r, KHTTP_500,
+ "upload: can't open file for writing");
return;
}
if (fwrite(upl->val, sizeof(char), upl->valsz, to_write)
!= upl->valsz) {
- *ret = (struct http_ret) {
- KHTTP_500,
- "upload: error while writing file"
- };
+ http_exit(r, KHTTP_500,
+ "upload: error while writing file");
return;
}
if (fclose(to_write) != 0) {
- *ret = (struct http_ret) {
- KHTTP_500,
- "upload: error while closing file"
- };
+ http_exit(r, KHTTP_500,
+ "upload: error while closing file");
return;
}
}
@@ -234,41 +216,27 @@ upload_post(struct kreq * r, struct http_ret * ret, struct file * f)
/* on success, redirect to the directory where new files were created */
khttp_head(r, kresps[KRESP_LOCATION], "%s", f->action_url);
http_open(r, KHTTP_303, r->mime);
-
- *ret = (struct http_ret) {
- KHTTP_303,
- ""
- };
}
-
-struct http_ret
+void
upload(struct kreq * r)
{
struct file *file;
- struct http_ret ret;
file = NULL;
- ret = (struct http_ret) {
- KHTTP_200, ""
- };
/* build file corresponding to request (ie. upload) path */
file = file_new(r->path);
if (file == NULL) {
- ret = (struct http_ret) {
- KHTTP_404,
- "upload: Unable to build data file"
- };
+ http_exit(r, KHTTP_404, "upload: Unable to build data file");
goto end;
}
/* print form or handle submission according to HTTP method */
if (r->method == KMETHOD_POST)
- upload_post(r, &ret, file);
+ upload_post(r, file);
else
- upload_get(r, &ret, file);
+ upload_get(r, file);
end:
file_free(file);
- return ret;
}