static void print_parameter(struct parm_struct *p, void *ptr, FILE * f)
{
+ /* For the seperation of lists values that we print below */
+ const char *list_sep = ", ";
int i;
- const char *list_sep = ", "; /* For the seperation of lists values that we print below */
switch (p->type)
{
case P_ENUM:
fprintf(f, "%c", *(char *)ptr);
break;
- case P_OCTAL:
- fprintf(f, "0%o", *(int *)ptr);
+ case P_OCTAL: {
+ int val = *(int *)ptr;
+ if (val == -1) {
+ fprintf(f, "-1");
+ } else {
+ fprintf(f, "0%o", val);
+ }
break;
+ }
case P_CMDLIST:
list_sep = " ";
case P_LIST:
if ((char ***)ptr && *(char ***)ptr) {
char **list = *(char ***)ptr;
-
for (; *list; list++) {
+ /* surround strings with whitespace in double quotes */
if (*(list+1) == NULL) {
- /* last item, print no extra seperator after */
+ /* last item, no extra separator */
list_sep = "";
}
- fprintf(f, "%s%s", *list, list_sep);
+ if ( strchr_m( *list, ' ' ) ) {
+ fprintf(f, "\"%s\"%s", *list, list_sep);
+ } else {
+ fprintf(f, "%s%s", *list, list_sep);
+ }
}
}
break;
fprintf(f, "%s", *(char **)ptr);
}
break;
+ case P_SEP:
+ break;
}
}
return (*((bool *)ptr1) == *((bool *)ptr2));
case P_INTEGER:
+ case P_ENUM:
case P_OCTAL:
case P_BYTES:
- case P_ENUM:
return (*((int *)ptr1) == *((int *)ptr2));
case P_CHAR:
return (*((char *)ptr1) == *((char *)ptr2));
- case P_CMDLIST:
case P_LIST:
- return str_list_equal((const char **)(*(char ***)ptr1),
- (const char **)(*(char ***)ptr2));
+ case P_CMDLIST:
+ return str_list_equal(*(const char ***)ptr1, *(const char ***)ptr2);
case P_STRING:
case P_USTRING:
p2 = NULL;
return (p1 == p2 || strequal(p1, p2));
}
+ case P_SEP:
+ break;
}
return false;
}