Charles Davis <cda...@mymail.mines.edu> writes: > +#if defined(HAVE_GETATTRLIST) && defined(ATTR_VOL_CAPABILITIES) && \ > + defined(VOL_CAPABILITIES_FORMAT) && defined(VOL_CAP_FMT_CASE_SENSITIVE) > + char *mntpoint = NULL; > + struct attrlist attr; > + struct vol_caps caps; > + struct get_fsid get_fsid; > + struct fs_cache *entry; > + > + /* First get the FS ID of the volume */ > + attr.bitmapcount = ATTR_BIT_MAP_COUNT; > + attr.reserved = 0; > + attr.commonattr = ATTR_CMN_DEVID|ATTR_CMN_FSID; > + attr.volattr = attr.dirattr = attr.fileattr = attr.forkattr = 0; > + get_fsid.size = 0; > + if (getattrlist( dir, &attr, &get_fsid, sizeof(get_fsid), 0 ) != 0 || > + get_fsid.size != sizeof(get_fsid)) > + return TRUE; > + /* Try to look it up in the cache */ > + entry = look_up_fs_cache( get_fsid.dev ); > + if (entry && !memcmp( &entry->fsid, &get_fsid.fsid, sizeof(fsid_t) )) > + /* Cache lookup succeeded */ > + return entry->case_sensitive; > + /* Cache is stale at this point, we have to update it */ > + > + mntpoint = get_device_mount_point( get_fsid.dev ); > + /* Now look up the case-sensitivity */ > + attr.commonattr = 0; > + attr.volattr = ATTR_VOL_INFO|ATTR_VOL_CAPABILITIES; > + if (getattrlist( mntpoint, &attr, &caps, sizeof(caps), 0 ) == 0) > + {
If that can fail then you need to structure this differently, otherwise you'll end up looking up the mount point on every call. Also please put that chunk in a separate function, it's totally different from the statfs code path. > +#elif defined(__linux__) > + /* Only assume CIOPFS is case insensitive. */ > + /* Normally, we'd have to parse the mtab to find out exactly what > + * kind of FUSE FS this is. But, someone on wine-devel suggested > + * a shortcut. We'll stat a special file in the directory. If it's > + * there, we'll assume it's a CIOPFS, else not. > + * This will break if somebody puts a file named ".ciopfs" in a non- > + * CIOPFS directory. > + */ > + cifile = RtlAllocateHeap( GetProcessHeap(), 0, strlen( dir > )+sizeof("/.ciopfs") ); > + if (!cifile) return TRUE; > + strcpy( cifile, dir ); > + strcat( cifile, "/.ciopfs" ); > + if (stat( cifile, &st ) == 0) > + { > + RtlFreeHeap( GetProcessHeap(), 0, cifile ); > + return FALSE; > + } You lost the statfs here. > @@ -1872,7 +2097,7 @@ static NTSTATUS find_file_in_dir( char *unix_name, int > pos, const WCHAR *name, i > { > ret = ntdll_umbstowcs( 0, de[1].d_name, > strlen(de[1].d_name), > buffer, MAX_DIR_ENTRY_LEN ); > - if (ret == length && !memicmpW( buffer, name, > length)) > + if (ret == length && !memicmpW( buffer, name, length > )) Please avoid gratuitous whitespace changes. -- Alexandre Julliard julli...@winehq.org