summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorJay Sorg <jay.sorg@gmail.com>2012-02-14 13:45:24 -0800
committerJay Sorg <jay.sorg@gmail.com>2012-02-14 13:45:24 -0800
commitcadad6e181d2a67698e5eb7cacd6b233ae29eb97 (patch)
treee83143e3a2d07493ccfee7c63a43f5f8b1eb4df8 /common
parent2225aa80ad36e88d5a55b743115fd33994703c6f (diff)
downloadxrdp-proprietary-cadad6e181d2a67698e5eb7cacd6b233ae29eb97.tar.gz
xrdp-proprietary-cadad6e181d2a67698e5eb7cacd6b233ae29eb97.zip
/tmp cleanup
Diffstat (limited to 'common')
-rw-r--r--common/os_calls.c86
-rw-r--r--common/os_calls.h4
2 files changed, 73 insertions, 17 deletions
diff --git a/common/os_calls.c b/common/os_calls.c
index 9e064c49..692dc015 100644
--- a/common/os_calls.c
+++ b/common/os_calls.c
@@ -83,22 +83,35 @@ static char g_temp_base[128] = "";
static char g_temp_base_org[128] = "";
/*****************************************************************************/
-void APP_CC
-g_init(const char* app_name)
+int APP_CC
+g_rm_temp_dir(void)
{
-#if defined(_WIN32)
- WSADATA wsadata;
+ if (g_temp_base[0] != 0)
+ {
+ if (!g_remove_dir(g_temp_base))
+ {
+ printf("g_rm_temp_dir: removing temp directory [%s] failed\n", g_temp_base);
+ }
+ g_temp_base[0] = 0;
+ }
+ return 0;
+}
- WSAStartup(2, &wsadata);
-#endif
- setlocale(LC_CTYPE, "");
+/*****************************************************************************/
+int APP_CC
+g_mk_temp_dir(const char* app_name)
+{
if (app_name != 0)
{
if (app_name[0] != 0)
{
if (!g_directory_exist("/tmp/.xrdp"))
{
- g_create_dir("/tmp/.xrdp");
+ if (!g_create_dir("/tmp/.xrdp"))
+ {
+ printf("g_mk_temp_dir: g_create_dir failed\n");
+ return 1;
+ }
g_chmod_hex("/tmp/.xrdp", 0x1777);
}
snprintf(g_temp_base, sizeof(g_temp_base),
@@ -107,10 +120,43 @@ g_init(const char* app_name)
"/tmp/.xrdp/%s-XXXXXX", app_name);
if (mkdtemp(g_temp_base) == 0)
{
- printf("g_init: mkdtemp failed [%s]\n", g_temp_base);
+ printf("g_mk_temp_dir: mkdtemp failed [%s]\n", g_temp_base);
+ return 1;
}
}
+ else
+ {
+ printf("g_mk_temp_dir: bad app name\n");
+ return 1;
+ }
}
+ else
+ {
+ if (g_temp_base_org[0] == 0)
+ {
+ printf("g_mk_temp_dir: g_temp_base_org not set\n");
+ return 1;
+ }
+ g_strncpy(g_temp_base, g_temp_base_org, 127);
+ if (mkdtemp(g_temp_base) == 0)
+ {
+ printf("g_mk_temp_dir: mkdtemp failed [%s]\n", g_temp_base);
+ }
+ }
+ return 0;
+}
+
+/*****************************************************************************/
+void APP_CC
+g_init(const char* app_name)
+{
+#if defined(_WIN32)
+ WSADATA wsadata;
+
+ WSAStartup(2, &wsadata);
+#endif
+ setlocale(LC_CTYPE, "");
+ g_mk_temp_dir(app_name);
}
/*****************************************************************************/
@@ -120,7 +166,7 @@ g_deinit(void)
#if defined(_WIN32)
WSACleanup();
#endif
- g_remove_dir(g_temp_base);
+ g_rm_temp_dir();
}
/*****************************************************************************/
@@ -1838,7 +1884,12 @@ g_execvp(const char* p1, char* args[])
#if defined(_WIN32)
return 0;
#else
- return execvp(p1, args);
+ int rv;
+
+ g_rm_temp_dir();
+ rv = execvp(p1, args);
+ g_mk_temp_dir(0);
+ return rv;
#endif
}
@@ -1850,7 +1901,12 @@ g_execlp3(const char* a1, const char* a2, const char* a3)
#if defined(_WIN32)
return 0;
#else
- return execlp(a1, a2, a3, (void*)0);
+ int rv;
+
+ g_rm_temp_dir();
+ rv = execlp(a1, a2, a3, (void*)0);
+ g_mk_temp_dir(0);
+ return rv;
#endif
}
@@ -1944,11 +2000,7 @@ g_fork(void)
rv = fork();
if (rv == 0) /* child */
{
- g_strncpy(g_temp_base, g_temp_base_org, 127);
- if (mkdtemp(g_temp_base) == 0)
- {
- printf("g_fork: mkdtemp failed [%s]\n", g_temp_base);
- }
+ g_mk_temp_dir(0);
}
return rv;
#endif
diff --git a/common/os_calls.h b/common/os_calls.h
index 94b857df..5c7d848e 100644
--- a/common/os_calls.h
+++ b/common/os_calls.h
@@ -31,6 +31,10 @@
#include "arch.h"
+int APP_CC
+g_rm_temp_dir(void);
+int APP_CC
+g_mk_temp_dir(const char* app_name);
void APP_CC
g_init(const char* app_name);
void APP_CC