summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSimon Howard2007-01-06 00:34:50 +0000
committerSimon Howard2007-01-06 00:34:50 +0000
commitcb7cf979369b5b3b4db0154368e379ae8ab8aa25 (patch)
tree60ec72d798bb044af479cf0edcf00ae7f77f3c55 /src
parenta4fec80d22871128288632ec47e21f5f4b99f27b (diff)
downloadchocolate-doom-cb7cf979369b5b3b4db0154368e379ae8ab8aa25.tar.gz
chocolate-doom-cb7cf979369b5b3b4db0154368e379ae8ab8aa25.tar.bz2
chocolate-doom-cb7cf979369b5b3b4db0154368e379ae8ab8aa25.zip
Choose the locations for temporary files more intelligently.
Subversion-branch: /trunk/chocolate-doom Subversion-revision: 821
Diffstat (limited to 'src')
-rw-r--r--src/i_sound.c10
-rw-r--r--src/m_misc.c31
-rw-r--r--src/m_misc.h2
3 files changed, 37 insertions, 6 deletions
diff --git a/src/i_sound.c b/src/i_sound.c
index ec3a68ad..ee0ad57b 100644
--- a/src/i_sound.c
+++ b/src/i_sound.c
@@ -677,7 +677,7 @@ static boolean ConvertMus(byte *musdata, int len, char *filename)
void *I_RegisterSong(void *data, int len)
{
- char filename[64];
+ char *filename;
Mix_Music *music;
if (!music_initialised)
@@ -686,11 +686,7 @@ void *I_RegisterSong(void *data, int len)
// MUS files begin with "MUS"
// Reject anything which doesnt have this signature
-#ifdef _WIN32
- sprintf(filename, "doom.mid");
-#else
- sprintf(filename, "/tmp/doom-%i.mid", getpid());
-#endif
+ filename = M_TempFile("doom.mid");
if (IsMid(data, len) && len < MAXMIDLENGTH)
{
@@ -718,6 +714,8 @@ void *I_RegisterSong(void *data, int len)
remove(filename);
+ Z_Free(filename);
+
return music;
}
diff --git a/src/m_misc.c b/src/m_misc.c
index 5b98960a..13ca6768 100644
--- a/src/m_misc.c
+++ b/src/m_misc.c
@@ -198,6 +198,37 @@ int M_ReadFile(char const *name, byte **buffer)
return length;
}
+// Returns the path to a temporary file of the given name, stored
+// inside the system temporary directory.
+//
+// The returned value must be freed with Z_Free after use.
+
+char *M_TempFile(char *s)
+{
+ char *result;
+ char *tempdir;
+
+#ifdef _WIN32
+
+ // Check the TEMP environment variable to find the location.
+
+ temp = getenv("TEMP");
+
+ if (temp == NULL)
+ {
+ tempdir = ".";
+ }
+#else
+ // In Unix, just use /tmp.
+
+ tempdir = "/tmp";
+#endif
+
+ result = Z_Malloc(strlen(tempdir) + strlen(s) + 2, PU_STATIC, 0);
+ sprintf(result, "%s%c%s", tempdir, DIR_SEPARATOR, s);
+
+ return result;
+}
//
// DEFAULTS
diff --git a/src/m_misc.h b/src/m_misc.h
index 41ba96ae..b3412e9c 100644
--- a/src/m_misc.h
+++ b/src/m_misc.h
@@ -57,6 +57,8 @@ void M_SetConfigDir(void);
void M_MakeDirectory(char *dir);
+char *M_TempFile(char *s);
+
boolean M_FileExists(char *file);