Add setprogname(3) for those without it.
This commit is contained in:
17
configure
vendored
17
configure
vendored
@@ -22930,7 +22930,8 @@ if test "x$ac_cv_func_getprogname" = xyes; then :
|
||||
cat >>confdefs.h <<_ACEOF
|
||||
#define HAVE_GETPROGNAME 1
|
||||
_ACEOF
|
||||
for ac_func in setprogname
|
||||
|
||||
for ac_func in setprogname
|
||||
do :
|
||||
ac_fn_c_check_func "$LINENO" "setprogname" "ac_cv_func_setprogname"
|
||||
if test "x$ac_cv_func_setprogname" = xyes; then :
|
||||
@@ -22938,9 +22939,17 @@ if test "x$ac_cv_func_setprogname" = xyes; then :
|
||||
#define HAVE_SETPROGNAME 1
|
||||
_ACEOF
|
||||
|
||||
else
|
||||
|
||||
for _sym in sudo_setprogname; do
|
||||
COMPAT_EXP="${COMPAT_EXP}${_sym}
|
||||
"
|
||||
done
|
||||
|
||||
fi
|
||||
done
|
||||
|
||||
|
||||
else
|
||||
|
||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __progname" >&5
|
||||
@@ -22982,6 +22991,12 @@ $as_echo "$sudo_cv___progname" >&6; }
|
||||
done
|
||||
|
||||
|
||||
for _sym in sudo_setprogname; do
|
||||
COMPAT_EXP="${COMPAT_EXP}${_sym}
|
||||
"
|
||||
done
|
||||
|
||||
|
||||
fi
|
||||
done
|
||||
|
||||
|
@@ -3309,9 +3309,11 @@ esac
|
||||
LIBS="$OLIBS"
|
||||
|
||||
dnl
|
||||
dnl Check for getprogname() or __progname
|
||||
dnl Check for getprogname()/setprogname() or __progname
|
||||
dnl
|
||||
AC_CHECK_FUNCS([getprogname], [AC_CHECK_FUNCS([setprogname])], [
|
||||
AC_CHECK_FUNCS([getprogname], [
|
||||
AC_CHECK_FUNCS([setprogname], [], [SUDO_APPEND_COMPAT_EXP(sudo_setprogname)])
|
||||
], [
|
||||
AC_MSG_CHECKING([for __progname])
|
||||
AC_CACHE_VAL(sudo_cv___progname, [
|
||||
AC_LINK_IFELSE([AC_LANG_PROGRAM([[]], [[extern char *__progname; if (__progname[0] == '\0') return 1;]])], [sudo_cv___progname=yes], [sudo_cv___progname=no])])
|
||||
@@ -3320,6 +3322,7 @@ AC_CHECK_FUNCS([getprogname], [AC_CHECK_FUNCS([setprogname])], [
|
||||
fi
|
||||
AC_MSG_RESULT($sudo_cv___progname)
|
||||
SUDO_APPEND_COMPAT_EXP(sudo_getprogname)
|
||||
SUDO_APPEND_COMPAT_EXP(sudo_setprogname)
|
||||
])
|
||||
dnl
|
||||
dnl Check for __func__ or __FUNCTION__
|
||||
|
@@ -575,6 +575,11 @@ sudo_dso_public const char *sudo_getprogname(void);
|
||||
# undef getprogname
|
||||
# define getprogname() sudo_getprogname()
|
||||
#endif /* HAVE_GETPROGNAME */
|
||||
#ifndef HAVE_SETPROGNAME
|
||||
sudo_dso_public void sudo_setprogname(const char *name);
|
||||
# undef setprogname
|
||||
# define setprogname(_a) sudo_setprogname(_a)
|
||||
#endif /* HAVE_SETPROGNAME */
|
||||
#ifndef HAVE_REALLOCARRAY
|
||||
sudo_dso_public void *sudo_reallocarray(void *ptr, size_t nmemb, size_t size);
|
||||
# undef reallocarray
|
||||
|
@@ -31,10 +31,21 @@
|
||||
|
||||
#ifdef HAVE_GETPROGNAME
|
||||
|
||||
# ifndef HAVE_SETPROGNAME
|
||||
/* Assume __progname if have getprogname(3) but not setprogname(3). */
|
||||
extern const char *__progname;
|
||||
|
||||
void
|
||||
sudo_setprogname(const char *name)
|
||||
{
|
||||
const char *base = strrchr(name, '/');
|
||||
__progname = base ? base : name;
|
||||
}
|
||||
# endif
|
||||
|
||||
void
|
||||
initprogname2(const char *name, const char * const * allowed)
|
||||
{
|
||||
# ifdef HAVE_SETPROGNAME
|
||||
const char *progname;
|
||||
int i;
|
||||
|
||||
@@ -61,7 +72,6 @@ initprogname2(const char *name, const char * const * allowed)
|
||||
/* Update internal progname if needed. */
|
||||
if (name != progname)
|
||||
setprogname(name);
|
||||
# endif
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -109,6 +119,13 @@ sudo_getprogname(void)
|
||||
{
|
||||
return progname;
|
||||
}
|
||||
|
||||
void
|
||||
sudo_setprogname(const char *name)
|
||||
{
|
||||
const char *base = strrchr(name, '/');
|
||||
progname = base ? base : name;
|
||||
}
|
||||
#endif /* !HAVE_GETPROGNAME */
|
||||
|
||||
void
|
||||
|
Reference in New Issue
Block a user