Review of SRFI 170 through 3.2 I/O hga@xxxxxx 22 Apr 2020 17:13 UTC
Re: Review of SRFI 170 through 3.2 I/O John Cowan 22 Apr 2020 20:42 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 22 Apr 2020 20:53 UTC
Re: Review of SRFI 170 through 3.2 I/O John Cowan 22 Apr 2020 21:29 UTC
Re: Review of SRFI 170 through 3.2 I/O hga@xxxxxx 22 Apr 2020 23:57 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 22 Apr 2020 21:36 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 22 Apr 2020 21:42 UTC
Re: Review of SRFI 170 through 3.2 I/O John Cowan 23 Apr 2020 03:37 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 23 Apr 2020 07:02 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 23 Apr 2020 07:05 UTC
Re: Review of SRFI 170 through 3.2 I/O Göran Weinholt 23 Apr 2020 10:53 UTC
Re: Review of SRFI 170 through 3.2 I/O Marc Feeley 23 Apr 2020 11:09 UTC
Per-thread umask Lassi Kortela 23 Apr 2020 11:30 UTC
Re: Per-thread umask Marc Feeley 23 Apr 2020 11:43 UTC
Re: Per-thread umask Lassi Kortela 23 Apr 2020 11:47 UTC
Re: Per-thread umask Marc Feeley 23 Apr 2020 11:59 UTC
Re: Per-thread umask John Cowan 23 Apr 2020 15:03 UTC
Re: Per-thread umask Marc Feeley 23 Apr 2020 15:20 UTC
Re: Per-thread umask Lassi Kortela 23 Apr 2020 16:02 UTC
Re: Per-thread umask John Cowan 23 Apr 2020 16:03 UTC
Re: Review of SRFI 170 through 3.2 I/O Lassi Kortela 23 Apr 2020 11:14 UTC
current directory and openat() et al Lassi Kortela 23 Apr 2020 11:27 UTC
Re: current directory and openat() et al Marc Feeley 23 Apr 2020 13:56 UTC
Re: Review of SRFI 170 through 3.2 I/O Sebastien Marie 23 Apr 2020 13:32 UTC
Definition of working directory Lassi Kortela 23 Apr 2020 13:51 UTC
Re: Definition of working directory Marc Feeley 23 Apr 2020 14:06 UTC
Re: Definition of working directory Sebastien Marie 23 Apr 2020 15:31 UTC
Re: Review of SRFI 170 through 3.2 I/O Marc Nieper-Wißkirchen 23 Apr 2020 15:24 UTC
Separate high-level and low-level APIs Lassi Kortela 23 Apr 2020 15:38 UTC
Re: Separate high-level and low-level APIs Marc Nieper-Wißkirchen 23 Apr 2020 15:43 UTC
Re: Separate high-level and low-level APIs Lassi Kortela 23 Apr 2020 15:48 UTC
Re: Separate high-level and low-level APIs hga@xxxxxx 23 Apr 2020 16:19 UTC
Re: Separate high-level and low-level APIs Lassi Kortela 23 Apr 2020 16:42 UTC
Re: Review of SRFI 170 through 3.2 I/O hga@xxxxxx 23 Apr 2020 15:40 UTC
Re: Review of SRFI 170 through 3.2 I/O Marc Feeley 23 Apr 2020 11:33 UTC
Normalizing the current directory Lassi Kortela 23 Apr 2020 11:38 UTC
Re: Normalizing the current directory Marc Feeley 23 Apr 2020 11:55 UTC
Re: Normalizing the current directory Lassi Kortela 23 Apr 2020 12:09 UTC
Using paths that are searchable but not completely readable hga@xxxxxx 23 Apr 2020 12:29 UTC
Per-thread working directory and umask proposal John Cowan 23 Apr 2020 14:13 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 23 Apr 2020 14:16 UTC
Re: Per-thread working directory and umask proposal John Cowan 23 Apr 2020 16:07 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 23 Apr 2020 16:13 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 23 Apr 2020 16:25 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 23 Apr 2020 17:26 UTC
Re: Per-thread working directory and umask proposal John Cowan 23 Apr 2020 18:38 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 23 Apr 2020 17:55 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 23 Apr 2020 18:55 UTC
Re: Per-thread working directory and umask proposal John Cowan 23 Apr 2020 20:12 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 23 Apr 2020 22:17 UTC
Re: Per-thread working directory and umask proposal Lassi Kortela 24 Apr 2020 08:43 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 24 Apr 2020 11:27 UTC
Re: Per-thread working directory and umask proposal Lassi Kortela 24 Apr 2020 11:37 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 24 Apr 2020 12:22 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 24 Apr 2020 12:28 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 26 Apr 2020 09:19 UTC
Re: Per-thread working directory and umask proposal John Cowan 27 Apr 2020 22:45 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 27 Apr 2020 23:42 UTC
Re: Per-thread working directory and umask proposal John Cowan 28 Apr 2020 00:41 UTC
Re: Per-thread working directory and umask proposal Shiro Kawai 28 Apr 2020 00:56 UTC
os-working-directory Lassi Kortela 29 Apr 2020 09:23 UTC
Re: os-working-directory Duy Nguyen 29 Apr 2020 09:28 UTC
current-umask Lassi Kortela 29 Apr 2020 09:43 UTC
Windows Lassi Kortela 29 Apr 2020 09:47 UTC
Re: Windows Lassi Kortela 29 Apr 2020 09:49 UTC
Re: Windows John Cowan 29 Apr 2020 14:53 UTC
Re: current-umask hga@xxxxxx 29 Apr 2020 13:14 UTC
Re: current-umask Lassi Kortela 29 Apr 2020 13:25 UTC
Re: current-umask Marc Feeley 29 Apr 2020 13:31 UTC
Re: current-umask Marc Feeley 29 Apr 2020 13:45 UTC
Re: current-umask Lassi Kortela 29 Apr 2020 14:12 UTC
Re: current-umask hga@xxxxxx 29 Apr 2020 16:20 UTC
Re: current-umask Lassi Kortela 29 Apr 2020 16:44 UTC
Re: current-umask John Cowan 30 Apr 2020 04:02 UTC
Re: os-working-directory John Cowan 30 Apr 2020 02:49 UTC
Re: os-working-directory Lassi Kortela 30 Apr 2020 06:12 UTC
Re: os-working-directory Sebastien Marie 30 Apr 2020 07:19 UTC
Re: os-working-directory Sebastien Marie 30 Apr 2020 07:53 UTC
Should the SRFI mandate current-directory per thread? Lassi Kortela 30 Apr 2020 12:14 UTC
Re: Should the SRFI mandate current-directory per thread? Sebastien Marie 30 Apr 2020 17:00 UTC
Re: Per-thread working directory and umask proposal hga@xxxxxx 28 Apr 2020 01:03 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 28 Apr 2020 01:41 UTC
Re: Per-thread working directory and umask proposal Marc Nieper-Wißkirchen 30 Apr 2020 07:11 UTC
Re: Per-thread working directory and umask proposal Marc Feeley 30 Apr 2020 11:33 UTC

