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;
}