ReadString

NTSTATUS __stdcall ReadString(
        INT64 a1,
        INT64 a2,
        INT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        _FILE *File,
        INT64 a8,
        INT64 a9){
  _WORD **v9; 
  char v10; 
  _WORD *v13; 
  int v14; 
  int v15; 
  INT64 v16; 
  int v17; 
  int v18; 
  _iobuf *v19; 
  int v20; 
  int v21; 
  _WORD *v22; 
  _WORD *v24; 
  char v25; 
  INT64 v26; 
  int v27; 

  v26 = a2;
  v9 = (_WORD **)a5;
  v10 = a1;
  v13 = *(_WORD **)a5;
  v14 = -((a1 & 8) != 0);
  --*(_DWORD *)a4;
  v15 = *(_DWORD *)a3;
  v27 = v14;
  if( v15 != -1 )
    ungetc_nolock(v15, (FILE *)File);
  v16 = a8 - 1;
  if( (v10 & 0x10) != 0 )
    v16 = a8;
  v17 = v10 & 1;
  LODWORD(a5) = v17;
  while( 1 )
  {
    if( v17 )
    {
      v18 = a6;
      LODWORD(a6) = a6 - 1;
      if( !v18 )
        goto LABEL_31;
    }
    v19 = (_iobuf *)File;
    ++*(_DWORD *)a4;
    v20 = inc(v19);
    *(_DWORD *)a3 = v20;
    if( v20 == -1 )
      break;
    if( (v10 & 0x10) == 0 && ((v10 & 0x20) == 0 || v20 >= 9 && v20 <= 13 || v20 == 32) )
    {
      if( (v10 & 0x40) == 0 )
        break;
      if( v20 < 0 )
        break;
      if( v20 < v20 >> 3 )
        break;
      v21 = v27 ^ *(char *)((v20 >> 3) + v26);
      if( !_bittest(&v21, v20 & 7) )
        break;
    }
    if( (v10 & 4) != 0 )
    {
      v13 = (_WORD *)((char *)v13 + 1);
    }
    else
    {
      if( !v16 )
      {
        if( (v10 & 2) != 0 )
          *v13 = 0;
        else
          *(_BYTE *)v13 = 0;
        return -1;
      }
      v22 = *v9;
      --v16;
      if( (v10 & 2) != 0 )
      {
        *v22 = (unsigned __int16)&v25;
        ++*v9;
      }
      else
      {
        *(_BYTE *)v22 = *(_BYTE *)a3;
        *v9 = (_WORD *)((char *)*v9 + 1);
      }
    }
    v17 = a5;
  }
  --*(_DWORD *)a4;
  if( *(_DWORD *)a3 != -1 )
    ungetc_nolock(*(_DWORD *)a3, (FILE *)File);
LABEL_31:
  if( v13 == *v9 )
    return -1;
  if( (v10 & 4) == 0 )
  {
    ++*(_DWORD *)a9;
    if( (v10 & 0x10) == 0 )
    {
      v24 = *v9;
      if( (v10 & 2) != 0 )
        *v24 = 0;
      else
        *(_BYTE *)v24 = 0;
    }
  }
  return 0;
}

Referenced by:

ReadStringDelimited
input_s