mirror of
git://git.gnupg.org/gnupg.git
synced 2025-01-09 12:54:23 +01:00
Refactor new code.
This commit is contained in:
parent
5134fee5b0
commit
53476e5413
@ -1,3 +1,8 @@
|
|||||||
|
2009-08-26 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
|
* stringhelp.c (do_make_filename): Factor some code out to ..
|
||||||
|
(get_pwdir): .. new.
|
||||||
|
|
||||||
2009-08-26 Werner Koch <wk@g10code.com>
|
2009-08-26 Werner Koch <wk@g10code.com>
|
||||||
|
|
||||||
* stringhelp.c [HAVE_PWD_H]: Include pwd.h.
|
* stringhelp.c [HAVE_PWD_H]: Include pwd.h.
|
||||||
|
@ -318,6 +318,38 @@ make_dirname(const char *filepath)
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
static char *
|
||||||
|
get_pwdir (int xmode, const char *name)
|
||||||
|
{
|
||||||
|
char *result = NULL;
|
||||||
|
#ifdef HAVE_PWD_H
|
||||||
|
struct passwd *pwd = NULL;
|
||||||
|
|
||||||
|
if (name)
|
||||||
|
{
|
||||||
|
#ifdef HAVE_GETPWNAM
|
||||||
|
/* Fixme: We should use getpwnam_r if available. */
|
||||||
|
pwd = getpwnam (name);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
#ifdef HAVE_GETPWUID
|
||||||
|
/* Fixme: We should use getpwuid_r if available. */
|
||||||
|
pwd = getpwuid (getuid());
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
if (pwd)
|
||||||
|
{
|
||||||
|
if (xmode)
|
||||||
|
result = jnlib_xstrdup (pwd->pw_dir);
|
||||||
|
else
|
||||||
|
result = jnlib_strdup (pwd->pw_dir);
|
||||||
|
}
|
||||||
|
#endif /*HAVE_PWD_H*/
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
static char *
|
static char *
|
||||||
do_make_filename (int xmode, const char *first_part, va_list arg_ptr)
|
do_make_filename (int xmode, const char *first_part, va_list arg_ptr)
|
||||||
{
|
{
|
||||||
@ -351,37 +383,16 @@ do_make_filename (int xmode, const char *first_part, va_list arg_ptr)
|
|||||||
{
|
{
|
||||||
/* This is the "~/" or "~" case. */
|
/* This is the "~/" or "~" case. */
|
||||||
home = getenv("HOME");
|
home = getenv("HOME");
|
||||||
|
|
||||||
#if defined(HAVE_GETPWUID) && defined(HAVE_PWD_H)
|
|
||||||
if (!home)
|
if (!home)
|
||||||
{
|
home = home_buffer = get_pwdir (xmode, NULL);
|
||||||
struct passwd *pwd;
|
|
||||||
|
|
||||||
pwd = getpwuid (getuid());
|
|
||||||
if (pwd)
|
|
||||||
{
|
|
||||||
if (xmode)
|
|
||||||
home_buffer = home = jnlib_xstrdup (pwd->pw_dir);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
home_buffer = home = jnlib_strdup (pwd->pw_dir);
|
|
||||||
if (!home)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif /* HAVE_GETPWUID && HAVE_PWD_H */
|
|
||||||
|
|
||||||
if (home && *home)
|
if (home && *home)
|
||||||
n += strlen (home);
|
n += strlen (home);
|
||||||
}
|
}
|
||||||
#if defined(HAVE_GETPWNAM) && defined(HAVE_PWD_H)
|
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* This is the "~username/" or "~username" case. */
|
/* This is the "~username/" or "~username" case. */
|
||||||
char *user;
|
char *user;
|
||||||
struct passwd *pwd;
|
|
||||||
|
|
||||||
if (xmode)
|
if (xmode)
|
||||||
user = jnlib_xstrdup (first_part+1);
|
user = jnlib_xstrdup (first_part+1);
|
||||||
else
|
else
|
||||||
@ -394,27 +405,14 @@ do_make_filename (int xmode, const char *first_part, va_list arg_ptr)
|
|||||||
if (p)
|
if (p)
|
||||||
*p = 0;
|
*p = 0;
|
||||||
skip = 1 + strlen (user);
|
skip = 1 + strlen (user);
|
||||||
|
|
||||||
/* Fixme: Use getwpnam_r if available. */
|
home = home_buffer = get_pwdir (xmode, user);
|
||||||
pwd = getpwnam (user);
|
|
||||||
jnlib_free (user);
|
jnlib_free (user);
|
||||||
if (pwd)
|
|
||||||
{
|
|
||||||
if (xmode)
|
|
||||||
home_buffer = home = jnlib_xstrdup (pwd->pw_dir);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
home_buffer = home = jnlib_strdup (pwd->pw_dir);
|
|
||||||
if (!home)
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (home)
|
if (home)
|
||||||
n += strlen (home);
|
n += strlen (home);
|
||||||
else
|
else
|
||||||
skip = 1;
|
skip = 1;
|
||||||
}
|
}
|
||||||
#endif /*HAVE_GETPWNAM && HAVE_PWD_H*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (xmode)
|
if (xmode)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user