void WR_EXPORT WRFreeWRInfo( WRInfo *info ) { if( info != NULL ) { if( info->file_name != NULL ) { WRMemFree( info->file_name ); } if( info->save_name != NULL ) { WRMemFree( info->save_name ); } if( info->internal_filename != NULL ) { WRMemFree( info->internal_filename ); } if( info->tmp_file != NULL ) { if( WRFileExists( info->tmp_file ) ) { WRDeleteFile( info->tmp_file ); } WRMemFree( info->tmp_file ); } if( info->dir != NULL ) { WRFreeWResDirData( info->dir ); WResFreeDir( info->dir ); } WRMemFree( info ); } }
int WRSaveResourceToEXE ( WRInfo *info, int backup, WRFileType ttype ) { int ok; char *tmp_res; char *sname; WRFileType stype; sname = NULL; ok = ( info->file_name != NULL ); ok = ( ok && ( ( tmp_res = WRGetTempFileName ( "res" ) ) != NULL ) ); if ( ok ) { sname = info->save_name; stype = info->save_type; info->save_name = tmp_res; info->save_type = ttype; ok = WRSaveResource ( info, FALSE ); } if ( ok ) { if ( backup && WRFileExists ( sname ) ) { ok = WRBackupFile ( sname, FALSE ); } } if ( ok ) { memset ( &CmdLineParms, 0, sizeof ( CmdLineParms ) ); CmdLineParms.Pass2Only = TRUE; CmdLineParms.VersionStamp = VERSION_31_STAMP; if ( ttype == WR_WINNTW_RES ) { CmdLineParms.TargetOS = RC_TARGET_OS_WIN32; } else { CmdLineParms.TargetOS = RC_TARGET_OS_WIN16; } strcpy ( CmdLineParms.InFileName, tmp_res ); strcpy ( CmdLineParms.InExeFileName, info->file_name ); if ( stricmp ( sname, info->file_name ) ) { strcpy ( CmdLineParms.OutExeFileName, sname ); } else { strcpy ( CmdLineParms.OutExeFileName, info->file_name ); } ok = WRExecRCPass2 (); } if ( tmp_res ) { WRDeleteFile ( tmp_res ); WRMemFree ( tmp_res ); } if ( sname ) { info->save_name = sname; info->save_type = stype; } return ( ok ); }
static bool saveResourceToRES( WRInfo *info, bool backup, const char *save_name, const char *file_name ) { WResFileID src_fid; WResFileID dst_fid; bool is_wres; bool ok; bool use_rename; WRFileType save_type; src_fid = WRES_NIL_HANDLE; dst_fid = WRES_NIL_HANDLE; ok = true; if( ok ) { save_type = info->save_type; if( save_type != WR_WIN16M_RES && save_type != WR_WIN16W_RES && save_type != WR_WINNTM_RES && save_type != WR_WINNTW_RES ) { if( info->internal_type != WR_DONT_KNOW ) { save_type = info->internal_type; } } #ifndef __NT__ ok = !WRIs32Bit( save_type ); if( !ok ) { WRDisplayErrorMsg( WR_NOSAVE32IN16 ); } #endif } if( ok ) { if( backup && WRFileExists( save_name ) ) { use_rename = (file_name != NULL && stricmp( file_name, save_name )); ok = WRBackupFile( save_name, use_rename ); } } if( ok ) { if( file_name != NULL ) { ok = ((src_fid = ResOpenFileRO( info->tmp_file )) != WRES_NIL_HANDLE); } } is_wres = (save_type == WR_WIN16W_RES || save_type == WR_WINNTW_RES); if( ok ) { ok = ((dst_fid = ResOpenNewFile( save_name )) != WRES_NIL_HANDLE); if( ok && is_wres ) { ok = !WResFileInit( dst_fid ); } } if( ok ) { if( is_wres ) { ok = WRSaveResourceToWRES( info, src_fid, dst_fid ); } else { ok = WRSaveResourceToMRES( info, src_fid, dst_fid ); } } if( src_fid != WRES_NIL_HANDLE ) { ResCloseFile( src_fid ); } if( dst_fid != WRES_NIL_HANDLE ) { ResCloseFile( dst_fid ); } if( !ok ) { if( dst_fid != WRES_NIL_HANDLE ) { WRDeleteFile( save_name ); } } return( ok ); }
static int WRSaveImageToFile( WRInfo *info, WResTypeNode *tnode, int backup ) { WResFileID src; WResFileID dest; int ok; int use_rename; WResLangNode *lnode; src = -1; dest = -1; lnode = NULL; ok = ( info && tnode ); if( ok ) { if( backup && WRFileExists ( info->save_name ) ) { use_rename = ( info->file_name && stricmp( info->file_name, info->save_name ) ); ok = WRBackupFile( info->save_name, use_rename ); } } if( ok ) { if( info->file_name ) { ok = ( ( src = ResOpenFileRO( info->tmp_file ) ) != -1 ); } } if( ok ) { dest = open( info->save_name, O_CREAT | O_WRONLY | O_TRUNC | O_BINARY, S_IWRITE | S_IREAD ); ok = ( dest != -1 ); } if( ok ) { if( tnode->Head && tnode->Head->Head ) { lnode = tnode->Head->Head; } ok = ( lnode != NULL ); } if( ok ) { if ( lnode->data ) { ok = WRCopyResFromDataToFile( lnode->data, lnode->Info.Length, dest ); } else { ok = WRCopyResFromFileToFile( src, lnode->Info.Offset, lnode->Info.Length, dest ); } } if ( src != -1 ) { ResCloseFile( src ); } if ( dest != -1 ) { ResCloseFile( dest ); } if ( !ok ) { if ( dest != -1 ) { WRDeleteFile ( info->save_name ); } } return ( ok ); }