summary refs log tree commit diff
path: root/stdlib/canonicalize.c
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>1998-04-14 16:51:08 +0000
committerUlrich Drepper <drepper@redhat.com>1998-04-14 16:51:08 +0000
commit310b3460e0740903996b838e9f9f5842c579cb0f (patch)
tree990ca922d3253d536fb71f3f70ac90467e5dc75e /stdlib/canonicalize.c
parentbbdc8261f84c22c8c82cc51fa84c70efb1b7ab99 (diff)
downloadglibc-310b3460e0740903996b838e9f9f5842c579cb0f.tar.gz
glibc-310b3460e0740903996b838e9f9f5842c579cb0f.tar.xz
glibc-310b3460e0740903996b838e9f9f5842c579cb0f.zip
Update.
1998-04-14 16:34  Ulrich Drepper  <drepper@cygnus.com>

	* test-skeleton.c: Provide hook for initializing code before the fork.
	* rt/tst-aio.c: Use PREPARE hook to make suer temp files are always
	removed.

	* libio/fcloseall.c (__fcloseall): Return return value of _IO_cleanup.
	* libio/genops.c (_IO_cleanup): Return return value of _IO_flush_all.
	* libio/libioP.h: Adopt _IO_cleanup prototype.

	* stdlib/Makefile (tests): Add test-canon2.
	* stdlib/test-canon2.c: New file.
	* stdlib/canonicalize.c (canonicalize): Allow RESOLVED parameter to
	be NULL.  Use __lxstat, not __lstat.  Correctly recognize long
	symlink sequences.
	(__realpath): Make real function which checks RESOLVED parameter for
	not being NULL.

1998-04-14  Ulrich Drepper  <drepper@cygnus.com>

	* catgets/open_catalog.c (__open_catalog): Fix problems with
	reading non-files.  Always close file.
	Reported by Cristian Gafton <gafton@redhat.com>.

	* elf/dl-minimal.c (__strtol_internal): Prevent overflow warnings.

1998-04-14 13:28  Ulrich Drepper  <drepper@cygnus.com>

	* libc.map: Add various low-level I/O functions.

1998-04-14 10:35  Ulrich Drepper  <drepper@cygnus.com>

	* string/Makefile (routines): Remove strerror_r.
	* string/strerror_r.c: Removed.
	* string/strerror.c: Call __strerror_r for doing the real work.
	* sysdeps/generic/_strerror.c: Rename function to __strerror_r and
	add weak alias strerror_r.
	* sysdeps/mach/_strerror.c: Likewise.
	* assert/assert-perr.c: Use __strerror_r instead of _strerror_internal.
	* elf/dl-error.c (_dl_signal_error): Likewise.
	* elf/dl-profile.c (_dl_start_profile): Likewise.
	* gmon/gmon.c (write_gmon): Likewise.
	* stdio-common/perror.c: Likewise.
	* stdio-common/vfprintf.c: Likewise.

1998-04-10  Mark Kettenis  <kettenis@phys.uva.nl>

	* sysdeps/unix/sysv/linux/Makefile [$(subdir)=inet]
	(sysdep_headers): Add netatalk/at.h.

1998-04-12  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* manual/socket.texi, manual/creature.texi, manual/time.texi:
	Formatting fixes.

1998-04-13  Andreas Schwab  <schwab@issan.informatik.uni-dortmund.de>

	* posix/regex.c: Rename __re_syntax_options back to
	re_syntax_options, aliases do not work with global variables due
	to copy relocations.
	(regex_compile): Use syntax parameter instead of
	re_syntax_options.

1998-04-14  Andreas Jaeger  <aj@arthur.rhein-neckar.de>

	* configure.in: Document that enable-force-install is default.
Diffstat (limited to 'stdlib/canonicalize.c')
-rw-r--r--stdlib/canonicalize.c26
1 files changed, 19 insertions, 7 deletions
diff --git a/stdlib/canonicalize.c b/stdlib/canonicalize.c
index ef7311e90d..faf4422f18 100644
--- a/stdlib/canonicalize.c
+++ b/stdlib/canonicalize.c
@@ -45,10 +45,12 @@ canonicalize (const char *name, char *resolved)
   long int path_max;
   int num_links = 0;
 
-  if (name == NULL || resolved == NULL)
+  if (name == NULL)
     {
       /* As per Single Unix Specification V2 we must return an error if
-	 either parameter is a null pointer.  */
+	 either parameter is a null pointer.  We extend this to allow
+	 the RESOLVED parameter be NULL in case the we are expected to
+	 allocate the room for the return value.  */
       __set_errno (EINVAL);
       return NULL;
     }
@@ -133,7 +135,7 @@ canonicalize (const char *name, char *resolved)
 	  dest = __mempcpy (dest, start, end - start);
 	  *dest = '\0';
 
-	  if (__lstat (rpath, &st) < 0)
+	  if (__lxstat (_STAT_VER, rpath, &st) < 0)
 	    goto error;
 
 	  if (S_ISLNK (st.st_mode))
@@ -174,8 +176,6 @@ canonicalize (const char *name, char *resolved)
 		if (dest > rpath + 1)
 		  while ((--dest)[-1] != '/');
 	    }
-	  else
-	    num_links = 0;
 	}
     }
   if (dest > rpath + 1 && dest[-1] == '/')
@@ -191,8 +191,20 @@ error:
     free (rpath);
   return NULL;
 }
-strong_alias (canonicalize, __realpath)
-weak_alias (canonicalize, realpath)
+
+
+char *
+__realpath (const char *name, char *resolved)
+{
+  if (resolved == NULL)
+    {
+      __set_errno (EINVAL);
+      return NULL;
+    }
+
+  return canonicalize (name, resolved);
+}
+weak_alias (__realpath, realpath)
 
 
 char *