mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2026-01-16 14:21:03 +01:00
REORG/MINOR: cfgparse: eliminate code duplication by lshift_args()
There were similar parts of the code in "no" and "default" prefix keywords handling. This duplication caused the bug once. No backport needed.
This commit is contained in:
parent
447d73dc99
commit
a3ee35cbfc
@ -133,6 +133,26 @@ struct cfg_kw_list cfg_keywords = {
|
||||
.list = LIST_HEAD_INIT(cfg_keywords.list)
|
||||
};
|
||||
|
||||
/*
|
||||
* Shifts <args> one position to the left.
|
||||
* This function tricky preserves internal allocated structure of the
|
||||
* <args>. We defer the deallocation of the "shifted off" element, by
|
||||
* making it an empty string and moving it into the gap that appears after
|
||||
* the shift.
|
||||
*/
|
||||
static void
|
||||
lshift_args(char **args)
|
||||
{
|
||||
int i;
|
||||
char *shifted;
|
||||
|
||||
shifted = args[0];
|
||||
for (i = 0; *args[i + 1]; i++)
|
||||
args[i] = args[i + 1];
|
||||
*shifted = '\0';
|
||||
args[i] = shifted;
|
||||
}
|
||||
|
||||
/*
|
||||
* converts <str> to a list of listeners which are dynamically allocated.
|
||||
* The format is "{addr|'*'}:port[-end][,{addr|'*'}:port[-end]]*", where :
|
||||
@ -2674,24 +2694,12 @@ next_line:
|
||||
|
||||
/* check for keyword modifiers "no" and "default" */
|
||||
if (strcmp(args[0], "no") == 0) {
|
||||
char *tmp;
|
||||
|
||||
kwm = KWM_NO;
|
||||
tmp = args[0];
|
||||
for (arg=0; *args[arg+1]; arg++)
|
||||
args[arg] = args[arg+1]; // shift args after inversion
|
||||
*tmp = '\0'; // fix the next arg to \0
|
||||
args[arg] = tmp;
|
||||
lshift_args(args);
|
||||
}
|
||||
else if (strcmp(args[0], "default") == 0) {
|
||||
char *tmp;
|
||||
|
||||
kwm = KWM_DEF;
|
||||
tmp = args[0];
|
||||
for (arg=0; *args[arg+1]; arg++)
|
||||
args[arg] = args[arg+1]; // shift args after inversion
|
||||
*tmp = '\0';
|
||||
args[arg] = tmp;
|
||||
lshift_args(args);
|
||||
}
|
||||
|
||||
if (kwm != KWM_STD && strcmp(args[0], "option") != 0 &&
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user