int CompareContents( FILE *fp1, FILE *fp2 ) /*****************************************/ { int retcode; /* -1: error 0: same 1: different */ int oldretcode; bool dup_discarded; int error; WResDir dir1; WResDir dir2; retcode = CompareHeaders( fp1, fp2 ); if( (retcode == -1) || (retcode == 1 && !CmdLineParms.CheckAll) ) { return( retcode ); } oldretcode = retcode; dir1 = WResInitDir(); if( dir1 == NULL ) { return( -1 ); } dir2 = WResInitDir(); if( dir2 == NULL ) { WResFreeDir( dir1 ); return( -1 ); } error = WResReadDir( fp1, dir1, &dup_discarded ); if( error || dup_discarded ) { WResFreeDir( dir1 ); WResFreeDir( dir2 ); return( -1 ); } error = WResReadDir( fp2, dir2, &dup_discarded ); if( error || dup_discarded ) { WResFreeDir( dir1 ); WResFreeDir( dir2 ); return( -1 ); } retcode = CompareResources( fp1, dir1, fp2, dir2 ); WResFreeDir( dir1 ); WResFreeDir( dir2 ); if( retcode == -1 ) { return( -1 ); } else if( retcode == 1 || oldretcode == 1 ) { return( 1 ); } else { return( 0 ); } }
static bool loadResDirFromRES( WRInfo *info, const char *filename, bool *is_wres ) { WResFileID fid; bool dup_discarded; bool ok; ok = ((fid = ResOpenFileRO( filename )) != WRES_NIL_HANDLE); if( ok ) { *is_wres = WResIsWResFile( fid ); } if( ok ) { ok = ((info->dir = WResInitDir()) != NULL); } if( ok ) { ok = !WResReadDir( fid, info->dir, &dup_discarded ); if( ok && dup_discarded ) { WRDisplayErrorMsg( WR_DUPRESDISCARD ); } } if( fid != WRES_NIL_HANDLE ) { ResCloseFile( fid ); } return( ok ); }
static bool copyResourcesFromRes( const char *full_filename ) /***********************************************************/ { WResFileID fid; WResDir dir; bool dup_discarded; WResDirWindow wind; char *buffer; bool error; buffer = NULL; dir = WResInitDir(); fid = RcIoOpenInput( full_filename, false ); if( fid == WRES_NIL_HANDLE ) { RcError( ERR_CANT_OPEN_FILE, full_filename, strerror( errno ) ); goto HANDLE_ERROR; } error = WResReadDir( fid, dir, &dup_discarded ); if( error ) { switch( LastWresStatus() ) { case WRS_BAD_SIG: RcError( ERR_INVALID_RES, full_filename ); break; case WRS_BAD_VERSION: RcError( ERR_BAD_RES_VER, full_filename ); break; default: RcError( ERR_READING_RES, full_filename, LastWresErrStr() ); break; } goto HANDLE_ERROR; } if( WResGetTargetOS( dir ) != WResGetTargetOS( CurrResFile.dir ) ) { RcError( ERR_RES_OS_MISMATCH, full_filename ); goto HANDLE_ERROR; } buffer = RESALLOC( BUFFER_SIZE ); wind = WResFirstResource( dir ); while( !WResIsEmptyWindow( wind ) ) { copyAResource( fid, &wind, buffer, full_filename ); wind = WResNextResource( wind, dir ); } RESFREE( buffer ); WResFreeDir( dir ); RESCLOSE( fid ); return( false ); HANDLE_ERROR: ErrorHasOccured = true; WResFreeDir( dir ); if( fid != WRES_NIL_HANDLE ) RESCLOSE( fid ); return( true ); }
DepInfo *WResGetAutoDep( const char *fname ) { WResFileID handle; WResDir dir; bool dup_discarded; WResID *name; WResID *type; WResDirWindow window; WResLangInfo *info; DepInfo *ret; WResFileSSize numread; ret = NULL; handle = ResOpenFileRO( fname ); if( handle != WRES_NIL_HANDLE ) { if( WResIsWResFile( handle ) && (dir = WResInitDir()) != NULL ) { if( !WResReadDir( handle, dir, &dup_discarded ) ) { name = WResIDFromStr( DEP_LIST_NAME ); type = WResIDFromNum( DEP_LIST_TYPE ); if( name != NULL && type != NULL ) { window = WResFindResource( type, name, dir, NULL ); if( WResIsEmptyWindow( window ) ) { WRES_ERROR( WRS_RES_NOT_FOUND ); } else { info = WResGetLangInfo( window ); if( WRESSEEK( handle, info->Offset, SEEK_SET ) == -1 ) { WRES_ERROR( WRS_SEEK_FAILED ); } else { ret = WRESALLOC( info->Length ); if( ret == NULL ) { WRES_ERROR( WRS_MALLOC_FAILED ); } else { numread = WRESREAD( handle, ret, info->Length ); if( numread != (WResFileSSize)info->Length ) { WRES_ERROR( WRESIOERR( handle, numread ) ? WRS_READ_FAILED : WRS_READ_INCOMPLETE ); ret = NULL; } } } } } if( name != NULL ) { WResIDFree( name ); } if( type != NULL ) { WResIDFree( type ); } } WResFreeDir( dir ); } ResCloseFile( handle ); } return( ret ); }
extern int DumpFile( void ) /*************************/ { int error; int retcode; WResFileID handle; WResDir dir; handle = ResOpenFileRO( CmdLineParms.FileName ); if (handle == -1) { return( 2 ); } if (WResIsWResFile( handle )) { puts( "WATCOM format .RES file" ); } else { puts( "MS format .RES file" ); } dir = WResInitDir(); if (dir == NULL) { FatalError( "Out of memory" ); } error = WResReadDir( handle, dir, NULL ); if (error) { puts( "Unable to read directory" ); retcode = 2; } else { if( WResGetTargetOS( dir ) == WRES_OS_WIN16 ) { puts( "Target OS: Win16" ); } else { puts( "Target OS: Win32" ); } puts( "Type Name Language Flags" ); puts( "==== ==== ======== =====" ); retcode = DumpDir( dir, handle ); } WResFreeDir( dir ); ResCloseFile( handle ); return( retcode ); }