Mercurial > pidgin
diff src/win32/win32dep.c @ 5008:89a5b0e23ea4
[gaim-migrate @ 5343]
Added gz and tar extraction routines
committer: Tailor Script <tailor@pidgin.im>
author | Herman Bloggs <hermanator12002@yahoo.com> |
---|---|
date | Sat, 05 Apr 2003 01:13:23 +0000 |
parents | b5e52f7e5302 |
children | a2acc2b79ff1 |
line wrap: on
line diff
--- 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) {