Mike McCormack wrote:
Index: dlls/ole32/compobj.c
RCS file: /home/wine/wine/dlls/ole32/compobj.c,v retrieving revision 1.154 diff -u -p -r1.154 compobj.c --- dlls/ole32/compobj.c 20 Jun 2005 14:18:04 -0000 1.154 +++ dlls/ole32/compobj.c 4 Jul 2005 14:51:31 -0000 @@ -787,6 +787,26 @@ HRESULT WINAPI CoCreateGuid(GUID *pguid) return UuidCreate(pguid); }
+static LPBYTE validate_clsid_string( LPCSTR s ) +{
- int i;
- if (strlen(s) != 38)
return NULL;
- if ((s[0]!='{') || (s[9]!='-') || (s[14]!='-') || (s[19]!='-') || (s[24]!='-') || (s[37]!='}'))
return NULL;
- for (i=1; i<37; i++) {
if ((i == 9)||(i == 14)||(i == 19)||(i == 24)) continue;
if (!(((s[i] >= '0') && (s[i] <= '9')) ||
((s[i] >= 'a') && (s[i] <= 'f')) ||
((s[i] >= 'A') && (s[i] <= 'F'))))
return NULL;
- }
- return (LPBYTE) s;
+}
/******************************************************************************
CLSIDFromString [OLE32.@]
IIDFromString [OLE32.@]
@@ -813,28 +833,16 @@ HRESULT WINAPI CoCreateGuid(GUID *pguid) */ HRESULT WINAPI __CLSIDFromStringA(LPCSTR idstr, CLSID *id) {
- const BYTE *s = (const BYTE *) idstr;
- int i; BYTE table[256];
- LPBYTE s;
- int i;
- if (!s)
s = "{00000000-0000-0000-0000-000000000000}";
- else { /* validate the CLSID string */
if (strlen(s) != 38)
return CO_E_CLASSSTRING;
if ((s[0]!='{') || (s[9]!='-') || (s[14]!='-') || (s[19]!='-') || (s[24]!='-') || (s[37]!='}'))
return CO_E_CLASSSTRING;
for (i=1; i<37; i++) {
if ((i == 9)||(i == 14)||(i == 19)||(i == 24)) continue;
if (!(((s[i] >= '0') && (s[i] <= '9')) ||
((s[i] >= 'a') && (s[i] <= 'f')) ||
((s[i] >= 'A') && (s[i] <= 'F'))))
return CO_E_CLASSSTRING;
}
- }
if (!idstr)
idstr = "{00000000-0000-0000-0000-000000000000}";
s = validate_clsid_string( idstr );
if( !s )
return CO_E_CLASSSTRING;
TRACE("%s -> %p\n", s, id);
I don't think there is any need to split the function into two as you can just use 'idstr' directly, instead of 's'. Also, note that this function will soon be converted into using WCHARs, but I don't think that should change anything.
Robert Shearman wrote:
I don't think there is any need to split the function into two as you can just use 'idstr' directly, instead of 's'. Also, note that this function will soon be converted into using WCHARs, but I don't think that should change anything.
One part of the function clearly validates the string, while the other part converts it. There's two logically seperate parts, and splitting the function makes that clear.
Mike