Windows2000/private/inet/urlmon/utils/ccompapi.cxx
2020-09-30 17:12:32 +02:00

120 lines
2.4 KiB
C++
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Microsoft Windows
// Copyright (C) Microsoft Corporation, 1993 - 1993.
// File: ccompapi.cxx
// Contents: common compobj API Worker routines used by com, stg, scm etc
// Classes:
// Functions:
// History: 31-Dec-93 ErikGav Chicago port
#include <windows.h>
#include <ole2sp.h>
#include <ole2com.h>
NAME_SEG(CompApi)
ASSERTDATA
static const BYTE GuidMap[] = { 3, 2, 1, 0, '-', 5, 4, '-', 7, 6, '-',
8, 9, '-', 10, 11, 12, 13, 14, 15 };
static const WCHAR wszDigits[] = L"0123456789ABCDEF";
// Function: wStringFromGUID2 (internal)
// Synopsis: converts GUID into {...} form without leading identifier;
// Arguments: [rguid] - the guid to convert
// [lpszy] - buffer to hold the results
// [cbMax] - sizeof the buffer
// Returns: amount of data copied to lpsz if successful
// 0 if buffer too small.
INTERNAL_(int) wStringFromGUID2(REFGUID rguid, LPWSTR lpsz, int cbMax)
{
int i;
LPWSTR p = lpsz;
const BYTE * pBytes = (const BYTE *) &rguid;
*p++ = L'{';
for (i = 0; i < sizeof(GuidMap); i++)
{
if (GuidMap[i] == '-')
{
*p++ = L'-';
}
else
{
*p++ = wszDigits[ (pBytes[GuidMap[i]] & 0xF0) >> 4 ];
*p++ = wszDigits[ (pBytes[GuidMap[i]] & 0x0F) ];
}
}
*p++ = L'}';
*p = L'\0';
return GUIDSTR_MAX;
}
#ifdef _CHICAGO_
static const CHAR szDigits[] = "0123456789ABCDEF";
// Function: wStringFromGUID2A (internal)
// Synopsis: Ansi version of wStringFromGUID2 (for Win95 Optimizations)
// Arguments: [rguid] - the guid to convert
// [lpszy] - buffer to hold the results
// [cbMax] - sizeof the buffer
// Returns: amount of data copied to lpsz if successful
// 0 if buffer too small.
INTERNAL_(int) wStringFromGUID2A(REFGUID rguid, LPSTR lpsz, int cbMax) // internal
{
int i;
LPSTR p = lpsz;
const BYTE * pBytes = (const BYTE *) &rguid;
*p++ = '{';
for (i = 0; i < sizeof(GuidMap); i++)
{
if (GuidMap[i] == '-')
{
*p++ = '-';
}
else
{
*p++ = szDigits[ (pBytes[GuidMap[i]] & 0xF0) >> 4 ];
*p++ = szDigits[ (pBytes[GuidMap[i]] & 0x0F) ];
}
}
*p++ = '}';
*p = '\0';
return GUIDSTR_MAX;
}
#endif