guix-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH 07/15] build: syscalls: Add pivot-root.


From: Ludovic Courtès
Subject: Re: [PATCH 07/15] build: syscalls: Add pivot-root.
Date: Tue, 07 Jul 2015 15:35:14 +0200
User-agent: Gnus/5.13 (Gnus v5.13) Emacs/24.5 (gnu/linux)

David Thompson <address@hidden> skribis:

> From: David Thompson <address@hidden>
>
> * guix/build/syscalls.scm (pivot-root): New procedure.
> * tests/syscalls.scm: Test it.

[...]

> +(test-assert "pivot-root"
> +  (match (pipe)
> +    ((in . out)
> +     (match (clone (logior CLONE_NEWUSER CLONE_NEWNS))
> +       (0
> +        (close in)
> +        (call-with-temporary-directory
> +         (lambda (root)
> +           (let ((put-old (string-append root "/real-root")))
> +             (mount "none" root "tmpfs")
> +             (mkdir put-old)
> +             (call-with-output-file (string-append root "/test")
> +               (lambda (port)
> +                 (display "testing\n" port)))
> +             (pivot-root root put-old)
> +             ;; The test file should now be located inside the root 
> directory.
> +             (write (file-exists "/test") out)
> +             (close out))))
> +        (primitive-exit 0))
> +       (pid
> +        (close out)
> +        (read in))))))

Shouldn’t it be:

  (file-exists? (string-append put-old "/test"))

To be on the safe side, the last line should probably be:

  (eq? #t (read in))

Otherwise a return value of *unspecified* works as well.

Also, ‘waidpid’:

  (pid
    (close out)
    (let ((result (read in)))
      (close in)
      (and (zero? (status:exit-val (waitpid pid)))
           (eq? #t result))))

OK with these changes.

Ludo’.



reply via email to

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