mirror of
https://github.com/curl/curl.git
synced 2026-08-26 07:33:31 +03:00
IMAP: add CURLOPT_UPLOAD_FLAGS and --upload-flags
Set properties on the uploaded resource. Test 3209 and 3210 verify. Closes #15970
This commit is contained in:
parent
0cd2670afb
commit
6758aa722d
25 changed files with 395 additions and 16 deletions
|
|
@ -339,6 +339,7 @@ static const struct LongShort aliases[]= {
|
|||
{"trace-time", ARG_BOOL, ' ', C_TRACE_TIME},
|
||||
{"unix-socket", ARG_FILE, ' ', C_UNIX_SOCKET},
|
||||
{"upload-file", ARG_FILE, 'T', C_UPLOAD_FILE},
|
||||
{"upload-flags", ARG_STRG, ' ', C_UPLOAD_FLAGS},
|
||||
{"url", ARG_STRG, ' ', C_URL},
|
||||
{"url-query", ARG_STRG, ' ', C_URL_QUERY},
|
||||
{"use-ascii", ARG_BOOL, 'B', C_USE_ASCII},
|
||||
|
|
@ -1622,6 +1623,65 @@ static ParameterError parse_time_cond(struct GlobalConfig *global,
|
|||
return err;
|
||||
}
|
||||
|
||||
struct flagmap {
|
||||
const char *name;
|
||||
size_t len;
|
||||
unsigned char flag;
|
||||
};
|
||||
|
||||
static const struct flagmap flag_table[] = {
|
||||
{"answered", 8, CURLULFLAG_ANSWERED},
|
||||
{"deleted", 7, CURLULFLAG_DELETED},
|
||||
{"draft", 5, CURLULFLAG_DRAFT},
|
||||
{"flagged", 7, CURLULFLAG_FLAGGED},
|
||||
{"seen", 4, CURLULFLAG_SEEN},
|
||||
{NULL, 0, 0}
|
||||
};
|
||||
|
||||
static ParameterError parse_upload_flags(struct OperationConfig *config,
|
||||
char *nextarg)
|
||||
{
|
||||
char *flag;
|
||||
ParameterError err = PARAM_OK;
|
||||
char *tmp = strdup(nextarg);
|
||||
|
||||
if(!tmp)
|
||||
return PARAM_NO_MEM;
|
||||
|
||||
flag = tmp;
|
||||
while(flag) {
|
||||
bool negate;
|
||||
const struct flagmap *map;
|
||||
char *next = strchr(flag, ','); /* Find next comma or end */
|
||||
if(next)
|
||||
*next++ = '\0';
|
||||
|
||||
negate = (*flag == '-');
|
||||
if(negate)
|
||||
flag++;
|
||||
|
||||
for(map = flag_table; map->name; map++) {
|
||||
if(!strncmp(flag, map->name, map->len) && flag[map->len] == '\0') {
|
||||
if(negate)
|
||||
config->upload_flags &= (unsigned char)~map->flag;
|
||||
else
|
||||
config->upload_flags |= map->flag;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(!map->name) {
|
||||
err = PARAM_OPTION_UNKNOWN;
|
||||
break;
|
||||
}
|
||||
|
||||
flag = next;
|
||||
}
|
||||
|
||||
free(tmp);
|
||||
return err;
|
||||
}
|
||||
|
||||
ParameterError getparameter(const char *flag, /* f or -long-flag */
|
||||
char *nextarg, /* NULL if unset */
|
||||
argv_item_t cleararg1,
|
||||
|
|
@ -2909,6 +2969,9 @@ ParameterError getparameter(const char *flag, /* f or -long-flag */
|
|||
case C_MPTCP: /* --mptcp */
|
||||
config->mptcp = TRUE;
|
||||
break;
|
||||
case C_UPLOAD_FLAGS: /* --upload-flags */
|
||||
err = parse_upload_flags(config, nextarg);
|
||||
break;
|
||||
default: /* unknown flag */
|
||||
err = PARAM_OPTION_UNKNOWN;
|
||||
break;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue