VirtualBox

Changeset 85856 in vbox for trunk/src/VBox/GuestHost


Ignore:
Timestamp:
Aug 21, 2020 9:06:50 AM (5 years ago)
Author:
vboxsync
Message:

Consolidated all the different Bitmap (BMP) file format headers / definitions into new include/iprt/formats/bmp.h (part 1).

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/VBox/GuestHost/SharedClipboard/clipboard-common.cpp

    r85845 r85856  
    2626#include <iprt/rand.h>
    2727#include <iprt/utf16.h>
     28
     29#include <iprt/formats/bmp.h>
    2830
    2931#include <iprt/errcore.h>
     
    899901    AssertPtrReturn(pcbDest, VERR_INVALID_POINTER);
    900902
    901     PBMINFOHEADER pBitmapInfoHeader = (PBMINFOHEADER)pvSrc;
     903    PWINHDR pBmpWinHdr = (PWINHDR)pvSrc;
    902904    /** @todo Support all the many versions of the DIB headers. */
    903     if (   cbSrc < sizeof(BMINFOHEADER)
    904         || RT_LE2H_U32(pBitmapInfoHeader->uSize) < sizeof(BMINFOHEADER)
    905         || RT_LE2H_U32(pBitmapInfoHeader->uSize) != sizeof(BMINFOHEADER))
     905    if (   cbSrc < sizeof(WINHDR)
     906        || RT_LE2H_U32(pBmpWinHdr->Size) < sizeof(WINHDR)
     907        || RT_LE2H_U32(pBmpWinHdr->Size) != sizeof(WINHDR))
    906908    {
    907909        return VERR_INVALID_PARAMETER;
    908910    }
    909911
    910     size_t offPixel = sizeof(BMFILEHEADER)
    911                     + RT_LE2H_U32(pBitmapInfoHeader->uSize)
    912                     + RT_LE2H_U32(pBitmapInfoHeader->uClrUsed) * sizeof(uint32_t);
     912    size_t offPixel = sizeof(BMPINFO)
     913                    + RT_LE2H_U32(pBmpWinHdr->Size)
     914                    + RT_LE2H_U32(pBmpWinHdr->ClrUsed) * sizeof(uint32_t);
    913915    if (cbSrc < offPixel)
    914916        return VERR_INVALID_PARAMETER;
    915917
    916     size_t cbDst = sizeof(BMFILEHEADER) + cbSrc;
     918    size_t cbDst = sizeof(BMPINFO) + cbSrc;
    917919
    918920    void *pvDest = RTMemAlloc(cbDst);
     
    920922        return VERR_NO_MEMORY;
    921923
    922     PBMFILEHEADER pFileHeader = (PBMFILEHEADER)pvDest;
    923 
    924     pFileHeader->uType        = BITMAPHEADERMAGIC;
    925     pFileHeader->uSize        = (uint32_t)RT_H2LE_U32(cbDst);
    926     pFileHeader->uReserved1   = pFileHeader->uReserved2 = 0;
    927     pFileHeader->uOffBits     = (uint32_t)RT_H2LE_U32(offPixel);
    928 
    929     memcpy((uint8_t *)pvDest + sizeof(BMFILEHEADER), pvSrc, cbSrc);
     924    PBMPINFO pBmpHdr = (PBMPINFO)pvDest;
     925
     926    pBmpHdr->Type        = BMP_HDR_MAGIC;
     927    pBmpHdr->FileSize    = (uint32_t)RT_H2LE_U32(cbDst);
     928    pBmpHdr->Reserved1   = pBmpHdr->Reserved2 = 0;
     929    pBmpHdr->Offset      = (uint32_t)RT_H2LE_U32(offPixel);
     930
     931    memcpy((uint8_t *)pvDest + sizeof(BMPINFO), pvSrc, cbSrc);
    930932
    931933    *ppvDest = pvDest;
     
    943945    AssertPtrReturn(pcbDest, VERR_INVALID_POINTER);
    944946
    945     PBMFILEHEADER pFileHeader = (PBMFILEHEADER)pvSrc;
    946     if (   cbSrc < sizeof(BMFILEHEADER)
    947         || pFileHeader->uType != BITMAPHEADERMAGIC
    948         || RT_LE2H_U32(pFileHeader->uSize) != cbSrc)
     947    PBMPINFO pBmpHdr = (PBMPINFO)pvSrc;
     948    if (   cbSrc < sizeof(BMPINFO)
     949        || pBmpHdr->Type != BMP_HDR_MAGIC
     950        || RT_LE2H_U32(pBmpHdr->FileSize) != cbSrc)
    949951    {
    950952        return VERR_INVALID_PARAMETER;
    951953    }
    952954
    953     *ppvDest = ((uint8_t *)pvSrc) + sizeof(BMFILEHEADER);
    954     *pcbDest = cbSrc - sizeof(BMFILEHEADER);
     955    *ppvDest = ((uint8_t *)pvSrc) + sizeof(BMPINFO);
     956    *pcbDest = cbSrc - sizeof(BMPINFO);
    955957
    956958    return VINF_SUCCESS;
Note: See TracChangeset for help on using the changeset viewer.

© 2024 Oracle Support Privacy / Do Not Sell My Info Terms of Use Trademark Policy Automated Access Etiquette