Make %autopatch and %patch accept -pg

* parsePrep.c (doPatch): Change strip argument type to const char *.
(doPatchMacro, doAutopatchMacro): Change opt_p variable type to char *,
change checking of opt_p: it can be either a number or a 'g' symbol
assuming that -pg is a valid option for patch command.
This commit is contained in:
Vladimir D. Seleznev 2019-12-16 00:23:41 +03:00 committed by Dmitry V. Levin
parent b0a545f593
commit 9c18a40269

View File

@ -67,7 +67,7 @@ static int checkOwners(const char * urlfn)
* @param dir dir to change to (i.e. patch -d argument)
* @return expanded %patch macro (NULL on error)
*/
/*@observer@*/ static char *doPatch(Spec spec, int c, int strip, const char *db,
/*@observer@*/ static char *doPatch(Spec spec, int c, const char *strip, const char *db,
int reverse, int removeEmpties, int fuzz, const char *dir, int silent)
/*@globals rpmGlobalMacroContext,
fileSystem@*/
@ -88,7 +88,7 @@ static int checkOwners(const char * urlfn)
const char *urlfn = rpmGetPath("%{_sourcedir}/", sp->source, NULL);
char args[BUFSIZ];
sprintf(args, "%s%s-p%d",
sprintf(args, "%s%s-p%s",
arg_patch_flags, *arg_patch_flags ? " ": "", strip);
if (silent)
strcat(args, " -s");
@ -460,10 +460,10 @@ static int doAutopatchMacro(Spec spec, const char *line)
int argc = 0, c, rc;
const char **argv = NULL;
int opt_p = 0;
char *opt_p = NULL;
int opt_F = rpmExpandNumeric("%{?_default_patch_fuzz}%{?!_default_patch_fuzz:-1}");
struct poptOption const autopatchOpts[] = {
{ NULL, 'p', POPT_ARG_INT, &opt_p, 'p', NULL, NULL },
{ NULL, 'p', POPT_ARG_STRING, &opt_p, 'p', NULL, NULL },
{ NULL, 'F', POPT_ARG_INT, &opt_F, 'F', NULL, NULL },
{ NULL, 0, 0, NULL, 0, NULL, NULL }
};
@ -486,6 +486,13 @@ static int doAutopatchMacro(Spec spec, const char *line)
return RPMERR_BADSPEC;
}
if (strcmp(opt_p, "g") && parseNum(opt_p, NULL)) {
rpmError(RPMERR_BADSPEC,
_("line %d: Bad arg to %%autopatch -p: %s\n"),
spec->lineNum, spec->line);
return RPMERR_BADSPEC;
}
optCon = poptFreeContext(optCon);
_free(argv);
@ -531,17 +538,17 @@ static int doPatchMacro(Spec spec, char *line)
fileSystem@*/
/*@modifies spec->prep, rpmGlobalMacroContext, fileSystem @*/
{
char *opt_b, *opt_d;
int opt_P, opt_p, opt_R, opt_E, opt_F, opt_s;
char *opt_b, *opt_d, *opt_p;
int opt_P, opt_R, opt_E, opt_F, opt_s;
char *s;
char buf[BUFSIZ], *bp;
int patch_nums[1024]; /* XXX - we can only handle 1024 patches! */
int patch_index, x;
memset(patch_nums, 0, sizeof(patch_nums));
opt_P = opt_p = opt_R = opt_E = opt_s = 0;
opt_P = opt_R = opt_E = opt_s = 0;
opt_F = rpmExpandNumeric("%{?_default_patch_fuzz}%{?!_default_patch_fuzz:-1}");
opt_b = opt_d = NULL;
opt_p = opt_b = opt_d = NULL;
patch_index = 0;
if (! strchr(" \t\n", line[6])) {
@ -595,17 +602,17 @@ static int doPatchMacro(Spec spec, char *line)
} else if (!strncmp(s, "-p", sizeof("-p")-1)) {
/* unfortunately, we must support -pX */
if (! strchr(" \t\n", s[2])) {
s = s + 2;
opt_p = s + 2;
} else {
s = strtok(NULL, " \t\n");
if (s == NULL) {
opt_p = strtok(NULL, " \t\n");
if (!opt_p) {
rpmError(RPMERR_BADSPEC,
_("line %d: Need arg to %%patch -p: %s\n"),
spec->lineNum, spec->line);
return RPMERR_BADSPEC;
}
}
if (parseNum(s, &opt_p)) {
if (strcmp(opt_p, "g") && parseNum(opt_p, NULL)) {
rpmError(RPMERR_BADSPEC,
_("line %d: Bad arg to %%patch -p: %s\n"),
spec->lineNum, spec->line);