X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-hreq.c;h=7c481e957433255bae7b9fed14c66557f093b952;hb=c0453c34a58aac8150300ab829149a0ca4d9e5ee;hp=474b90e8f2adecdbf4a1a202c3ca9ba011fa6e08;hpb=e6298876fdbf457b6dd61556472060a9fa652c82;p=src%2Fapp-framework-binder.git diff --git a/src/afb-hreq.c b/src/afb-hreq.c index 474b90e8..7c481e95 100644 --- a/src/afb-hreq.c +++ b/src/afb-hreq.c @@ -447,9 +447,29 @@ int afb_hreq_post_add(struct afb_hreq *hreq, const char *key, const char *data, int afb_hreq_post_add_file(struct afb_hreq *hreq, const char *key, const char *file, const char *data, size_t size) { + ssize_t sz; struct hreq_data *hdat = get_data(hreq, key, 1); - /* continuation with reopening */ + if (hdat->value == NULL) { + hdat->file = open(file, O_WRONLY|O_TRUNC|O_CREAT, 0600); + if (hdat->file == 0) { + hdat->file = dup(0); + close(0); + } + if (hdat->file <= 0) { + hdat->file = 0; + return 0; + } + hdat->value = strdup(file); + if (hdat->value == NULL) { + close(hdat->file); + hdat->file = 0; + return 0; + } + } else { + if (strcmp(hdat->value, file)) + return 0; + } if (hdat->file < 0) { hdat->file = open(hdat->value, O_WRONLY|O_APPEND); if (hdat->file == 0) { @@ -459,15 +479,16 @@ int afb_hreq_post_add_file(struct afb_hreq *hreq, const char *key, const char *f if (hdat->file <= 0) return 0; } - if (hdat->file > 0) { - write(hdat->file, data, size); - return 1; + while (size) { + sz = write(hdat->file, data, size); + if (sz >= 0) { + hdat->length += (size_t)sz; + size -= (size_t)sz; + data += sz; + } else if (errno != EINTR) + return 0; } - - /* creation */ - /* TODO */ - return 0; - + return 1; } int afb_hreq_is_argument_a_file(struct afb_hreq *hreq, const char *key)