Re: current directory and openat() et al Marc Feeley 23 Apr 2020 13:56 UTC

> On Apr 23, 2020, at 7:27 AM, Lassi Kortela <xxxxxx@lassi.io> wrote:
>
>>> I suspect that if the current working directory is specified in terms
>>> of parameter-like semantics then it should be possible to make use of
>>> openat() etc behind the scenes
>> Gambit does some of this; I suggest grepping the source code
>
> All of the calls are in os_files.c:
>
> $ grep -nF 'at (' lib/os_files.c
> 542:          new_dir = openat (dir, start, O_DIRECTORY);
> 587:      fd = openat (dir, path2, flags, mode);
> 621:      result = mkfifoat (dir, path2, mode);
> 655:      result = mkdirat (dir, path2, mode);
> 686:      result = unlinkat (dir, path2, 0);
> 724:          result = linkat (olddir, oldpath2, newdir, newpath2, 0);
> 760:      result = symlinkat (target, dir, path2);
> 797:      result = readlinkat (dir, path2, buf, bufsize);
> 893:                result = linkat (olddir, oldpath2, newdir, newpath2, 0);
> 900:                    result = unlinkat (olddir, oldpath2, 0);
> 911:                result = renameat (olddir, oldpath2, newdir, newpath2);
> 962:      int fd = openat (dir, path2, O_DIRECTORY);
> 1001:      result = fstatat (dir, path2, statbuf, follow ? 0 : AT_SYMLINK_NOFOLLOW);

Interestingly the use of the “at” system calls was added to Gambit to handle filenames that are longer than PATH_MAX.  It allows accessing files that are very deeply nested.  It uses openat() on successive chunks of the path <= PATH_MAX to reach deeply nested files.

In the following example Gambit handles a path of length 10009 on linux (well beyond the typical 1024 character limit) whereas most other Scheme implementations give an error (I tested Chicken, Chez and Guile):

% cat long.scm
(define deep-dir
  (string-append "/tmp"
                 (apply string-append
                        (vector->list (make-vector 5000 "/x")))))

(define path (string-append deep-dir "/file"))

(write (list (string-length path) (read (open-input-file path))))
(newline)
% gsi long.scm
(10009 hello!)
% csi -quiet long.scm

Error: (open-input-file) cannot open file - File name too long: "/tmp/.../x/x/x/x/file"
...
% scheme --quiet --script long.scm
Exception in open-input-file: failed for /tmp/.../x/x/x/x/file: file name too long
% guile long.scm
...
ERROR: In procedure open-file:
ERROR: In procedure open-file: File name too long: "/tmp/.../x/x/x/x/file"

Marc