ReactOS 0.4.16-dev-2332-g4cba65d
stg_prop.c File Reference
#include <assert.h>
#include <stdarg.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "windef.h"
#include "winbase.h"
#include "winnls.h"
#include "winuser.h"
#include "wine/asm.h"
#include "wine/debug.h"
#include "wine/heap.h"
#include "oleauto.h"
Include dependency graph for stg_prop.c:

Go to the source code of this file.

Macros

#define COBJMACROS
 
#define BITS_PER_BYTE   8
 
#define CHARMASK   0x1f
 
#define BITS_IN_CHARMASK   5
 
#define NUM_ALPHA_CHARS   26
 

Functions

 WINE_DEFAULT_DEBUG_CHANNEL (storage)
 
HRESULT WINAPI FmtIdToPropStgName (const FMTID *rfmtid, LPOLESTR str)
 
HRESULT WINAPI PropStgNameToFmtId (const LPOLESTR str, FMTID *rfmtid)
 

Variables

static const WCHAR szSummaryInfo [] = L"\5SummaryInformation"
 
static const WCHAR szDocSummaryInfo [] = L"\5DocumentSummaryInformation"
 

Macro Definition Documentation

◆ BITS_IN_CHARMASK

#define BITS_IN_CHARMASK   5

Definition at line 66 of file stg_prop.c.

◆ BITS_PER_BYTE

#define BITS_PER_BYTE   8

Definition at line 64 of file stg_prop.c.

◆ CHARMASK

#define CHARMASK   0x1f

Definition at line 65 of file stg_prop.c.

◆ COBJMACROS

#define COBJMACROS

Definition at line 46 of file stg_prop.c.

◆ NUM_ALPHA_CHARS

#define NUM_ALPHA_CHARS   26

Definition at line 67 of file stg_prop.c.

Function Documentation

◆ FmtIdToPropStgName()

HRESULT WINAPI FmtIdToPropStgName ( const FMTID rfmtid,
LPOLESTR  str 
)

Definition at line 72 of file stg_prop.c.

73{
74 static const char fmtMap[] = "abcdefghijklmnopqrstuvwxyz012345";
75
76 TRACE("%s, %p\n", debugstr_guid(rfmtid), str);
77
78 if (!rfmtid) return E_INVALIDARG;
79 if (!str) return E_INVALIDARG;
80
87 else
88 {
89 const BYTE *fmtptr;
90 WCHAR *pstr = str;
91 ULONG bitsRemaining = BITS_PER_BYTE;
92
93 *pstr++ = 5;
94 for (fmtptr = (const BYTE *)rfmtid; fmtptr < (const BYTE *)rfmtid + sizeof(FMTID); )
95 {
96 ULONG i = *fmtptr >> (BITS_PER_BYTE - bitsRemaining);
97
98 if (bitsRemaining >= BITS_IN_CHARMASK)
99 {
100 *pstr = (WCHAR)(fmtMap[i & CHARMASK]);
101 if (bitsRemaining == BITS_PER_BYTE && *pstr >= 'a' &&
102 *pstr <= 'z')
103 *pstr += 'A' - 'a';
104 pstr++;
105 bitsRemaining -= BITS_IN_CHARMASK;
106 if (bitsRemaining == 0)
107 {
108 fmtptr++;
109 bitsRemaining = BITS_PER_BYTE;
110 }
111 }
112 else
113 {
114 if (++fmtptr < (const BYTE *)rfmtid + sizeof(FMTID))
115 i |= *fmtptr << bitsRemaining;
116 *pstr++ = (WCHAR)(fmtMap[i & CHARMASK]);
117 bitsRemaining += BITS_PER_BYTE - BITS_IN_CHARMASK;
118 }
119 }
120 *pstr = 0;
121 }
122 TRACE("returning %s\n", debugstr_w(str));
123 return S_OK;
124}
#define E_INVALIDARG
Definition: ddrawi.h:101
#define BITS_PER_BYTE
Definition: stg_prop.c:64
static const WCHAR szDocSummaryInfo[]
Definition: stg_prop.c:62
static const WCHAR szSummaryInfo[]
Definition: stg_prop.c:61
#define BITS_IN_CHARMASK
Definition: stg_prop.c:66
#define CHARMASK
Definition: stg_prop.c:65
#define lstrcpyW
Definition: compat.h:749
GLsizei GLenum const GLvoid GLsizei GLenum GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLint GLint GLint GLshort GLshort GLshort GLubyte GLubyte GLubyte GLuint GLuint GLuint GLushort GLushort GLushort GLbyte GLbyte GLbyte GLbyte GLdouble GLdouble GLdouble GLdouble GLfloat GLfloat GLfloat GLfloat GLint GLint GLint GLint GLshort GLshort GLshort GLshort GLubyte GLubyte GLubyte GLubyte GLuint GLuint GLuint GLuint GLushort GLushort GLushort GLushort GLboolean const GLdouble const GLfloat const GLint const GLshort const GLbyte const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLdouble const GLfloat const GLfloat const GLint const GLint const GLshort const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort const GLdouble const GLfloat const GLint const GLshort GLenum GLenum GLenum GLfloat GLenum GLint GLenum GLenum GLenum GLfloat GLenum GLenum GLint GLenum GLfloat GLenum GLint GLint GLushort GLenum GLenum GLfloat GLenum GLenum GLint GLfloat const GLubyte GLenum GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLint GLint GLsizei GLsizei GLint GLenum GLenum const GLvoid GLenum GLenum const GLfloat GLenum GLenum const GLint GLenum GLenum const GLdouble GLenum GLenum const GLfloat GLenum GLenum const GLint GLsizei GLuint GLfloat GLuint GLbitfield GLfloat GLint GLuint GLboolean GLenum GLfloat GLenum GLbitfield GLenum GLfloat GLfloat GLint GLint const GLfloat GLenum GLfloat GLfloat GLint GLint GLfloat GLfloat GLint GLint const GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat GLint GLfloat GLfloat const GLdouble const GLfloat const GLdouble const GLfloat GLint i
Definition: glfuncs.h:248
#define S_OK
Definition: intsafe.h:52
#define debugstr_guid
Definition: kernel32.h:35
#define debugstr_w
Definition: kernel32.h:32
const FMTID FMTID_UserDefinedProperties
const FMTID FMTID_DocSummaryInformation
const FMTID FMTID_SummaryInformation
#define IsEqualGUID(rguid1, rguid2)
Definition: guiddef.h:147
GUID FMTID
Definition: guiddef.h:94
const WCHAR * str
#define TRACE(s)
Definition: solgame.cpp:4
uint32_t ULONG
Definition: typedefs.h:59
__wchar_t WCHAR
Definition: xmlstorage.h:180
unsigned char BYTE
Definition: xxhash.c:193

