[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: xreadlink
From: |
Bruno Haible |
Subject: |
Re: xreadlink |
Date: |
Thu, 1 Mar 2007 01:48:27 +0100 |
User-agent: |
KMail/1.5.4 |
And here's the accompanying coreutils patch. The call in src/readlink.c
is actually better served with the 1-argument xreadlink(), since memcopying
a small string is typically faster than a memory allocation of 1 KB.
2007-02-28 Bruno Haible <address@hidden>
* bootstrap.conf (gnulib_modules): Replace xreadlink with
xreadlink-with-size. Add xreadlink.
* src/copy.c (copy_internal): Update.
* src/ls.c (is_directory): Update.
* src/stat.c (print_stat): Update.
* src/readlink.c (main): Use the one-argument xreadlink function.
diff --git a/bootstrap.conf b/bootstrap.conf
index c54b035..6709afd 100644
--- a/bootstrap.conf
+++ b/bootstrap.conf
@@ -66,8 +66,8 @@ gnulib_modules="
unicodeio unistd-safer unlink-busy unlinkdir unlocked-io
uptime userspec utimecmp utimens vasprintf verify version-etc-fsf
wcwidth winsz-ioctl winsz-termios xalloc xgetcwd xgethostname
- xmemcoll xnanosleep xreadlink xstrtod xstrtoimax xstrtol
- xstrtold xstrtoumax yesno
+ xmemcoll xnanosleep xreadlink xreadlink-with-size xstrtod xstrtoimax
+ xstrtol xstrtold xstrtoumax yesno
"
# Other locale categories that need message catalogs.
diff --git a/src/copy.c b/src/copy.c
index 99e2ca4..000c248 100644
--- a/src/copy.c
+++ b/src/copy.c
@@ -1720,7 +1720,7 @@ copy_internal (char const *src_name, cha
}
else if (S_ISLNK (src_mode))
{
- char *src_link_val = xreadlink (src_name, src_sb.st_size);
+ char *src_link_val = xreadlink_with_size (src_name, src_sb.st_size);
if (src_link_val == NULL)
{
error (0, errno, _("cannot read symbolic link %s"), quote (src_name));
@@ -1740,7 +1740,8 @@ copy_internal (char const *src_name, cha
FIXME: This behavior isn't documented, and seems wrong
in some cases, e.g., if the destination symlink has the
wrong ownership, permissions, or time stamps. */
- char *dest_link_val = xreadlink (dst_name, dst_sb.st_size);
+ char *dest_link_val =
+ xreadlink_with_size (dst_name, dst_sb.st_size);
if (STREQ (dest_link_val, src_link_val))
same_link = true;
free (dest_link_val);
diff --git a/src/ls.c b/src/ls.c
index 364ea91..3d48900 100644
--- a/src/ls.c
+++ b/src/ls.c
@@ -2798,7 +2798,7 @@ is_directory (const struct fileinfo *f)
static void
get_link_name (char const *filename, struct fileinfo *f, bool command_line_arg)
{
- f->linkname = xreadlink (filename, f->stat.st_size);
+ f->linkname = xreadlink_with_size (filename, f->stat.st_size);
if (f->linkname == NULL)
file_failure (command_line_arg, _("cannot read symbolic link %s"),
filename);
diff --git a/src/readlink.c b/src/readlink.c
index 800d235..121c7ff 100644
--- a/src/readlink.c
+++ b/src/readlink.c
@@ -1,5 +1,5 @@
/* readlink -- display value of a symbolic link.
- Copyright (C) 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2003, 2004, 2005, 2006, 2007 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
@@ -159,7 +159,7 @@ main (int argc, char **argv)
value = (can_mode != -1
? canonicalize_filename_mode (fname, can_mode)
- : xreadlink (fname, 1024));
+ : xreadlink (fname));
if (value)
{
printf ("%s%s", value, (no_newline ? "" : "\n"));
diff --git a/src/stat.c b/src/stat.c
index 315fe0c..ca84236 100644
--- a/src/stat.c
+++ b/src/stat.c
@@ -1,5 +1,5 @@
/* stat.c -- display file or file system status
- Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation.
+ Copyright (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007 Free Software
Foundation.
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
@@ -497,7 +497,7 @@ print_stat (char *pformat, size_t prefix
out_string (pformat, prefix_len, quote (filename));
if (S_ISLNK (statbuf->st_mode))
{
- char *linkname = xreadlink (filename, statbuf->st_size);
+ char *linkname = xreadlink_with_size (filename, statbuf->st_size);
if (linkname == NULL)
{
error (0, errno, _("cannot read symbolic link %s"),