summaryrefslogtreecommitdiffstats
path: root/src/afb-hreq.c
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2016-04-17 18:33:41 +0200
committerJosé Bollo <jose.bollo@iot.bzh>2016-04-17 18:33:41 +0200
commitabbe8f79355cc7aa2ef906c626c1a43ea4762d88 (patch)
tree611772af4ec17ed818bf0510e22ac79879fedc5d /src/afb-hreq.c
parentbd375330fe7e3d79495762bcc7c86d907a453aae (diff)
set download path
Change-Id: Ib42157297a868056ab20338b806cc06e5322b274 Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afb-hreq.c')
-rw-r--r--src/afb-hreq.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/src/afb-hreq.c b/src/afb-hreq.c
index 8a0b2804..93cce62b 100644
--- a/src/afb-hreq.c
+++ b/src/afb-hreq.c
@@ -52,6 +52,7 @@ static const char token_cookie[] = "token";
static char *cookie_name = NULL;
static char *cookie_setter = NULL;
+static char *tmp_pattern = NULL;
struct hreq_data {
struct hreq_data *next;
@@ -492,12 +493,53 @@ int afb_hreq_post_add(struct afb_hreq *hreq, const char *key, const char *data,
return 1;
}
+int afb_hreq_init_download_path(const char *directory)
+{
+ struct stat st;
+ size_t n;
+ char *p;
+
+ if (access(directory, R_OK|W_OK)) {
+ /* no read/write access */
+ return -1;
+ }
+ if (stat(directory, &st)) {
+ /* can't get info */
+ return -1;
+ }
+ if (!S_ISDIR(st.st_mode)) {
+ /* not a directory */
+ errno = ENOTDIR;
+ return -1;
+ }
+ n = strlen(directory);
+ while(n > 1 && directory[n-1] == '/') n--;
+ p = malloc(n + 8);
+ if (p == NULL) {
+ /* can't allocate memory */
+ errno = ENOMEM;
+ return -1;
+ }
+ memcpy(p, directory, n);
+ p[n++] = '/';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n++] = 'X';
+ p[n] = 0;
+ free(tmp_pattern);
+ tmp_pattern = p;
+ return 0;
+}
+
static int opentempfile(char **path)
{
int fd;
char *fname;
- fname = strdup("XXXXXX"); /* TODO improve the path */
+ fname = strdup(tmp_pattern ? : "XXXXXX"); /* TODO improve the path */
if (fname == NULL)
return -1;