Esempio n. 1
0
static size_t MResFindHeaderSize( MResResourceHeader *header, bool use_unicode )
/******************************************************************************/
{
    size_t  headersize;
    size_t  namesize;
    size_t  typesize;
    size_t  padding;

    headersize = 2 * sizeof( uint_16 ) + 5 * sizeof( uint_32 );
    namesize = MResFindNameOrOrdSize( header->Name, use_unicode );
    typesize = MResFindNameOrOrdSize( header->Type, use_unicode );
    headersize += ( namesize + typesize );
    padding = RES_PADDING( typesize + namesize, sizeof( uint_32 ) );

    return( headersize + padding );
}
Esempio n. 2
0
static int MResFindHeaderSize( MResResourceHeader *header, char use_unicode )
/***************************************************************************/
{
    int     headersize;
    long    namesize;
    long    typesize;
    long    padding;

    headersize = sizeof( MResResourceHeader ) - 2 * sizeof( ResNameOrOrdinal * )
                 + sizeof( uint_32 );
    namesize = MResFindNameOrOrdSize( header->Name, use_unicode );
    typesize = MResFindNameOrOrdSize( header->Type, use_unicode );
    headersize += ( namesize + typesize );
    padding = RES_PADDING( typesize + namesize, sizeof(uint_32) );

    return( headersize + padding );
}
Esempio n. 3
0
static uint_16 CalcBlockSize( FullVerBlock * block )
/**************************************************/
{
    uint_16     val_size;
    uint_16     padding;
    uint_16     head_size;
    uint_16     nest_size;
    uint_8      os;

    if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN32 ) {
        os = WRES_OS_WIN32;
    } else {
        os = WRES_OS_WIN16;
    }
    head_size = ResSizeVerBlockHeader( &block->Head, block->UseUnicode, os );
    if( block->Value == NULL ) {
        val_size = 0;
        padding = 0;
    } else {
        val_size = CalcValListSize( block->Value, block->UseUnicode );
        padding = RES_PADDING( val_size, sizeof(uint_32) );
    }
    if( block->Nest == NULL ) {
        nest_size = 0;
    } else {
        nest_size = CalcNestSize( block->Nest );
    }

    block->Head.ValSize = val_size;
    if( !stricmp( block->Head.Key, "Translation" ) ) {
        block->Head.Type = 0;
    } else {
        if( block->UseUnicode )
            block->Head.ValSize /= 2;
        block->Head.Type = 1;
    }
    block->Head.Size = head_size + val_size + padding + nest_size;

    return( block->Head.Size );
}
Esempio n. 4
0
extern int ResPadDWord( WResFileID handle )
/*****************************************/
/* advances in the file to the next DWORD boundry */
{
    long        curr_pos;
    long        padding;
    int         error;

    error = FALSE;
    curr_pos = WRESTELL( handle );
    if( curr_pos == -1 ) {
        WRES_ERROR( WRS_TELL_FAILED );
        error = TRUE;
    } else {
        padding = RES_PADDING( curr_pos, sizeof(uint_32) );
        curr_pos = WRESSEEK( handle, padding, SEEK_CUR );
        if( curr_pos == -1L ) {
            WRES_ERROR( WRS_SEEK_FAILED );
            error = TRUE;
        }
    }
    return( error );
}
Esempio n. 5
0
bool ResWritePadDWord( WResFileID handle )
/****************************************/
{
    WResFileOffset  curr_pos;
    WResFileSize    padding;
    bool            error;
    uint_32         zero = 0;

    error = false;
    curr_pos = WRESTELL( handle );
    if( curr_pos == -1 ) {
        WRES_ERROR( WRS_TELL_FAILED );
        return( true );
    }
    padding = RES_PADDING( curr_pos, sizeof( uint_32 ) );
    if( padding != 0 ) {
        if( (WResFileSize)WRESWRITE( handle, &zero, padding ) != padding ) {
            WRES_ERROR( WRS_WRITE_FAILED );
            return( true );
        }
    }
    return( false );
}
Esempio n. 6
0
void SemWINWriteVerInfo( WResID * name, ResMemFlags flags,
                        VerFixedInfo * info, FullVerBlockNest * nest )
/********************************************************************/
{
    WResLangType    lang;
    VerBlockHeader  root;
    ResLocation     loc;
    int             padding;
    bool            error;
    bool            use_unicode;
    uint_8          os;
    int             err_code;

    if( CmdLineParms.TargetOS == RC_TARGET_OS_WIN32 ) {
        use_unicode = true;
        os = WRES_OS_WIN32;
    } else {
        use_unicode = false;
        os = WRES_OS_WIN16;
    }
    root.Key = "VS_VERSION_INFO";
    root.ValSize = sizeof(VerFixedInfo);
    root.Type = 0;
    padding = RES_PADDING( root.ValSize, sizeof(uint_32) );
    root.Size = ResSizeVerBlockHeader( &root, use_unicode, os )
                    + root.ValSize + padding + CalcNestSize( nest );
    /* pad the start of the resource so that padding within the resource */
    /* is easier */
    error = ResPadDWord( CurrResFile.handle );
    if( error ) {
        err_code = LastWresErr();
        goto OutputWriteError;
    }

    if( !ErrorHasOccured ) {
        loc.start = SemStartResource();

        error = ResWriteVerBlockHeader( &root, use_unicode, os,
                                        CurrResFile.handle);
        if( error ) {
            err_code = LastWresErr();
            goto OutputWriteError;
        }

        error = ResWriteVerFixedInfo( info, CurrResFile.handle );
        if( error ) {
            err_code = LastWresErr();
            goto OutputWriteError;
        }

        if( ResSeek( CurrResFile.handle, padding, SEEK_CUR ) == -1 )  {
            err_code = LastWresErr();
            goto OutputWriteError;
        }

        error = SemWriteVerBlockNest( nest, CurrResFile.handle, &err_code );
        if( error)
            goto OutputWriteError;

        loc.len = SemEndResource( loc.start );

        /* version info resources must be language neutral */

        lang.lang = DEF_LANG;
        lang.sublang = DEF_SUBLANG;
        SemWINSetResourceLanguage( &lang, false );
        SemAddResourceFree( name, WResIDFromNum( RT_VERSIONINFO ), flags, loc );
    } else {
        RCFREE( name );
    }

    RCFREE( info );
    FreeVerBlockNest( nest );

    return;

OutputWriteError:
    RcError( ERR_WRITTING_RES_FILE, CurrResFile.filename,
                strerror( err_code )  );
    ErrorHasOccured = true;
    RCFREE( info );
    FreeVerBlockNest( nest );
    return;
}