Hello Sir,

Thomas Lord <[EMAIL PROTECTED]> writes:

> Ok, yr just f'ing around now, right?

(Looks like the communication channel discarded a few bytes.)

> I mean, you do understand that the paths in question *don't exist* at the
> point in time where canonicalization is desired, right?  And therefore
> the functions you mention can not possibly do a Right Thing.

Oh right.  Indeed, I was a bit sloppy, sorry about that.

Anyway, I guess you'd agree that `is_non_upwards_relative_path ()' could
also be fixed quite trivially (let alone symlinks first).  Roughly (in
Scheme):

  (define (canonicalize-path path)
    (let loop ((path (string-split path #\/))
               (result '()))
      (if (null? path)
          (fold (lambda (comp res)
                  (if (string=? res "")
                      comp
                      (string-append res "/" comp)))
                ""
                (reverse! result))
          (loop (cdr path)
                (let ((component (car path)))
                  (cond ((string=? component "..")
                         (if (null? result)
                             (error "breaking out of tree root" path)
                             (cdr result)))
                        ((string=? component ".")
                         result)
                        (else (cons component result))))))))

I admit that implementing it in C would be a bit harder, though not
unfeasible.

IMO, that's typically the kind of functionality we'd expect from the C
library instead of having to roll our own every time...

Thanks,
Ludovic.


_______________________________________________
Gnu-arch-users mailing list
[email protected]
http://lists.gnu.org/mailman/listinfo/gnu-arch-users

GNU arch home page:
http://savannah.gnu.org/projects/gnu-arch/

Reply via email to