comparison libpurple/util.c @ 16869:ec79e3ad09a9

_mktmp() sucks, so use g_mkstemp() instead. This probably doesn't have to be done differently for win32 and elsewhere, but I don't want to be changing things right now.
author Daniel Atallah <daniel.atallah@gmail.com>
date Fri, 04 May 2007 04:01:23 +0000
parents 0cd684e34403
children ce2422ae793c bd0335d2615b
comparison
equal deleted inserted replaced
16866:f5d699d95744 16869:ec79e3ad09a9
2520 2520
2521 FILE * 2521 FILE *
2522 purple_mkstemp(char **fpath, gboolean binary) 2522 purple_mkstemp(char **fpath, gboolean binary)
2523 { 2523 {
2524 const gchar *tmpdir; 2524 const gchar *tmpdir;
2525 #ifndef _WIN32
2526 int fd; 2525 int fd;
2527 #endif
2528 FILE *fp = NULL; 2526 FILE *fp = NULL;
2529 2527
2530 g_return_val_if_fail(fpath != NULL, NULL); 2528 g_return_val_if_fail(fpath != NULL, NULL);
2531 2529
2532 if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) { 2530 if((tmpdir = (gchar*)g_get_tmp_dir()) != NULL) {
2533 if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, purple_mkstemp_templ)) != NULL) { 2531 if((*fpath = g_strdup_printf("%s" G_DIR_SEPARATOR_S "%s", tmpdir, purple_mkstemp_templ)) != NULL) {
2534 #ifdef _WIN32 2532 #ifdef _WIN32
2535 char* result = _mktemp( *fpath ); 2533 fd = g_mkstemp(*fpath);
2536 if( result == NULL )
2537 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp",
2538 "Problem creating the template\n");
2539 else
2540 {
2541 if( (fp = g_fopen( result, binary?"wb+":"w+")) == NULL ) {
2542 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp",
2543 "Couldn't fopen() %s\n", result);
2544 }
2545 }
2546 #else 2534 #else
2547 if((fd = mkstemp(*fpath)) == -1) { 2535 fd = mkstemp(*fpath));
2536 #endif
2537 if(fd == -1) {
2548 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", 2538 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp",
2549 "Couldn't make \"%s\", error: %d\n", 2539 "Couldn't make \"%s\", error: %d\n",
2550 *fpath, errno); 2540 *fpath, errno);
2551 } else { 2541 } else {
2552 if((fp = fdopen(fd, "r+")) == NULL) { 2542 if((fp = fdopen(fd, "r+")) == NULL) {
2553 close(fd); 2543 close(fd);
2554 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp", 2544 purple_debug(PURPLE_DEBUG_ERROR, "purple_mkstemp",
2555 "Couldn't fdopen(), error: %d\n", errno); 2545 "Couldn't fdopen(), error: %d\n", errno);
2556 } 2546 }
2557 } 2547 }
2558 #endif 2548
2559 if(!fp) { 2549 if(!fp) {
2560 g_free(*fpath); 2550 g_free(*fpath);
2561 *fpath = NULL; 2551 *fpath = NULL;
2562 } 2552 }
2563 } 2553 }