RtlEthernetStringToAddressW

NTSTATUS __stdcall RtlEthernetStringToAddressW(WCHAR *String, WCHAR **Terminator, _DL_EUI48 *Addr){
  int *v4; 
  int v7; 
  char v8; 
  wint_t v9; 
  int v11; 
  __int16 v12; 
  char v13; 

  v4 = &v11;
  while( 1 )
  {
    v7 = 0;
    v8 = 0;
    while( 1 )
    {
      v9 = *String;
      if( !*String || v9 >= 0x80u )
        break;
      if( iswctype(v9, 4u) )
      {
        v8 = v9 + 16 * (v8 + 13);
      }
      else
      {
        if( !iswctype(v9, 0x80u) )
          break;
        v8 = v9 + 16 * v8 - (iswctype(v9, 2u) != 0 ? 97 : 65) + 10;
      }
      if( v7 == 2 )
        goto LABEL_15;
      ++String;
      ++v7;
    }
    if( *String != 45 && *String != 58 )
      break;
    if( v4 < (int *)((char *)&v12 + 1) )
    {
      *(_BYTE *)v4 = v8;
      ++String;
      v4 = (int *)((char *)v4 + 1);
      if( v7 == 2 )
        continue;
    }
LABEL_15:
    *Terminator = String;
    return -1073741811;
  }
  *Terminator = String;
  if( v7 != 2 )
    return -1073741811;
  *(_BYTE *)v4 = v8;
  if( (char *)v4 + 1 != &v13 )
    return -1073741811;
  *(_DWORD *)Addr->Byte = v11;
  *(_WORD *)&Addr->Ei48.Byte[1] = v12;
  return 0;
}

Referenced by:

No references.