From acd018074972f9c13ffecffb618f799d914bbe97 Mon Sep 17 00:00:00 2001 From: Guus Sliepen Date: Sat, 7 Oct 2017 16:54:52 +0200 Subject: [PATCH 1/1] Use getcwd() instead of get_current_dir_name(). --- configure.ac | 2 +- src/conf.c | 5 ++--- src/dropin.c | 34 ---------------------------------- 3 files changed, 3 insertions(+), 38 deletions(-) diff --git a/configure.ac b/configure.ac index f25ec2b..ce2c125 100644 --- a/configure.ac +++ b/configure.ac @@ -207,7 +207,7 @@ AC_CHECK_TYPES([socklen_t, struct ether_header, struct arphdr, struct ether_arp, dnl Checks for library functions. AC_TYPE_SIGNAL -AC_CHECK_FUNCS([asprintf daemon fchmod flock fork get_current_dir_name gettimeofday mlockall pselect putenv strsignal system unsetenv usleep vsyslog devname fdevname], +AC_CHECK_FUNCS([asprintf daemon fchmod flock fork gettimeofday mlockall pselect putenv strsignal system unsetenv usleep vsyslog devname fdevname], [], [], [#include "$srcdir/src/have.h"] ) diff --git a/src/conf.c b/src/conf.c index 2e13e45..1c250d7 100644 --- a/src/conf.c +++ b/src/conf.c @@ -485,7 +485,7 @@ static void disable_old_keys(const char *filename) { FILE *ask_and_open(const char *filename, const char *what) { FILE *r; - char *directory; + char directory[PATH_MAX]; char line[PATH_MAX]; char abspath[PATH_MAX]; const char *fn; @@ -521,9 +521,8 @@ FILE *ask_and_open(const char *filename, const char *what) { if(fn[0] != '/') { #endif /* The directory is a relative path or a filename. */ - directory = get_current_dir_name(); + getcwd(directory, sizeof directory); snprintf(abspath, sizeof abspath, "%s/%s", directory, fn); - free(directory); fn = abspath; } diff --git a/src/dropin.c b/src/dropin.c index a99c828..49d5662 100644 --- a/src/dropin.c +++ b/src/dropin.c @@ -86,40 +86,6 @@ int daemon(int nochdir, int noclose) { } #endif -#ifndef HAVE_GET_CURRENT_DIR_NAME -/* - Replacement for the GNU get_current_dir_name function: - - get_current_dir_name will malloc(3) an array big enough to hold the - current directory name. If the environment variable PWD is set, and - its value is correct, then that value will be returned. -*/ -char *get_current_dir_name(void) { - size_t size; - char *buf; - char *r; - - /* Start with 100 bytes. If this turns out to be insufficient to - contain the working directory, double the size. */ - size = 100; - buf = xmalloc(size); - - errno = 0; /* Success */ - r = getcwd(buf, size); - - /* getcwd returns NULL and sets errno to ERANGE if the bufferspace - is insufficient to contain the entire working directory. */ - while(r == NULL && errno == ERANGE) { - free(buf); - size <<= 1; /* double the size */ - buf = xmalloc(size); - r = getcwd(buf, size); - } - - return buf; -} -#endif - #ifndef HAVE_ASPRINTF int asprintf(char **buf, const char *fmt, ...) { int result; -- 2.25.1