bug#70586: cp walks dir differently than rm and is hitting "File name too long" where this could be avoided

Collin Funk <[email protected]>
Newsgroups gmane.comp.gnu.core-utils.bugs
Message-ID <[email protected]>
Paul Eggert <[email protected]> writes:

>> is there a reason why savewd and
>> mkancesdirs don't use openat + mkdirat instead of using chdir in a child
>> process? Do these functions just predate the *at interfaces
>
> Yes, precisely. Some day it will be time to give up on those old
> platforms, I suppose. We haven't done that yet because there hasn't
> been motivation to get rid of them, or rewrite them.

I see. With this trivial test it seems that chdir is faster than open on
GNU/Linux:

    $ cat main.c 
    #define _GNU_SOURCE 1
    #include <fcntl.h>
    #include <unistd.h>
    #include <stdlib.h>
    int
    main (void)
    {
      for (int i = 0; i < 100000; ++i)
        {
    #ifdef DO_OPEN
          int fd = open ("/", O_DIRECTORY | O_PATH);
          if (fd < 0 || close (fd) < 0)
            abort ();
    #else
          if (chdir ("/") < 0)
            abort ();
    #endif
        }
      return 0;
    }
    $ gcc main.c
    $ perf stat --repeat 10 ./a.out 2>&1 | grep -F 'seconds time'
    $ perf stat --repeat 10 ./a.out 2>&1 | grep -F 'seconds time'
           0.08036 +- 0.00194 seconds time elapsed  ( +-  2.41% )
    $ gcc -DDO_OPEN main.c
    $ perf stat --repeat 10 ./a.out 2>&1 | grep -F 'seconds time'
           0.13929 +- 0.00102 seconds time elapsed  ( +-  0.73% )

Collin
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.