+
+void afb_hreq_post_end(struct afb_hreq *hreq)
+{
+ struct hreq_data *data = hreq->data;
+ while(data) {
+ if (data->file > 0) {
+ close(data->file);
+ data->file = -1;
+ }
+ data = data->next;
+ }
+}
+
+int afb_hreq_post_add(struct afb_hreq *hreq, const char *key, const char *data, size_t size)
+{
+ void *p;
+ struct hreq_data *hdat = get_data(hreq, key, 1);
+ if (hdat->file) {
+ return 0;
+ }
+ p = realloc(hdat->value, hdat->length + size + 1);
+ if (p == NULL) {
+ return 0;
+ }
+ hdat->value = p;
+ memcpy(&hdat->value[hdat->length], data, size);
+ hdat->length += size;
+ hdat->value[hdat->length] = 0;
+ return 1;
+}
+
+int afb_hreq_post_add_file(struct afb_hreq *hreq, const char *key, const char *file, const char *data, size_t size)
+{
+ struct hreq_data *hdat = get_data(hreq, key, 1);
+
+ /* continuation with reopening */
+ if (hdat->file < 0) {
+ hdat->file = open(hdat->value, O_WRONLY|O_APPEND);
+ if (hdat->file == 0) {
+ hdat->file = dup(0);
+ close(0);
+ }
+ if (hdat->file <= 0)
+ return 0;
+ }
+ if (hdat->file > 0) {
+ write(hdat->file, data, size);
+ return 1;
+ }
+
+ /* creation */
+ /* TODO */
+ return 0;
+
+}
+