From: Daniel A. <dat...@us...> - 2005-02-11 05:10:49
|
Update of /cvsroot/gaim/gaim/src/win32 In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv13953/src/win32 Modified Files: libc_interface.c libc_interface.h untar.c win32dep.c Log Message: Use GLib 2.6's gstdio functions. This should fix gaim not liking non-ascii filenames in win32. Index: libc_interface.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/win32/libc_interface.c,v retrieving revision 1.12 retrieving revision 1.13 diff -u -d -p -r1.12 -r1.13 --- libc_interface.c 28 Jul 2004 04:25:32 -0000 1.12 +++ libc_interface.c 11 Feb 2005 05:10:40 -0000 1.13 @@ -31,9 +31,13 @@ #include <sys/timeb.h> #include <sys/stat.h> #include <time.h> +#include <glib.h> #include "debug.h" #include "libc_internal.h" +#if !GLIB_CHECK_VERSION(2,6,0) +# define g_remove remove +#endif /* * PROTOS */ @@ -215,47 +219,6 @@ char* wgaim_strerror( int errornum ) { return strerror( errornum ); } -/* From glibc 2.2.5 */ -char* wgaim_strsep(char **stringp, const char *delim) { - char *begin, *end; - - begin = *stringp; - if (begin == NULL) - return NULL; - - /* A frequent case is when the delimiter string contains only one - character. Here we don't need to call the expensive `strpbrk' - function and instead work using `strchr'. */ - if (delim[0] == '\0' || delim[1] == '\0') { - char ch = delim[0]; - - if (ch == '\0') - end = NULL; - else { - if (*begin == ch) - end = begin; - else if (*begin == '\0') - end = NULL; - else - end = strchr (begin + 1, ch); - } - } - else - /* Find the end of the token. */ - end = strpbrk (begin, delim); - - if (end) { - /* Terminate the token and set *STRINGP past NUL character. */ - *end++ = '\0'; - *stringp = end; - } - else - /* No more delimiters; this is the last token. */ - *stringp = NULL; - - return begin; -} - /* unistd.h */ /* @@ -349,6 +312,7 @@ int wgaim_gettimeofday(struct timeval *p /* stdio.h */ +#if !GLIB_CHECK_VERSION(2,6,0) int wgaim_rename (const char *oldname, const char *newname) { struct _stat oldstat, newstat; @@ -379,7 +343,7 @@ int wgaim_rename (const char *oldname, c } /* newname is not a dir */ else { - remove(newname); + g_remove(newname); return rename(oldname, newname); } } @@ -395,6 +359,7 @@ int wgaim_rename (const char *oldname, c } } +#endif /* time.h */ Index: libc_interface.h =================================================================== RCS file: /cvsroot/gaim/gaim/src/win32/libc_interface.h,v retrieving revision 1.16 retrieving revision 1.17 diff -u -d -p -r1.16 -r1.17 --- libc_interface.h 20 Nov 2004 01:18:16 -0000 1.16 +++ libc_interface.h 11 Feb 2005 05:10:40 -0000 1.17 @@ -27,6 +27,7 @@ #include <io.h> #include <errno.h> #include "libc_internal.h" +#include <glib.h> /* sys/socket.h */ extern int wgaim_socket(int namespace, int style, int protocol); @@ -67,7 +68,9 @@ extern int wgaim_fcntl(int socket, int c #define fcntl( fd, command, val ) \ wgaim_fcntl( fd, command, val ) -#define open( args... ) _open( args ) +#if !GLIB_CHECK_VERSION(2,6,0) +# define open( args... ) _open( args ) +#endif /* arpa/inet.h */ extern int wgaim_inet_aton(const char *name, struct in_addr *addr); @@ -90,10 +93,6 @@ wgaim_strerror( errno ) #define strerror( errornum ) \ wgaim_strerror( errornum ) -extern char* wgaim_strsep(char **stringp, const char *delim); -#define strsep( stringp, delim ) \ -wgaim_strsep( stringp, delim ) - #define bzero( dest, size ) memset( dest, 0, size ) /* unistd.h */ @@ -126,12 +125,18 @@ wgaim_gettimeofday( timeval, timezone ) #define snprintf _snprintf #define vsnprintf _vsnprintf +#if !GLIB_CHECK_VERSION(2,6,0) +/* I think that this can probably go away, in favor of g_rename() */ extern int wgaim_rename(const char *oldname, const char *newname); #define rename( oldname, newname ) \ wgaim_rename( oldname, newname ) +#endif /* sys/stat.h */ + +#if !GLIB_CHECK_VERSION(2,6,0) #define mkdir(a,b) _mkdir((a)) +#endif #define fchmod(a,b) /* time.h */ Index: untar.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/win32/untar.c,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -p -r1.3 -r1.4 --- untar.c 12 Oct 2003 21:00:25 -0000 1.3 +++ untar.c 11 Feb 2005 05:10:40 -0000 1.4 @@ -78,8 +78,17 @@ #endif #include "debug.h" #include "untar.h" +#include <glib.h> +#if GLIB_CHECK_VERSION(2,6,0) +# include <glib/gstdio.h> +#else #define mkdir(a,b) _mkdir((a)) +#define g_mkdir mkdir +#define g_fopen fopen +#define g_unlink unlink +#endif + #define untar_error( error, args... ) gaim_debug(GAIM_DEBUG_ERROR, "untar", error, ## args ) #define untar_warning( warning, args... ) gaim_debug(GAIM_DEBUG_WARNING, "untar", warning, ## args ) #define untar_verbose( args... ) gaim_debug(GAIM_DEBUG_INFO, "untar", ## args ) @@ -153,7 +162,7 @@ static FILE *createpath(name) } /* first try creating it the easy way */ - fp = fopen(name, CONVERT ? "w" : "wb"); + fp = g_fopen(name, CONVERT ? "w" : "wb"); if (fp) return fp; @@ -169,11 +178,11 @@ static FILE *createpath(name) if (name[i] == '/') { name[i] = '\0'; - (void)mkdir(name, 0777); + (void)g_mkdir(name, 0777); name[i] = '/'; } } - fp = fopen(name, CONVERT ? "w" : "wb"); + fp = g_fopen(name, CONVERT ? "w" : "wb"); if (!fp) untar_error("Error opening: %s\n", name); return fp; @@ -192,7 +201,7 @@ static void linkorcopy(src, dst, sym) int c; /* Open the source file. We do this first to make sure it exists */ - fpsrc = fopen(src, "rb"); + fpsrc = g_fopen(src, "rb"); if (!fpsrc) { untar_error("Error opening: %s\n", src); @@ -211,7 +220,7 @@ static void linkorcopy(src, dst, sym) # ifndef _WEAK_POSIX /* first try to link it over, instead of copying */ fclose(fpdst); - unlink(dst); + g_unlink(dst); if (sym) { if (symlink(src, dst)) @@ -229,7 +238,7 @@ static void linkorcopy(src, dst, sym) } /* Dang. Reopen the destination again */ - fpdst = fopen(dst, "wb"); + fpdst = g_fopen(dst, "wb"); /* This *can't* fail */ # endif /* _WEAK_POSIX */ @@ -521,7 +530,7 @@ static int untar_block(Uchar_t *blk) { #ifdef _POSIX_SOURCE else if (mkdir(nbuf, mode) == 0) #else - else if (mkdir(nbuf, 0755) == 0) + else if (g_mkdir(nbuf, 0755) == 0) #endif n2 = " created"; else @@ -578,7 +587,7 @@ int untar(const char *filename, const ch untarops = options; /* open the archive */ inname = filename; - infp = fopen(filename, "rb"); + infp = g_fopen(filename, "rb"); if (!infp) { untar_error("Error opening: %s\n", filename); Index: win32dep.c =================================================================== RCS file: /cvsroot/gaim/gaim/src/win32/win32dep.c,v retrieving revision 1.49 retrieving revision 1.50 diff -u -d -p -r1.49 -r1.50 --- win32dep.c 9 Dec 2004 02:55:18 -0000 1.49 +++ win32dep.c 11 Feb 2005 05:10:40 -0000 1.50 @@ -27,9 +27,16 @@ #include <stdlib.h> #include <stdio.h> #include <winuser.h> +#include <shlobj.h> #include <gtk/gtk.h> #include <glib.h> +#if GLIB_CHECK_VERSION(2,6,0) +# include <glib/gstdio.h> +#else +# define g_fopen fopen +# define g_unlink unlink +#endif #include <gdk/gdkwin32.h> #include "gaim.h" @@ -56,16 +63,14 @@ */ /* For shfolder.dll */ -typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATH)(HWND, int, HANDLE, DWORD, LPTSTR); +typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHA)(HWND, int, HANDLE, DWORD, LPSTR); +typedef HRESULT (CALLBACK* LPFNSHGETFOLDERPATHW)(HWND, int, HANDLE, DWORD, LPWSTR); typedef enum { SHGFP_TYPE_CURRENT = 0, // current value for user, verify it exists SHGFP_TYPE_DEFAULT = 1, // default value, may not exist } SHGFP_TYPE; -#define CSIDL_APPDATA 0x001a -#define CSIDL_FLAG_CREATE 0x8000 - /* flash info */ typedef BOOL (CALLBACK* LPFNFLASHWINDOWEX)(PFLASHWINFO); @@ -78,7 +83,7 @@ typedef struct _WGAIM_FLASH_INFO WGAIM_F /* * LOCALS */ -static char app_data_dir[MAX_PATH] = "C:"; +static char app_data_dir[MAX_PATH + 1] = "C:"; static char install_dir[MAXPATHLEN]; static char lib_dir[MAXPATHLEN]; static char locale_dir[MAXPATHLEN]; @@ -94,7 +99,8 @@ HINSTANCE gaimdll_hInstance = 0; * PROTOS */ LPFNFLASHWINDOWEX MyFlashWindowEx = NULL; -LPFNSHGETFOLDERPATH MySHGetFolderPath = NULL; +LPFNSHGETFOLDERPATHA MySHGetFolderPathA = NULL; +LPFNSHGETFOLDERPATHW MySHGetFolderPathW = NULL; FARPROC wgaim_find_and_loadproc(char*, char*); extern void wgaim_gtkspell_init(); @@ -142,136 +148,15 @@ static void load_winver_specific_procs(v MyFlashWindowEx = (LPFNFLASHWINDOWEX)wgaim_find_and_loadproc("user32.dll", "FlashWindowEx" ); } -#if 0 -static char* base_name(char* path) { - char *tmp = path; - char *prev = NULL; - - while((tmp=strchr(tmp, '\\'))) { - prev = tmp; - tmp += 1; - } - if(prev) - return ++prev; - else - return NULL; -} -#endif - -BOOL folder_exists(char *folder) { - BOOL ret = FALSE; - WIN32_FIND_DATA fileinfo; - HANDLE fh; - - memset(&fileinfo, 0, sizeof(WIN32_FIND_DATA)); - if((fh=FindFirstFile(folder, &fileinfo))) { - if(fileinfo.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) { - ret = TRUE; - SetLastError(ERROR_SUCCESS); - } - else - SetLastError(ERROR_FILE_EXISTS); - FindClose(fh); - } - return ret; -} - -/* Recursively create directories in the dest path */ -static BOOL CreateDirectoryR(char *dest) { - static BOOL start = TRUE; - BOOL ret = FALSE; - - if(!dest) - return ret; - - if(start) { - char *str = g_strdup(dest); - start = FALSE; - ret = CreateDirectoryR(str); - g_free(str); - start = TRUE; - } - else { - char *tmp1 = dest; - char *tmp=NULL; - - while((tmp1=strchr(tmp1, '\\'))) { - tmp = tmp1; - tmp1+=1; - } - - if(tmp) { - tmp[0] = '\0'; - CreateDirectoryR(dest); - tmp[0] = '\\'; - if(CreateDirectory(dest, NULL) == 0 && GetLastError() != ERROR_ALREADY_EXISTS) { - gaim_debug(GAIM_DEBUG_ERROR, "wgaim", - "Error creating directory: %s. Errno: %u\n", - dest, (UINT)GetLastError()); - } - else - ret = TRUE; - } - } - return ret; -} - -#if 0 -static BOOL move_folder(char *src, char* dest, char* copytitle, BOOL overwrite) { - char *tsrc, *tdest; - SHFILEOPSTRUCT dirmove; - BOOL ret = FALSE; - - g_return_val_if_fail(src!=NULL, ret); - g_return_val_if_fail(dest!=NULL, ret); - - if(!folder_exists(src)) { - gaim_debug(GAIM_DEBUG_WARNING, "wgaim", - "move_folder: Source folder %s, does not exist\n", src); - return ret; - } - if(!overwrite) { - char *dstpath = g_strdup_printf("%s\\%s", dest, base_name(src)); - - if(folder_exists(dstpath)) { - gaim_debug(GAIM_DEBUG_WARNING, "wgaim", - "move_folder: Destination Folder %s, already exists\n", dstpath); - g_free(dstpath); - return ret; - } - g_free(dstpath); - } - - /* Create dest folder if it doesn't exist */ - if(!CreateDirectoryR(dest)) { - gaim_debug(GAIM_DEBUG_ERROR, "wgaim", "Error creating directory: %s\n", dest); - return ret; - } - - tsrc = g_strdup_printf("%s%c", src, '\0'); - tdest = g_strdup_printf("%s%c", dest, '\0'); - - memset(&dirmove, 0, sizeof(SHFILEOPSTRUCT)); - dirmove.wFunc = FO_MOVE; - dirmove.pFrom = tsrc; - dirmove.pTo = tdest; - dirmove.fFlags = FOF_NOCONFIRMATION | FOF_SIMPLEPROGRESS; - dirmove.hNameMappings = 0; - dirmove.lpszProgressTitle = copytitle; - - if(SHFileOperation(&dirmove)==0) - ret = TRUE; - - g_free(tsrc); - g_free(tdest); - return ret; -} -#endif - static void wgaim_debug_print(GaimDebugLevel level, const char *category, const char *format, va_list args) { - char *str = g_strdup_vprintf(format, args); - printf("%s%s%s", category?category:"", category?": ":"",str); - g_free(str); + char *str = NULL; + if (args != NULL) { + str = g_strdup_vprintf(format, args); + } else { + str = g_strdup(format); + } + printf("%s%s%s", category?category:"", category?": ":"",str); + g_free(str); } static GaimDebugUiOps ops = { @@ -448,7 +333,7 @@ int wgaim_gz_decompress(const char* in, int ret; if((fin = gzopen(in, "rb"))) { - if(!(fout = fopen(out, "wb"))) { + if(!(fout = g_fopen(out, "wb"))) { gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_decompress", "Error opening file: %s\n", out); gzclose(fin); return 0; @@ -491,7 +376,7 @@ int wgaim_gz_untar(const char* filename, gaim_debug(GAIM_DEBUG_ERROR, "wgaim_gz_untar", "Failure untaring %s\n", tmpfile); ret=0; } - unlink(tmpfile); + g_unlink(tmpfile); return ret; } else { @@ -569,13 +454,33 @@ void wgaim_init(HINSTANCE hint) { /* Set app data dir, used by gaim_home_dir */ newenv = (char*)g_getenv("GAIMHOME"); if(!newenv) { - if((MySHGetFolderPath = (LPFNSHGETFOLDERPATH)wgaim_find_and_loadproc("shfolder.dll", "SHGetFolderPathA"))) { - MySHGetFolderPath(NULL, - CSIDL_APPDATA, - NULL, SHGFP_TYPE_CURRENT, app_data_dir); - } - else - strcpy(app_data_dir, "C:"); +#if GLIB_CHECK_VERSION(2,6,0) + if ((MySHGetFolderPathW = (LPFNSHGETFOLDERPATHW) wgaim_find_and_loadproc("shfolder.dll", "SHGetFolderPathW"))) { + wchar_t utf_16_dir[MAX_PATH +1]; + char *temp; + MySHGetFolderPathW(NULL, CSIDL_APPDATA, NULL, + SHGFP_TYPE_CURRENT, utf_16_dir); + temp = g_utf16_to_utf8(utf_16_dir, -1, NULL, NULL, NULL); + g_strlcpy(app_data_dir, temp, sizeof(app_data_dir)); + g_free(temp); + } else if ((MySHGetFolderPathA = (LPFNSHGETFOLDERPATHA) wgaim_find_and_loadproc("shfolder.dll", "SHGetFolderPathA"))) { + char locale_dir[MAX_PATH + 1]; + char *temp; + MySHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, + SHGFP_TYPE_CURRENT, locale_dir); + temp = g_locale_to_utf8(locale_dir, -1, NULL, NULL, NULL); + g_strlcpy(app_data_dir, temp, sizeof(app_data_dir)); + g_free(temp); + } +#else + if ((MySHGetFolderPathA = (LPFNSHGETFOLDERPATHA) wgaim_find_and_loadproc("shfolder.dll", "SHGetFolderPathA"))) { + MySHGetFolderPathA(NULL, CSIDL_APPDATA, NULL, + SHGFP_TYPE_CURRENT, app_data_dir); + } +#endif + else { + strcpy(app_data_dir, "C:"); + } } else { g_strlcpy(app_data_dir, newenv, sizeof(app_data_dir)); |