firstPathComponent = Substring(start, component_end); PRInt32 foundIndex = gVolumeList.IndexOf(nsCAutoString(firstPathComponent));
nsCAutoString flatComponent((Substring(start, component_end))); NS_UnescapeURL(flatComponent); PRInt32 foundIndex = gVolumeList.IndexOf(flatComponent); firstPathComponent = flatComponent;
static PRBool pathBeginsWithVolName(const nsACString& path, nsACString& firstPathComponent){  // Return whether the 1st path component in the given path is equal to the name  // of a mounted volume. Return the 1st path component in any case.  // This needs to be done as quickly as possible, so we cache a list of volume names.  // XXX Register an event handler to detect drives being mounted/unmounted?      static nsCStringArray gVolumeList; // We will leak this - one for the life of the app :-/    // Cache a list of volume names    if (!gVolumeList.Count()) {      OSErr err;      ItemCount volumeIndex = 1;            do {        HFSUniStr255 volName;        FSRef rootDirectory;        err = ::FSGetVolumeInfo(0, volumeIndex, NULL, kFSVolInfoNone, NULL, &volName, &rootDirectory);        if (err == noErr) {          nsCString volNameStr = NS_ConvertUCS2toUTF8(Substring((PRUnichar *)volName.unicode,                                  (PRUnichar *)volName.unicode + volName.length));          gVolumeList.AppendCString(volNameStr);          volumeIndex++;        }      } while (err == noErr);    }        // Extract the first component of the path    nsACString::const_iterator start;    path.BeginReading(start);    start.advance(1); // path begins with '/'    nsACString::const_iterator directory_end;    path.EndReading(directory_end);    nsACString::const_iterator component_end(start);    FindCharInReadable('/', component_end, directory_end);        firstPathComponent = Substring(start, component_end);    PRInt32 foundIndex = gVolumeList.IndexOf(nsCAutoString(firstPathComponent));    return (foundIndex != -1);}