Handle atoms "# non number" (oracle client).
This commit is contained in:
parent
829445172e
commit
88065baf13
@ -167,6 +167,23 @@ static WORD ATOM_Hash(
|
|||||||
return hash % entries;
|
return hash % entries;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static BOOL32 ATOM_IsIntAtom(LPCSTR atomstr,WORD *atomid) {
|
||||||
|
LPSTR xend;
|
||||||
|
|
||||||
|
if (!HIWORD(atomstr)) {
|
||||||
|
*atomid = LOWORD(atomstr);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
if (atomstr[0]!='#')
|
||||||
|
return FALSE;
|
||||||
|
*atomid=strtol(atomstr+1,&xend,10);
|
||||||
|
if (*xend) {
|
||||||
|
FIXME(atom,"found atom named '%s'\n",atomstr);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ATOM_AddAtom
|
* ATOM_AddAtom
|
||||||
@ -189,10 +206,12 @@ static ATOM ATOM_AddAtom(
|
|||||||
ATOMENTRY * entryPtr;
|
ATOMENTRY * entryPtr;
|
||||||
ATOMTABLE * table;
|
ATOMTABLE * table;
|
||||||
int len, ae_len;
|
int len, ae_len;
|
||||||
|
WORD iatom;
|
||||||
|
|
||||||
TRACE(atom,"0x%x, %s\n", selector, str);
|
TRACE(atom,"0x%x, %s\n", selector, str);
|
||||||
|
|
||||||
if (str[0] == '#') return atoi( &str[1] ); /* Check for integer atom */
|
if (ATOM_IsIntAtom(str,&iatom))
|
||||||
|
return iatom;
|
||||||
if ((len = strlen( str )) > MAX_ATOM_LEN) len = MAX_ATOM_LEN;
|
if ((len = strlen( str )) > MAX_ATOM_LEN) len = MAX_ATOM_LEN;
|
||||||
if (!(table = ATOM_GetTable( selector, TRUE ))) return 0;
|
if (!(table = ATOM_GetTable( selector, TRUE ))) return 0;
|
||||||
hash = ATOM_Hash( table->size, str, len );
|
hash = ATOM_Hash( table->size, str, len );
|
||||||
@ -280,13 +299,13 @@ static ATOM ATOM_FindAtom(
|
|||||||
LPCSTR str /* [in] Pointer to string to find */
|
LPCSTR str /* [in] Pointer to string to find */
|
||||||
) {
|
) {
|
||||||
ATOMTABLE * table;
|
ATOMTABLE * table;
|
||||||
WORD hash;
|
WORD hash,iatom;
|
||||||
HANDLE16 entry;
|
HANDLE16 entry;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
TRACE(atom,"%x, %s\n", selector, str);
|
TRACE(atom,"%x, %s\n", selector, str);
|
||||||
|
if (ATOM_IsIntAtom(str,&iatom))
|
||||||
if (str[0] == '#') return atoi( &str[1] ); /* Check for integer atom */
|
return iatom;
|
||||||
if ((len = strlen( str )) > 255) len = 255;
|
if ((len = strlen( str )) > 255) len = 255;
|
||||||
if (!(table = ATOM_GetTable( selector, FALSE ))) return 0;
|
if (!(table = ATOM_GetTable( selector, FALSE ))) return 0;
|
||||||
hash = ATOM_Hash( table->size, str, len );
|
hash = ATOM_Hash( table->size, str, len );
|
||||||
|
Loading…
x
Reference in New Issue
Block a user