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
|
cat >>confdefs.h <<_ACEOF
|
||||||
#define HAVE_GETPROGNAME 1
|
#define HAVE_GETPROGNAME 1
|
||||||
_ACEOF
|
_ACEOF
|
||||||
for ac_func in setprogname
|
|
||||||
|
for ac_func in setprogname
|
||||||
do :
|
do :
|
||||||
ac_fn_c_check_func "$LINENO" "setprogname" "ac_cv_func_setprogname"
|
ac_fn_c_check_func "$LINENO" "setprogname" "ac_cv_func_setprogname"
|
||||||
if test "x$ac_cv_func_setprogname" = xyes; then :
|
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
|
#define HAVE_SETPROGNAME 1
|
||||||
_ACEOF
|
_ACEOF
|
||||||
|
|
||||||
|
else
|
||||||
|
|
||||||
|
for _sym in sudo_setprogname; do
|
||||||
|
COMPAT_EXP="${COMPAT_EXP}${_sym}
|
||||||
|
"
|
||||||
|
done
|
||||||
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
else
|
else
|
||||||
|
|
||||||
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __progname" >&5
|
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for __progname" >&5
|
||||||
@@ -22982,6 +22991,12 @@ $as_echo "$sudo_cv___progname" >&6; }
|
|||||||
done
|
done
|
||||||
|
|
||||||
|
|
||||||
|
for _sym in sudo_setprogname; do
|
||||||
|
COMPAT_EXP="${COMPAT_EXP}${_sym}
|
||||||
|
"
|
||||||
|
done
|
||||||
|
|
||||||
|
|
||||||
fi
|
fi
|
||||||
done
|
done
|
||||||
|
|
||||||
|
@@ -3309,9 +3309,11 @@ esac
|
|||||||
LIBS="$OLIBS"
|
LIBS="$OLIBS"
|
||||||
|
|
||||||
dnl
|
dnl
|
||||||
dnl Check for getprogname() or __progname
|
dnl Check for getprogname()/setprogname() or __progname
|
||||||
dnl
|
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_MSG_CHECKING([for __progname])
|
||||||
AC_CACHE_VAL(sudo_cv___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])])
|
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
|
fi
|
||||||
AC_MSG_RESULT($sudo_cv___progname)
|
AC_MSG_RESULT($sudo_cv___progname)
|
||||||
SUDO_APPEND_COMPAT_EXP(sudo_getprogname)
|
SUDO_APPEND_COMPAT_EXP(sudo_getprogname)
|
||||||
|
SUDO_APPEND_COMPAT_EXP(sudo_setprogname)
|
||||||
])
|
])
|
||||||
dnl
|
dnl
|
||||||
dnl Check for __func__ or __FUNCTION__
|
dnl Check for __func__ or __FUNCTION__
|
||||||
|
@@ -575,6 +575,11 @@ sudo_dso_public const char *sudo_getprogname(void);
|
|||||||
# undef getprogname
|
# undef getprogname
|
||||||
# define getprogname() sudo_getprogname()
|
# define getprogname() sudo_getprogname()
|
||||||
#endif /* HAVE_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
|
#ifndef HAVE_REALLOCARRAY
|
||||||
sudo_dso_public void *sudo_reallocarray(void *ptr, size_t nmemb, size_t size);
|
sudo_dso_public void *sudo_reallocarray(void *ptr, size_t nmemb, size_t size);
|
||||||
# undef reallocarray
|
# undef reallocarray
|
||||||
|
@@ -31,10 +31,21 @@
|
|||||||
|
|
||||||
#ifdef HAVE_GETPROGNAME
|
#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
|
void
|
||||||
initprogname2(const char *name, const char * const * allowed)
|
initprogname2(const char *name, const char * const * allowed)
|
||||||
{
|
{
|
||||||
# ifdef HAVE_SETPROGNAME
|
|
||||||
const char *progname;
|
const char *progname;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
@@ -61,7 +72,6 @@ initprogname2(const char *name, const char * const * allowed)
|
|||||||
/* Update internal progname if needed. */
|
/* Update internal progname if needed. */
|
||||||
if (name != progname)
|
if (name != progname)
|
||||||
setprogname(name);
|
setprogname(name);
|
||||||
# endif
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -109,6 +119,13 @@ sudo_getprogname(void)
|
|||||||
{
|
{
|
||||||
return progname;
|
return progname;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
sudo_setprogname(const char *name)
|
||||||
|
{
|
||||||
|
const char *base = strrchr(name, '/');
|
||||||
|
progname = base ? base : name;
|
||||||
|
}
|
||||||
#endif /* !HAVE_GETPROGNAME */
|
#endif /* !HAVE_GETPROGNAME */
|
||||||
|
|
||||||
void
|
void
|
||||||
|
Reference in New Issue
Block a user