win32.c
changeset 1596 c1c439a2d5b2
parent 1582 5ac8f9425c09
child 1649 09c7a5d6e65a
--- a/win32.c	Mon Mar 28 12:38:02 2005 +0000
+++ b/win32.c	Mon Mar 28 13:30:51 2005 +0000
@@ -1546,13 +1546,17 @@
 	return &_fios_items[_fios_count++];
 }
 
-static HANDLE MyFindFirstFile(const char *path, const char *file,
-	WIN32_FIND_DATA *fd)
+static HANDLE MyFindFirstFile(const char *path, const char *file, WIN32_FIND_DATA *fd)
 {
+	UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS); // disable 'no-disk' message box
+	HANDLE h;
 	char paths[MAX_PATH];
 
 	sprintf(paths, "%s\\%s", path, file);
-	return FindFirstFile(paths, fd);
+	h = FindFirstFile(paths, fd);
+
+	SetErrorMode(sem); // restore previous setting
+	return h;
 }
 
 int CDECL compare_FiosItems(const void *a, const void *b)
@@ -1834,23 +1838,31 @@
 	return NULL;
 }
 
-// Get descriptive texts.
-// Returns a path as well as a
-//  string describing the path.
-StringID FiosGetDescText(const char **path)
+/**
+ * Get descriptive texts. Returns the path and free space
+ * left on the device
+ * @param path string describing the path
+ * @param tfs total free space in megabytes, optional (can be NULL)
+ * @return StringID describing the path (free space or failure)
+ */
+StringID FiosGetDescText(const char **path, uint32 *tot)
 {
+	UINT sem = SetErrorMode(SEM_FAILCRITICALERRORS);  // disable 'no-disk' message box
 	char root[4];
 	DWORD spc, bps, nfc, tnc;
+	StringID sid;
+
 	*path = _fios_path;
 
 	sprintf(root, "%c:\\", _fios_path[0]);
-	if (GetDiskFreeSpace(root, &spc, &bps, &nfc, &tnc)) {
-		uint32 tot = ((spc * bps) * (uint64)nfc) >> 20;
-		SetDParam(0, tot);
-		return STR_4005_BYTES_FREE;
-	} else {
-		return STR_4006_UNABLE_TO_READ_DRIVE;
-	}
+	if (tot != NULL && GetDiskFreeSpace(root, &spc, &bps, &nfc, &tnc)) {
+		*tot = ((spc * bps) * (uint64)nfc) >> 20;
+		sid = STR_4005_BYTES_FREE;
+	} else
+		sid = STR_4006_UNABLE_TO_READ_DRIVE;
+
+	SetErrorMode(sem); // reset previous setting
+	return sid;
 }
 
 void FiosMakeSavegameName(char *buf, const char *name)