Mercurial > sci
diff scictl.c @ 18:600204c31bf0
misc: refactor
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 12 Jul 2022 20:20:51 +0200 |
parents | 3051ef92173a |
children |
line wrap: on
line diff
--- a/scictl.c Wed Oct 06 16:22:23 2021 +0200 +++ b/scictl.c Tue Jul 12 20:20:51 2022 +0200 @@ -81,17 +81,69 @@ return console; } +static size_t +extract(char *s, size_t w, size_t n, void *data) +{ + return fwrite(s, w, n, data); +} + +static json_t * +parse(const char *data) +{ + json_t *doc; + json_error_t err; + + if (!(json_loads(doc, 0, &err))) + die("abort: unable to parse JSON: %s\n", err.text); + + return doc; +} + +static json_t * +get(const char *url) +{ + CURL *curl; + CURLcode code; + FILE *fp; + char buf[HTTP_BUF_MAX]; + long ret; + + if (!(fp = fmemopen(buf, sizeof (buf), "w"))) + die("abort: %s", strerror(errno)); + + curl = curl_easy_init(); + curl_easy_setopt(curl, CURLOPT_URL, url); + curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, extract); + curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); + curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3L); + code = curl_easy_perform(curl); + + if (code != CURLE_OK) + die("abort: %s", curl_easy_strerror(code)); + + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &ret); + + if (ret != 200) + die("abort: HTTP %ld\n", ret); + + curl_easy_cleanup(curl); + fclose(fp); + + return parse(buf); +} + static struct req cmd_job_add(int argc, char **argv) { struct job job = {0}; struct project project = {0}; - struct req rp, rj; if (argc < 2) usage(); - if ((rp = req_project_find(&project, argv[0])).status) + project.name = argv[0]; + + if (_project_find(&project, argv[0])).status) return rp; job.project_id = project.id;