1
Fork 0
mirror of https://git.savannah.gnu.org/git/guile.git synced 2025-06-18 17:50:29 +02:00

Update Gnulib to v0.1-1157-gb03f418.

This commit is contained in:
Andy Wingo 2017-02-15 21:41:24 +01:00
parent 69ca2bb221
commit 7e641595cd
397 changed files with 1995 additions and 1095 deletions

View file

@ -1,5 +1,5 @@
/* Return the canonical absolute name of a given file.
Copyright (C) 1996-2016 Free Software Foundation, Inc.
Copyright (C) 1996-2017 Free Software Foundation, Inc.
This file is part of the GNU C Library.
This program is free software: you can redistribute it and/or modify
@ -83,7 +83,23 @@
# define DOUBLE_SLASH_IS_DISTINCT_ROOT 0
#endif
/* Define this independently so that stdint.h is not a prerequisite. */
#ifndef SIZE_MAX
# define SIZE_MAX ((size_t) -1)
#endif
#if !FUNC_REALPATH_WORKS || defined _LIBC
static void
alloc_failed (void)
{
#if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__
/* Avoid errno problem without using the malloc or realloc modules; see:
http://lists.gnu.org/archive/html/bug-gnulib/2016-08/msg00025.html */
errno = ENOMEM;
#endif
}
/* Return the canonical absolute name of file NAME. A canonical name
does not contain any ".", ".." components nor any repeated path
separators ('/') or symlinks. All path components must exist. If
@ -135,9 +151,7 @@ __realpath (const char *name, char *resolved)
rpath = malloc (path_max);
if (rpath == NULL)
{
/* It's easier to set errno to ENOMEM than to rely on the
'malloc-posix' gnulib module. */
errno = ENOMEM;
alloc_failed ();
return NULL;
}
}
@ -185,7 +199,6 @@ __realpath (const char *name, char *resolved)
#else
struct stat st;
#endif
int n;
/* Skip sequence of multiple path-separators. */
while (ISSLASH (*start))
@ -238,9 +251,7 @@ __realpath (const char *name, char *resolved)
new_rpath = (char *) realloc (rpath, new_size);
if (new_rpath == NULL)
{
/* It's easier to set errno to ENOMEM than to rely on the
'realloc-posix' gnulib module. */
errno = ENOMEM;
alloc_failed ();
goto error;
}
rpath = new_rpath;
@ -268,6 +279,7 @@ __realpath (const char *name, char *resolved)
{
char *buf;
size_t len;
ssize_t n;
if (++num_links > MAXSYMLINKS)
{
@ -278,7 +290,7 @@ __realpath (const char *name, char *resolved)
buf = malloca (path_max);
if (!buf)
{
errno = ENOMEM;
__set_errno (ENOMEM);
goto error;
}
@ -287,7 +299,7 @@ __realpath (const char *name, char *resolved)
{
int saved_errno = errno;
freea (buf);
errno = saved_errno;
__set_errno (saved_errno);
goto error;
}
buf[n] = '\0';
@ -298,13 +310,14 @@ __realpath (const char *name, char *resolved)
if (!extra_buf)
{
freea (buf);
errno = ENOMEM;
__set_errno (ENOMEM);
goto error;
}
}
len = strlen (end);
if ((long int) (n + len) >= path_max)
/* Check that n + len + 1 doesn't overflow and is <= path_max. */
if (n >= SIZE_MAX - len || n + len >= path_max)
{
freea (buf);
__set_errno (ENAMETOOLONG);
@ -370,7 +383,7 @@ error:
freea (extra_buf);
if (resolved == NULL)
free (rpath);
errno = saved_errno;
__set_errno (saved_errno);
}
return NULL;
}