aboutsummaryrefslogtreecommitdiff
path: root/src/request.c
diff options
context:
space:
mode:
authorAleksey Veresov <aleksey@veresov.pro>2020-02-06 11:27:59 +0300
committerAleksey Veresov <aleksey@veresov.pro>2020-02-06 11:27:59 +0300
commitfca83975899b01c62ede4258f175346b7039be3d (patch)
tree37c2bb8faf95de1252a97942a68183f795eb82a0 /src/request.c
parent8ef310a22a54dca7a80947f83f03bc296ab298dd (diff)
parent746c3f3076fe5994f08d729aa1b958465231b0c8 (diff)
downloadmagi-fca83975899b01c62ede4258f175346b7039be3d.tar
magi-fca83975899b01c62ede4258f175346b7039be3d.tar.xz
magi-fca83975899b01c62ede4258f175346b7039be3d.zip
Merge branch 'master' into test
Diffstat (limited to 'src/request.c')
-rw-r--r--src/request.c142
1 files changed, 75 insertions, 67 deletions
diff --git a/src/request.c b/src/request.c
index e905e53..8c3a101 100644
--- a/src/request.c
+++ b/src/request.c
@@ -21,73 +21,6 @@ void magi_request_setup(struct magi_request * request)
}
}
-void magi_tempfiles_add(struct magi_tempfiles * tmps,
- const char * name,
- const char * path,
- int max)
-{
- if (!tmps) {
- return;
- }
- if (tmps->count++) {
- tmps->param_names = realloc(tmps->param_names,
- sizeof(*tmps->param_names) * tmps->count);
- tmps->locations =
- realloc(tmps->locations, sizeof(*tmps->locations) * tmps->count);
- tmps->maximums =
- realloc(tmps->maximums, sizeof(*tmps->maximums) * tmps->count);
- } else {
- tmps->param_names = malloc(sizeof(*tmps->param_names));
- tmps->locations = malloc(sizeof(*tmps->locations));
- tmps->maximums = malloc(sizeof(*tmps->maximums));
- }
- tmps->param_names[tmps->count - 1] = name;
- tmps->locations[tmps->count - 1] = path;
- tmps->maximums[tmps->count - 1] = max;
-}
-
-static void tempfiles(struct magi_file * file,
- char * addon,
- int addon_len,
- int is_addon_last,
- void * userdata)
-{
- struct magi_tempfiles * table = userdata;
- int pos;
- for (pos = 0; pos != table->count; ++pos) {
- if (!strcmp(table->param_names[pos], file->param_name)) {
- static FILE * f = 0;
- static int unlimited;
- static int left;
- if (!f) {
- const char * loc = table->locations[pos];
- f = fopen(loc, "wb");
- left = table->maximums[pos];
- unlimited = !left;
- }
- if (unlimited) {
- fwrite(addon, 1, addon_len, f);
- } else {
- int min = left < addon_len ? left : addon_len;
- fwrite(addon, 1, min, f);
- left -= min;
- }
- if (is_addon_last) {
- fclose(f);
- f = 0;
- }
- return;
- }
- }
-}
-
-void magi_request_setup_tempfiles(struct magi_request * request,
- struct magi_tempfiles * table)
-{
- request->file_callback = tempfiles;
- request->file_callback_userdata = table;
-}
-
static void request_free(struct magi_request * request)
{
@@ -147,3 +80,78 @@ void magi_request_destroy(struct magi_request * request)
request_annul(request);
}
}
+
+
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+ * Tempfiles Callback
+ */
+void magi_tempfiles_add(struct magi_tempfiles * tmps,
+ const char * name,
+ const char * path,
+ int max)
+{
+ if (!tmps) {
+ return;
+ }
+ if (tmps->count++) {
+ tmps->tmps = realloc(tmps->tmps, sizeof(*tmps->tmps) * tmps->count);
+ } else {
+ tmps->tmps = malloc(sizeof(*tmps->tmps));
+ }
+ tmps->tmps[tmps->count - 1].param_name = name;
+ tmps->tmps[tmps->count - 1].location = path;
+ tmps->tmps[tmps->count - 1].maximum = max;
+}
+
+void magi_tempfiles_destroy(struct magi_tempfiles * tmps)
+{
+ if (!tmps) {
+ return;
+ }
+ free(tmps->tmps);
+}
+
+static void tempfiles(struct magi_file * file,
+ char * addon,
+ int addon_len,
+ int is_addon_last,
+ void * userdata)
+{
+ struct magi_tempfiles * table = userdata;
+ int pos;
+ if (!file->file_name || !strcmp(file->file_name, "")) {
+ return;
+ }
+ for (pos = 0; pos != table->count; ++pos) {
+ if (!strcmp(table->tmps[pos].param_name, file->param_name)) {
+ static FILE * f = 0;
+ static int unlimited;
+ static int left;
+ if (!f) {
+ const char * loc = table->tmps[pos].location;
+ f = fopen(loc, "wb");
+ left = table->tmps[pos].maximum;
+ unlimited = !left;
+ }
+ if (unlimited) {
+ fwrite(addon, 1, addon_len, f);
+ } else {
+ int min = left < addon_len ? left : addon_len;
+ fwrite(addon, 1, min, f);
+ left -= min;
+ }
+ if (is_addon_last) {
+ fclose(f);
+ f = 0;
+ }
+ return;
+ }
+ }
+}
+
+void magi_request_setup_tempfiles(struct magi_request * request,
+ struct magi_tempfiles * table)
+{
+ request->file_callback = tempfiles;
+ request->file_callback_userdata = table;
+}