summaryrefslogtreecommitdiff
path: root/src/libopts/save.c
diff options
context:
space:
mode:
authorNikos Mavrogiannopoulos <nmav@gnutls.org>2013-11-05 21:11:23 +0100
committerNikos Mavrogiannopoulos <nmav@gnutls.org>2013-11-05 21:11:23 +0100
commit46f8a466a19cd36108e8fa33950678b3d85aee63 (patch)
tree2c90bfb3f2a704c9f8a0159a84eaaee02bb7c00d /src/libopts/save.c
parent2a2df234e768c88ed931032cc2baf83fdb6e3fb1 (diff)
downloadgnutls-46f8a466a19cd36108e8fa33950678b3d85aee63.tar.gz
updated libopts to 5.18
Diffstat (limited to 'src/libopts/save.c')
-rw-r--r--src/libopts/save.c80
1 files changed, 39 insertions, 41 deletions
diff --git a/src/libopts/save.c b/src/libopts/save.c
index 3ae046feaa..404a478e20 100644
--- a/src/libopts/save.c
+++ b/src/libopts/save.c
@@ -63,7 +63,7 @@ static void
prt_str_arg(FILE * fp, tOptDesc * pOD);
static void
-prt_enum_arg(FILE * fp, tOptDesc * pOD);
+prt_enum_arg(FILE * fp, tOptDesc * od);
static void
prt_set_arg(FILE * fp, tOptDesc * od);
@@ -138,7 +138,7 @@ find_dir_name(tOptions * opts, int * p_free)
{
size_t sz = strlen(pzEnv) + strlen(pzEndDir) + 2;
- pzFileName = (char*)AGALOC(sz, "dir name");
+ pzFileName = (char *)AGALOC(sz, "dir name");
}
if (pzFileName == NULL)
@@ -277,6 +277,8 @@ find_file_name(tOptions * opts, int * p_free_name)
static void
prt_entry(FILE * fp, tOptDesc * od, char const * l_arg)
{
+ int space_ct;
+
/*
* There is an argument. Pad the name so values line up.
* Not disabled *OR* this got equivalenced to another opt,
@@ -284,29 +286,29 @@ prt_entry(FILE * fp, tOptDesc * od, char const * l_arg)
* Otherwise, there must be a disablement name.
*/
{
- char const * pz;
- if (! DISABLED_OPT(od) || (od->optEquivIndex != NO_EQUIVALENT))
- pz = od->pz_Name;
- else
- pz = od->pz_DisableName;
-
- fprintf(fp, "%-18s", pz);
+ char const * pz =
+ (! DISABLED_OPT(od) || (od->optEquivIndex != NO_EQUIVALENT))
+ ? od->pz_Name
+ : od->pz_DisableName;
+ space_ct = 17 - strlen(pz);
+ fputs(pz, fp);
}
+
+ if ( (l_arg == NULL)
+ && (OPTST_GET_ARGTYPE(od->fOptState) != OPARG_TYPE_NUMERIC))
+ goto end_entry;
+
+ fputs(" = ", fp);
+ while (space_ct-- > 0) fputc(' ', fp);
+
/*
* IF the option is numeric only,
* THEN the char pointer is really the number
*/
if (OPTST_GET_ARGTYPE(od->fOptState) == OPARG_TYPE_NUMERIC)
- fprintf(fp, " %d\n", (int)(t_word)l_arg);
-
- /*
- * OTHERWISE, FOR each line of the value text, ...
- */
- else if (l_arg == NULL)
- fputc(NL, fp);
+ fprintf(fp, "%d", (int)(t_word)l_arg);
else {
- fputc(' ', fp); fputc(' ', fp);
for (;;) {
char const * eol = strchr(l_arg, NL);
@@ -329,8 +331,10 @@ prt_entry(FILE * fp, tOptDesc * od, char const * l_arg)
* Terminate the entry
*/
fputs(l_arg, fp);
- fputc(NL, fp);
}
+
+end_entry:
+ fputc(NL, fp);
}
/**
@@ -610,20 +614,24 @@ prt_str_arg(FILE * fp, tOptDesc * pOD)
}
/**
+ * print the string value of an enumeration.
+ *
+ * @param[in] fp the file pointer to write to
+ * @param[in] od the option descriptor with the enumerated value
*/
static void
-prt_enum_arg(FILE * fp, tOptDesc * pOD)
+prt_enum_arg(FILE * fp, tOptDesc * od)
{
- uintptr_t val = pOD->optArg.argEnum;
+ uintptr_t val = od->optArg.argEnum;
/*
* This is a magic incantation that will convert the
* bit flag values back into a string suitable for printing.
*/
- (*(pOD->pOptProc))(OPTPROC_RETURN_VALNAME, pOD);
- prt_entry(fp, pOD, (void*)(pOD->optArg.argString));
+ (*(od->pOptProc))(OPTPROC_RETURN_VALNAME, od);
+ prt_entry(fp, od, (void*)(od->optArg.argString));
- pOD->optArg.argEnum = val;
+ od->optArg.argEnum = val;
}
/**
@@ -638,24 +646,14 @@ prt_enum_arg(FILE * fp, tOptDesc * pOD)
static void
prt_set_arg(FILE * fp, tOptDesc * od)
{
- uintptr_t val = od->optArg.argEnum;
-
- /*
- * This is a magic incantation that will convert the
- * bit flag values back into a string suitable for printing.
- */
- (*(od->pOptProc))(OPTPROC_RETURN_VALNAME, od);
- prt_entry(fp, od, (void*)(od->optArg.argString));
-
- if (od->optArg.argString != NULL) {
- /*
- * set membership strings get allocated
- */
- AGFREE((void*)od->optArg.argString);
- od->fOptState &= ~OPTST_ALLOC_ARG;
- }
-
- od->optArg.argEnum = val;
+ char * list = optionMemberList(od);
+ size_t len = strlen(list);
+ char * buf = (char *)AGALOC(len + 3, "dir name");
+ *buf= '=';
+ memcpy(buf+1, list, len + 1);
+ prt_entry(fp, od, buf);
+ AGFREE(buf);
+ AGFREE(list);
}
/**