--- toast 2005/10/22 06:46:29 1.422 +++ toast 2005/10/23 00:16:02 1.423 @@ -2767,10 +2767,10 @@ } else { - if(m|^/| && !m!^(\Q$srcdir\E|\Q$rootdir\E)($|/)!) + if(m|^/| && !m!^(\Q$srcdir\E|\Q$rootdir\E)($|/)! && + (s!^\Q$armdir\E($|/)!$1! || !m!^/(dev|proc|tmp)($|/)!)) { $rewritten = 1; - s!^\Q$armdir\E($|/)!$1!; my($dir, $elem) = ""; for $component (split(/\//, $_)) { @@ -2948,7 +2948,8 @@ static int startswith(const char *s, const char *prefix) { - int result = strncmp(s, prefix, strlen(prefix)) == 0; + int len = strlen(prefix); + int result = strncmp(s, prefix, len) == 0 && (s[len] == 0 || s[len] == '/'); /* debug("startswith(%s, %s) = %d", s, prefix, result); */ return result; } @@ -2988,6 +2989,21 @@ pathname += strlen(armdir); debug("stripping armdir: %s", pathname); } + else if(startswith(pathname, "/dev")) + { + debug("pathname in /dev: %s", pathname); + return 0; + } + else if(startswith(pathname, "/proc")) + { + debug("pathname in /proc: %s", pathname); + return 0; + } + else if(startswith(pathname, "/tmp")) + { + debug("pathname in /tmp: %s", pathname); + return 0; + } if(BUFSIZE < strlen(rootdir) + strlen(pathname) + 1) { @@ -3830,12 +3846,7 @@ ); } -sub rootlinks() -{ - my(@result) = stdlinks; - push(@result, $_, "/$_") foreach (qw[dev proc tmp]); - @result; -} +sub rootlinks() { stdlinks } sub mkrootdir($$) { @@ -7394,7 +7405,6 @@ Known bugs: - - badness likely if storedir/armdir contains .../{dev,proc,tmp}/... - "toast arm udev" causes assertion failure - toast add misguesses device-mapper name/version from URL - toast add misguesses [ foo-1.0-src.tar.gz foo-1.0-src.diff.gz ]