+
+
+qboolean vfsPackFile( const char *filename, const char *packname, const int compLevel ){
+#ifndef GARUX_DISABLE_BAD_MINIZ
+ int i;
+ char tmp[NAME_MAX], fixed[NAME_MAX];
+ GSList *lst;
+
+ byte *bufferptr = NULL;
+ strcpy( fixed, filename );
+ vfsFixDOSName( fixed );
+ g_strdown( fixed );
+
+ for ( i = 0; i < g_numDirs; i++ )
+ {
+ strcpy( tmp, g_strDirs[i] );
+ strcat( tmp, filename );
+ if ( access( tmp, R_OK ) == 0 ) {
+ if ( access( packname, R_OK ) == 0 ) {
+ mz_zip_archive zip;
+ memset( &zip, 0, sizeof(zip) );
+ mz_zip_reader_init_file( &zip, packname, 0 );
+ mz_zip_writer_init_from_reader( &zip, packname );
+
+ mz_bool success = MZ_TRUE;
+ success &= mz_zip_writer_add_file( &zip, filename, tmp, 0, 0, compLevel );
+ if ( !success || !mz_zip_writer_finalize_archive( &zip ) ){
+ Error( "Failed creating zip archive \"%s\"!\n", packname );
+ }
+ mz_zip_reader_end( &zip);
+ mz_zip_writer_end( &zip );
+ }
+ else{
+ mz_zip_archive zip;
+ memset( &zip, 0, sizeof(zip) );
+ if( !mz_zip_writer_init_file( &zip, packname, 0 ) ){
+ Error( "Failed creating zip archive \"%s\"!\n", packname );
+ }
+ mz_bool success = MZ_TRUE;
+ success &= mz_zip_writer_add_file( &zip, filename, tmp, 0, 0, compLevel );
+ if ( !success || !mz_zip_writer_finalize_archive( &zip ) ){
+ Error( "Failed creating zip archive \"%s\"!\n", packname );
+ }
+ mz_zip_writer_end( &zip );
+ }
+
+ return qtrue;
+ }
+ }
+
+ for ( lst = g_pakFiles; lst != NULL; lst = g_slist_next( lst ) )
+ {
+ VFS_PAKFILE* file = (VFS_PAKFILE*)lst->data;
+
+ if ( strcmp( file->name, fixed ) != 0 ) {
+ continue;
+ }
+
+ memcpy( file->zipfile, &file->zipinfo, sizeof( unz_s ) );
+
+ if ( unzOpenCurrentFile( file->zipfile ) != UNZ_OK ) {
+ return qfalse;
+ }
+
+ bufferptr = safe_malloc( file->size + 1 );
+ // we need to end the buffer with a 0
+ ( (char*) ( bufferptr ) )[file->size] = 0;
+
+ mz_uint16 DOS_time = (mz_uint16)(((file->zipinfo.cur_file_info.tmu_date.tm_hour) << 11) + ((file->zipinfo.cur_file_info.tmu_date.tm_min) << 5) + ((file->zipinfo.cur_file_info.tmu_date.tm_sec) >> 1));
+ mz_uint16 DOS_date = (mz_uint16)(((file->zipinfo.cur_file_info.tmu_date.tm_year - 1980) << 9) + ((file->zipinfo.cur_file_info.tmu_date.tm_mon + 1) << 5) + file->zipinfo.cur_file_info.tmu_date.tm_mday);
+
+ i = unzReadCurrentFile( file->zipfile, bufferptr, file->size );
+ unzCloseCurrentFile( file->zipfile );
+ if ( i < 0 ) {
+ return qfalse;
+ }
+ else{
+ mz_bool success = MZ_TRUE;
+ success &= mz_zip_add_mem_to_archive_file_in_place_with_time( packname, filename, bufferptr, i, 0, 0, compLevel, DOS_time, DOS_date );
+ if ( !success ){
+ Error( "Failed creating zip archive \"%s\"!\n", packname );
+ }
+ free( bufferptr );
+ return qtrue;
+ }
+ }
+
+ return qfalse;
+#else
+ Error( "Disabled because of miniz issue" );
+#endif
+}
+
+qboolean vfsPackFile_Absolute_Path( const char *filepath, const char *filename, const char *packname, const int compLevel ){
+#ifndef GARUX_DISABLE_BAD_MINIZ
+ char tmp[NAME_MAX];
+ strcpy( tmp, filepath );
+ if ( access( tmp, R_OK ) == 0 ) {
+ if ( access( packname, R_OK ) == 0 ) {
+ mz_zip_archive zip;
+ memset( &zip, 0, sizeof(zip) );
+ mz_zip_reader_init_file( &zip, packname, 0 );
+ mz_zip_writer_init_from_reader( &zip, packname );
+
+ mz_bool success = MZ_TRUE;
+ success &= mz_zip_writer_add_file( &zip, filename, tmp, 0, 0, compLevel );
+ if ( !success || !mz_zip_writer_finalize_archive( &zip ) ){
+ Error( "Failed creating zip archive \"%s\"!\n", packname );
+ }
+ mz_zip_reader_end( &zip);
+ mz_zip_writer_end( &zip );
+ }
+ else{
+ mz_zip_archive zip;
+ memset( &zip, 0, sizeof(zip) );
+ if( !mz_zip_writer_init_file( &zip, packname, 0 ) ){
+ Error( "Failed creating zip archive \"%s\"!\n", packname );
+ }
+ mz_bool success = MZ_TRUE;
+ success &= mz_zip_writer_add_file( &zip, filename, tmp, 0, 0, compLevel );
+ if ( !success || !mz_zip_writer_finalize_archive( &zip ) ){
+ Error( "Failed creating zip archive \"%s\"!\n", packname );
+ }
+ mz_zip_writer_end( &zip );
+ }
+
+ return qtrue;
+ }
+
+ return qfalse;
+#else
+ Error( "Disabled because of miniz issue" );
+#endif
+}