bug-gnulib
[Top][All Lists]
Advanced

[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"),





reply via email to

[Prev in Thread] Current Thread [Next in Thread]