Referenced by IPropertySetStorage_fnCreate(), IPropertySetStorage_fnDelete(), IPropertySetStorage_fnOpen(), and testFmtId().

◆ PropStgNameToFmtId()

HRESULT WINAPI PropStgNameToFmtId ( const LPOLESTR  str,
FMTID rfmtid 
)

Definition at line 129 of file stg_prop.c.

130{
132
133 TRACE("%s, %p\n", debugstr_w(str), rfmtid);
134
135 if (!rfmtid) return E_INVALIDARG;
136 if (!str) return STG_E_INVALIDNAME;
137
139 {
141 hr = S_OK;
142 }
143 else if (!lstrcmpiW(str, szSummaryInfo))
144 {
145 *rfmtid = FMTID_SummaryInformation;
146 hr = S_OK;
147 }
148 else
149 {
150 ULONG bits;
151 BYTE *fmtptr = (BYTE *)rfmtid - 1;
152 const WCHAR *pstr = str;
153
154 memset(rfmtid, 0, sizeof(*rfmtid));
155 for (bits = 0; bits < sizeof(FMTID) * BITS_PER_BYTE;
157 {
158 ULONG bitsUsed = bits % BITS_PER_BYTE, bitsStored;
159 WCHAR wc;
160
161 if (bitsUsed == 0)
162 fmtptr++;
163 wc = *++pstr - 'A';
164 if (wc > NUM_ALPHA_CHARS)
165 {
166 wc += 'A' - 'a';
167 if (wc > NUM_ALPHA_CHARS)
168 {
169 wc += 'a' - '0' + NUM_ALPHA_CHARS;
170 if (wc > CHARMASK)
171 {
172 WARN("invalid character (%d)\n", *pstr);
173 goto end;
174 }
175 }
176 }
177 *fmtptr |= wc << bitsUsed;
178 bitsStored = min(BITS_PER_BYTE - bitsUsed, BITS_IN_CHARMASK);
179 if (bitsStored < BITS_IN_CHARMASK)
180 {
181 wc >>= BITS_PER_BYTE - bitsUsed;
182 if (bits + bitsStored == sizeof(FMTID) * BITS_PER_BYTE)
183 {
184 if (wc != 0)
185 {
186 WARN("extra bits\n");
187 goto end;
188 }
189 break;
190 }
191 fmtptr++;
192 *fmtptr |= (BYTE)wc;
193 }
194 }
195 hr = S_OK;
196 }
197end:
198 return hr;
199}
#define WARN(fmt,...)
Definition: precomp.h:61
#define NUM_ALPHA_CHARS
Definition: stg_prop.c:67
int WINAPI lstrcmpiW(LPCWSTR str1, LPCWSTR str2)
Definition: locale.c:4171
GLuint GLuint end
Definition: gl.h:1545
GLenum GLint GLenum GLsizei GLsizei GLsizei GLint GLsizei const GLvoid * bits
Definition: glext.h:10929
#define bits
Definition: infblock.c:15
#define min(a, b)
Definition: monoChain.cc:55
#define memset(x, y, z)
Definition: compat.h:39
HRESULT hr
Definition: shlfolder.c:183
#define STG_E_INVALIDNAME
Definition: winerror.h:3680

Referenced by create_enum_stat_propset_stg(), and testFmtId().

◆ WINE_DEFAULT_DEBUG_CHANNEL()

WINE_DEFAULT_DEBUG_CHANNEL ( storage  )

Variable Documentation

◆ szDocSummaryInfo

const WCHAR szDocSummaryInfo[] = L"\5DocumentSummaryInformation"
static

Definition at line 62 of file stg_prop.c.

Referenced by FmtIdToPropStgName(), PropStgNameToFmtId(), and testFmtId().

◆ szSummaryInfo

const WCHAR szSummaryInfo[] = L"\5SummaryInformation"
static

Definition at line 61 of file stg_prop.c.

Referenced by FmtIdToPropStgName(), PropStgNameToFmtId(), testFmtId(), and testPropsHelper().