1
0
mirror of git://git.sv.gnu.org/coreutils.git synced 2026-04-11 14:44:18 +02:00

Include xreadlink.h first, to catch .h file dependency problems.

This commit is contained in:
Jim Meyering
2004-06-01 13:20:50 +00:00
parent 8aceeea5ff
commit 8a81d09a7f

View File

@@ -1,6 +1,6 @@
/* xreadlink.c -- readlink wrapper to return the link name in malloc'd storage
Copyright (C) 2001, 2003 Free Software Foundation, Inc.
Copyright (C) 2001, 2003, 2004 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
@@ -23,6 +23,8 @@
# include <config.h>
#endif
#include "xreadlink.h"
#include <stdio.h>
#include <errno.h>
#ifndef errno
@@ -44,20 +46,21 @@ extern int errno;
#endif
#include "xalloc.h"
#include "xreadlink.h"
/* Call readlink to get the symbolic link value of FILENAME.
SIZE is a hint as to how long the link is expected to be;
typically it is taken from st_size. It need not be correct.
Return a pointer to that NUL-terminated string in malloc'd storage.
If readlink fails, return NULL (caller may use errno to diagnose).
If malloc fails, or if the link value is longer than SSIZE_MAX :-),
give a diagnostic and exit. */
char *
xreadlink (char const *filename)
xreadlink (char const *filename, size_t size)
{
/* The initial buffer size for the link value. A power of 2
detects arithmetic overflow earlier, but is not required. */
size_t buf_size = 128;
size_t buf_size = size + 1;
while (1)
{
@@ -80,7 +83,7 @@ xreadlink (char const *filename)
free (buffer);
buf_size *= 2;
if (SSIZE_MAX < buf_size || (SIZE_MAX / 2 < SSIZE_MAX && buf_size == 0))
if (! (0 < buf_size && buf_size <= SSIZE_MAX))
xalloc_die ();
}
}