# HG changeset patch # User Herman Bloggs # Date 1049505203 0 # Node ID 89a5b0e23ea4f908a82e6355e8977cb37407d6e4 # Parent 414b6a68578f4d36b6802e03d0b8f99c64e88637 [gaim-migrate @ 5343] Added gz and tar extraction routines committer: Tailor Script diff -r 414b6a68578f -r 89a5b0e23ea4 src/win32/win32dep.c --- a/src/win32/win32dep.c Sat Apr 05 01:11:57 2003 +0000 +++ b/src/win32/win32dep.c Sat Apr 05 01:13:23 2003 +0000 @@ -19,6 +19,8 @@ #include "systray.h" #include "winuser_extra.h" #include "idletrack.h" +#include "zlib.h" +#include "untar.h" /* * DEFINES & MACROS @@ -39,7 +41,6 @@ static char install_dir[MAXPATHLEN]; static char lib_dir[MAXPATHLEN]; static char locale_dir[MAXPATHLEN]; -static int bhide_icon; /* * GLOBALS @@ -53,6 +54,7 @@ BOOL (*MyFlashWindowEx)(PFLASHWINFO pfwi)=NULL; FARPROC wgaim_find_and_loadproc(char*, char*); +extern void wgaim_gtkspell_init(); /* * STATIC CODE @@ -239,6 +241,65 @@ } } +int wgaim_gz_decompress(const char* in, const char* out) { + gzFile fin; + FILE *fout; + char buf[1024]; + int ret; + + if((fin = gzopen(in, "rb"))) { + if(!(fout = fopen(out, "wb"))) { + debug_printf("wgaim_gz_decompress: Error opening file: %s\n", out); + gzclose(fin); + return 0; + } + } + else { + debug_printf("wgaim_gz_decompress: gzopen failed to open: %s\n", in); + return 0; + } + + while((ret=gzread(fin, buf, 1024))) { + if(fwrite(buf, 1, ret, fout) < ret) { + debug_printf("wgaim_gz_decompress: Error writing %d bytes to file\n", ret); + gzclose(fin); + fclose(fout); + return 0; + } + } + fclose(fout); + gzclose(fin); + + if(ret < 0) { + debug_printf("wgaim_gz_decompress: gzread failed while reading: %s\n", in); + return 0; + } + + return 1; +} + +int wgaim_gz_untar(const char* filename, const char* destdir) { + char tmpfile[_MAX_PATH]; + char template[]="wgaimXXXXXX"; + + sprintf(tmpfile, "%s%s%s", g_get_tmp_dir(), G_DIR_SEPARATOR_S, _mktemp(template)); + if(wgaim_gz_decompress(filename, tmpfile)) { + int ret; + if(untar(tmpfile, destdir, UNTAR_FORCE | UNTAR_QUIET)) + ret=1; + else { + debug_printf("wgaim_gz_untar: Failure untaring %s\n", tmpfile); + ret=0; + } + unlink(tmpfile); + return ret; + } + else { + debug_printf("wgaim_gz_untar: Failed to gz decompress %s\n", filename); + return 0; + } +} + /* Windows Initializations */ void wgaim_init(void) { diff -r 414b6a68578f -r 89a5b0e23ea4 src/win32/win32dep.h --- a/src/win32/win32dep.h Sat Apr 05 01:11:57 2003 +0000 +++ b/src/win32/win32dep.h Sat Apr 05 01:13:23 2003 +0000 @@ -23,6 +23,8 @@ HINSTANCE wgaim_hinstance(void); extern void wgaim_im_blink(GtkWidget*); extern char* wgaim_escape_dirsep(char*); +extern int wgaim_gz_decompress(const char* in, const char* out); +extern int wgaim_gz_untar(const char* filename, const char* destdir); /* Determine Gaim paths */ extern char* wgaim_install_dir(void);