(svn r3061) - CodeChange: revert r3056, r3057 and add a simpler fix to satisfy the needs of the absolute strict (eg. root directory is C:\ not C:)
authorDarkvater
Tue, 18 Oct 2005 20:18:05 +0000
changeset 2532 227d0681baee
parent 2531 745fb309b142
child 2533 f8cff1c84cad
(svn r3061) - CodeChange: revert r3056, r3057 and add a simpler fix to satisfy the needs of the absolute strict (eg. root directory is C:\ not C:)
win32.c
--- a/win32.c	Tue Oct 18 18:18:50 2005 +0000
+++ b/win32.c	Tue Oct 18 20:18:05 2005 +0000
@@ -630,8 +630,9 @@
 	UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS); // disable 'no-disk' message box
 	HANDLE h;
 	char paths[MAX_PATH];
+	const char *s = strrchr(path, '\\');
 
-	snprintf(paths, sizeof(paths), "%s\\%s", path, file);
+	snprintf(paths, sizeof(paths), "%s%s%s", path, (s[1] == '\0') ? "" : "\\", file);
 	h = FindFirstFile(paths, fd);
 
 	SetErrorMode(sem); // restore previous setting
@@ -671,7 +672,7 @@
 	_fios_path = _fios_save_path;
 
 	// Parent directory, only if not of the type C:\.
-	if (_fios_path[2] != '\0') {
+	if (_fios_path[3] != '\0') {
 		fios = FiosAlloc();
 		fios->type = FIOS_TYPE_PARENT;
 		fios->mtime = 0;
@@ -900,12 +901,15 @@
 
 	switch (item->type) {
 		case FIOS_TYPE_DRIVE:
-			sprintf(path, "%c:", item->title[0]);
+			sprintf(path, "%c:\\", item->title[0]);
 			break;
 
 		case FIOS_TYPE_PARENT:
 			s = strrchr(path, '\\');
-			s[0] = '\0';
+			if (s != path + 2)
+				s[0] = '\0';
+			else
+				s[1] = '\0';
 			break;
 
 		case FIOS_TYPE_DIR: