ReadString_0

__int64 __fastcall ReadString_0(
        char a1,
        __int64 a2,
        wint_t *a3,
        _DWORD *a4,
        __int64 a5,
        int a6,
        FILE *File,
        __int64 Src,
        __int64 a9){
  UINT8 *v12; 
  int v13; 
  unsigned __int64 v14; 
  int v15; 
  wint_t v17; 
  int v18; 
  char v19; 
  __int64 v20; 
  UINT8 *v22; 
  int v24; 
  v12 = *(UINT8 **)a5;
  --*a4;
  v24 = -((a1 & 8) != 0);
  if( *a3 != 0xFFFF )
    ungetwc_nolock(*a3, File);
  v13 = a1 & 0x10;
  v14 = Src - 1;
  if( (a1 & 0x10) != 0 )
    v14 = Src;
  v15 = a1 & 1;
  while( 1 )
  {
    if( v15 )
    {
      if( !a6-- )
        goto LABEL_38;
    }
    ++*a4;
    v17 = fgetwc_nolock(File);
    *a3 = v17;
    if( v17 == 0xFFFF )
      break;
    if( !v13 && ((a1 & 0x20) == 0 || v17 >= 9u && v17 <= 0xDu || v17 == 32) )
    {
      if( (a1 & 0x40) == 0 )
        break;
      if( v17 < (unsigned __int16)(v17 >> 3) )
        break;
      v18 = v24 ^ *(char *)((v17 >> 3) + a2);
      if( !_bittest(&v18, v17 & 7) )
        break;
    }
    if( (a1 & 4) != 0 )
    {
      v12 += 2;
LABEL_31:
      v15 = a1 & 1;
    }
    else
    {
      if( !v14 )
        goto LABEL_32;
      if( (a1 & 2) != 0 )
      {
        **(_WORD **)a5 = v17;
        *(_QWORD *)a5 += 2i64;
        --v14;
        goto LABEL_31;
      }
      if( v14 < _mb_cur_max )
      {
        LOBYTE(Src) = *(_BYTE *)a3;
        v19 = Src;
        if( (char)Src > 0 && (char)Src > v14 || (unsigned __int8)Src > 5u )
        {
LABEL_32:
          if( (a1 & 2) != 0 )
            *(_WORD *)v12 = 0;
          else
            *v12 = 0;
          return 0xFFFFFFFFi64;
        }
        memmove(*(UINT8 **)a5, (UINT8 *)&Src, (char)Src);
      }
      else
      {
        **(_BYTE **)a5 = *(_BYTE *)a3;
        v19 = **(_BYTE **)a5;
      }
      v15 = a1 & 1;
      if( v19 > 0 )
      {
        v20 = v19;
        *(_QWORD *)a5 += v19;
        v13 = a1 & 0x10;
        v14 -= v20;
        goto LABEL_31;
      }
      v13 = a1 & 0x10;
    }
  }
  --*a4;
  if( *a3 != 0xFFFF )
    ungetwc_nolock(*a3, File);
LABEL_38:
  if( v12 == *(UINT8 **)a5 )
    return 0xFFFFFFFFi64;
  if( (a1 & 4) == 0 )
  {
    ++*(_DWORD *)a9;
    if( !v13 )
    {
      v22 = *(UINT8 **)a5;
      if( (a1 & 2) != 0 )
        *(_WORD *)v22 = 0;
      else
        *v22 = 0;
    }
  }
  return 0i64;
}

Referenced by:

ReadStringDelimited_0
winput_s