mirror of
git://git.gnupg.org/gnupg.git
synced 2025-07-02 22:46:30 +02:00
common: New function substitute_vars.
* common/stringhelp.c (substitute_envvars): Factor code out to
(substitute_vars): new.
(subst_getenv): New.
--
This is a generalized version of substitute_envvars.
(cherry picked from commit 7b7fdf45e5
)
This commit is contained in:
parent
159fb5cdbb
commit
eeda4ef7d2
2 changed files with 42 additions and 7 deletions
|
@ -1691,10 +1691,16 @@ format_text (const char *text_in, int target_cols, int max_cols)
|
|||
}
|
||||
|
||||
|
||||
/* Substitute environment variables in STRING and return a new string.
|
||||
* On error the function returns NULL. */
|
||||
/* Substitute variables in STRING and return a new string. GETVAL is
|
||||
* a function which maps NAME to its value; that value is a string
|
||||
* which may not change during the execution time of this function.
|
||||
* If GETVAL returns NULL substitute_vars returns NULL and the caller
|
||||
* may inspect ERRNO for the reason. In all other error cases this
|
||||
* function also returns NULL. Caller must free the returned string. */
|
||||
char *
|
||||
substitute_envvars (const char *string)
|
||||
substitute_vars (const char *string,
|
||||
const char *(*getval)(void *cookie, const char *name),
|
||||
void *cookie)
|
||||
{
|
||||
char *line, *p, *pend;
|
||||
const char *value;
|
||||
|
@ -1745,19 +1751,22 @@ substitute_envvars (const char *string)
|
|||
{
|
||||
int save = *pend;
|
||||
*pend = 0;
|
||||
value = getenv (p+2);
|
||||
value = getval (cookie, p+2);
|
||||
*pend++ = save;
|
||||
}
|
||||
else
|
||||
{
|
||||
int save = *pend;
|
||||
*pend = 0;
|
||||
value = getenv (p+1);
|
||||
value = getval (cookie, p+1);
|
||||
*pend = save;
|
||||
}
|
||||
|
||||
if (!value)
|
||||
value = "";
|
||||
{
|
||||
xfree (result);
|
||||
return NULL;
|
||||
}
|
||||
valuelen = strlen (value);
|
||||
if (valuelen <= pend - p)
|
||||
{
|
||||
|
@ -1793,3 +1802,26 @@ substitute_envvars (const char *string)
|
|||
leave:
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/* Helper for substitute_envvars. */
|
||||
static const char *
|
||||
subst_getenv (void *cookie, const char *name)
|
||||
{
|
||||
const char *s;
|
||||
|
||||
(void)cookie;
|
||||
|
||||
s = getenv (name);
|
||||
return s? s : "";
|
||||
}
|
||||
|
||||
|
||||
/* Substitute environment variables in STRING and return a new string.
|
||||
* On error the function returns NULL. */
|
||||
char *
|
||||
substitute_envvars (const char *string)
|
||||
{
|
||||
return substitute_vars (string, subst_getenv, NULL);
|
||||
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue