Use getcwd() instead of get_current_dir_name().

This commit is contained in:
Guus Sliepen 2016-04-14 17:29:25 +02:00
parent b5b04910b9
commit 46ebfbb6eb
3 changed files with 3 additions and 37 deletions

View file

@ -199,7 +199,7 @@ AC_CHECK_TYPES([socklen_t, struct ether_header, struct arphdr, struct ether_arp,
dnl Checks for library functions. dnl Checks for library functions.
AC_TYPE_SIGNAL AC_TYPE_SIGNAL
AC_CHECK_FUNCS([asprintf daemon fchmod flock ftime fork get_current_dir_name gettimeofday mlockall putenv random recvmmsg select strdup strsignal nanosleep unsetenv vsyslog devname fdevname], AC_CHECK_FUNCS([asprintf daemon fchmod flock ftime fork gettimeofday mlockall putenv random recvmmsg select strdup strsignal nanosleep unsetenv vsyslog devname fdevname],
[], [], [#include "$srcdir/src/have.h"] [], [], [#include "$srcdir/src/have.h"]
) )

View file

@ -86,40 +86,6 @@ int daemon(int nochdir, int noclose) {
} }
#endif #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 #ifndef HAVE_ASPRINTF
int asprintf(char **buf, const char *fmt, ...) { int asprintf(char **buf, const char *fmt, ...) {
int result; int result;

View file

@ -330,7 +330,7 @@ static void disable_old_keys(const char *filename, const char *what) {
static FILE *ask_and_open(const char *filename, const char *what, const char *mode, bool ask, mode_t perms) { static FILE *ask_and_open(const char *filename, const char *what, const char *mode, bool ask, mode_t perms) {
FILE *r; FILE *r;
char *directory; char directory[PATH_MAX] = ".";
char buf[PATH_MAX]; char buf[PATH_MAX];
char buf2[PATH_MAX]; char buf2[PATH_MAX];
@ -358,7 +358,7 @@ static FILE *ask_and_open(const char *filename, const char *what, const char *mo
if(filename[0] != '/') { if(filename[0] != '/') {
#endif #endif
/* The directory is a relative path or a filename. */ /* The directory is a relative path or a filename. */
directory = get_current_dir_name(); getcwd(directory, sizeof directory);
snprintf(buf2, sizeof buf2, "%s" SLASH "%s", directory, filename); snprintf(buf2, sizeof buf2, "%s" SLASH "%s", directory, filename);
filename = buf2; filename = buf2;
} }