Richard W.M. Jones wrote:
On Mon, Oct 26, 2009 at 11:03:04AM +0000, Matthew Booth wrote:
On 26/10/09 09:20, Richard W.M. Jones wrote:
+char * +do_case_sensitive_path (const char *path) +{ + char ret[PATH_MAX+1] = "/";
Is PATH_MAX on Windows <= POSIX PATH_MAX? Does ntfs_3g honour this? Seems like a grey area. It would be safer to realloc this buffer as necessary. You also wouldn't need the strdup() at the end.
PATH_MAX is a Linux thing. NTFS 3g couldn't export something through the Linux VFS unless it honoured this.
+ size_t next = 1; + + /* MUST chdir ("/") before leaving this function. */ + if (chdir (sysroot) == -1) { + reply_with_perror ("%s", sysroot); + return NULL; + }
I'm not convinced chdir is necessary in this function if you use openat() throughout.
I'm pretty sure I need opendirat to make this work, and that function doesn't seem to exist (checked on Fedora 11).
It's in lib/fts.c: /* file-descriptor-relative opendir. */ /* FIXME: if others need this function, move it into lib/openat.c */ static inline DIR * internal_function opendirat (int fd, char const *dir) { int new_fd = openat (fd, dir, O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK); DIR *dirp; if (new_fd < 0) return NULL; set_cloexec_flag (new_fd, true); dirp = fdopendir (new_fd); if (dirp == NULL) { int saved_errno = errno; close (new_fd); errno = saved_errno; } return dirp; }