Mercurial > sci
comparison scictl.c @ 18:600204c31bf0
misc: refactor
author | David Demelier <markand@malikania.fr> |
---|---|
date | Tue, 12 Jul 2022 20:20:51 +0200 |
parents | 3051ef92173a |
children |
comparison
equal
deleted
inserted
replaced
17:40fe70256fb0 | 18:600204c31bf0 |
---|---|
79 fclose(fp); | 79 fclose(fp); |
80 | 80 |
81 return console; | 81 return console; |
82 } | 82 } |
83 | 83 |
84 static size_t | |
85 extract(char *s, size_t w, size_t n, void *data) | |
86 { | |
87 return fwrite(s, w, n, data); | |
88 } | |
89 | |
90 static json_t * | |
91 parse(const char *data) | |
92 { | |
93 json_t *doc; | |
94 json_error_t err; | |
95 | |
96 if (!(json_loads(doc, 0, &err))) | |
97 die("abort: unable to parse JSON: %s\n", err.text); | |
98 | |
99 return doc; | |
100 } | |
101 | |
102 static json_t * | |
103 get(const char *url) | |
104 { | |
105 CURL *curl; | |
106 CURLcode code; | |
107 FILE *fp; | |
108 char buf[HTTP_BUF_MAX]; | |
109 long ret; | |
110 | |
111 if (!(fp = fmemopen(buf, sizeof (buf), "w"))) | |
112 die("abort: %s", strerror(errno)); | |
113 | |
114 curl = curl_easy_init(); | |
115 curl_easy_setopt(curl, CURLOPT_URL, url); | |
116 curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, extract); | |
117 curl_easy_setopt(curl, CURLOPT_WRITEDATA, fp); | |
118 curl_easy_setopt(curl, CURLOPT_TIMEOUT, 3L); | |
119 code = curl_easy_perform(curl); | |
120 | |
121 if (code != CURLE_OK) | |
122 die("abort: %s", curl_easy_strerror(code)); | |
123 | |
124 curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &ret); | |
125 | |
126 if (ret != 200) | |
127 die("abort: HTTP %ld\n", ret); | |
128 | |
129 curl_easy_cleanup(curl); | |
130 fclose(fp); | |
131 | |
132 return parse(buf); | |
133 } | |
134 | |
84 static struct req | 135 static struct req |
85 cmd_job_add(int argc, char **argv) | 136 cmd_job_add(int argc, char **argv) |
86 { | 137 { |
87 struct job job = {0}; | 138 struct job job = {0}; |
88 struct project project = {0}; | 139 struct project project = {0}; |
89 struct req rp, rj; | |
90 | 140 |
91 if (argc < 2) | 141 if (argc < 2) |
92 usage(); | 142 usage(); |
93 | 143 |
94 if ((rp = req_project_find(&project, argv[0])).status) | 144 project.name = argv[0]; |
145 | |
146 if (_project_find(&project, argv[0])).status) | |
95 return rp; | 147 return rp; |
96 | 148 |
97 job.project_id = project.id; | 149 job.project_id = project.id; |
98 job.tag = argv[1]; | 150 job.tag = argv[1]; |
99 | 151 |