Support \n in /zip/.args files

This commit is contained in:
Justine Tunney 2023-11-04 07:19:37 -07:00
parent 48e260e653
commit 585c86e2a4
No known key found for this signature in database
GPG key ID: BE714B4575D6E328
4 changed files with 27 additions and 7 deletions

View file

@ -38,6 +38,21 @@ static struct ZipArgs {
char **oldargv;
} g_zipargs;
// remap \n → newline
static char *Decode(char *arg) {
int i, j;
for (i = j = 0; arg[i]; ++i) {
if (arg[i] == '\\' && arg[i + 1] == 'n') {
arg[j++] = '\n';
++i;
} else {
arg[j++] = arg[i];
}
}
arg[j] = 0;
return arg;
}
static void AddZipArg(int *argc, char ***argv, char *arg) {
*argv = xrealloc(*argv, (++(*argc) + 1) * sizeof(*(*argv)));
(*argv)[*argc - 1] = arg;
@ -72,7 +87,7 @@ int LoadZipArgsImpl(int *argc, char ***argv, char *data) {
AddZipArg(&n, &args, (*argv)[i]);
}
} else {
AddZipArg(&n, &args, arg);
AddZipArg(&n, &args, Decode(arg));
}
start = 0;
}