#include #include #include #include #include #include void tempfile_callback(struct magi_field * field, char * buffer, int len) { static FILE * file = 0; if (!strcmp(field->name, "data")) { if (!file) { remove(field->name); file = fopen(field->name, "wb"); } if (len) { fwrite(buffer, 1, len, file); } if (len < magi_parse_multipart_callback_size) { fclose(file); file = 0; } } else if (len) { field->data = realloc(field->data, field->len + len + 1); memcpy(field->data + field->len, buffer, len); field->len += len; field->data[field->len] = 0; } } void response_request(struct magi_request * req, struct magi_response * res) { magi_response_content_type(res, magi_xhtml); magi_response_content( res, "" "" "Upload File" "" "
" "" "" "" "
" "" ""); struct magi_field * name = magi_field_list_get(req->fields, "name"); struct magi_field * data = magi_field_list_get(req->fields, "data"); if (name && name->data && data) { rename("data", name->data); } } int main(int argc, char const * argv[]) { struct magi_request request; if (magi_cgi(&request, tempfile_callback, 0)) { struct magi_response response; response_request(&request, &response); magi_cgi_response(&response); magi_response_destroy(); } else { magi_cgi_error(request.error); } magi_request_destroy(&request); return 0; }