ReadStringDelimited

NTSTATUS __stdcall ReadStringDelimited(
        INT64 a1,
        INT64 a2,
        INT64 a3,
        INT64 a4,
        INT64 a5,
        INT64 a6,
        _FILE *File,
        INT64 a8,
        INT64 a9){
  __int64 v10; 
  unsigned int v12; 
  unsigned __int8 v13; 
  unsigned int v14; 
  __int64 v15; 
  bool v17; 
  unsigned __int8 *v18; 
  unsigned __int8 i; 
  unsigned __int8 v20; 
  unsigned __int8 v21; 
  unsigned __int8 v22; 
  __int64 v23; 
  unsigned __int64 v24; 
  int v25; 
  INT64 v27; 
  INT64 v28[2]; 
  __int128 v29; 

  v10 = *(_QWORD *)a2;
  v12 = a1;
  v13 = 0;
  v14 = a1 | 8;
  v15 = v10 + 1;
  *(_QWORD *)a2 = v10 + 1;
  v17 = *(_BYTE *)(v10 + 1) == 94;
  *(_OWORD *)v28 = 0i64;
  if( !v17 )
  {
    v15 = v10;
    v14 = v12;
  }
  v29 = 0i64;
  v18 = (unsigned __int8 *)(v15 + 1);
  i = *(_BYTE *)(v15 + 1);
  if( i != 93 )
    goto LABEL_6;
  v13 = 93;
  BYTE3(v28[1]) = 32;
  v18 = (unsigned __int8 *)(v15 + 2);
  for( i = *(_BYTE *)(v15 + 2); i != 93; i = *v18 )
  {
LABEL_6:
    if( i == 45 && v13 && (v20 = v18[1], v20 != 93) )
    {
      v21 = v18[1];
      v22 = v13;
      if( v13 >= v20 )
        v21 = v13;
      if( v13 >= v20 )
        v22 = v18[1];
      while( v22 <= v21 )
      {
        *((_BYTE *)v28 + ((unsigned __int64)v22 >> 3)) |= 1 << (v22 & 7);
        ++v22;
      }
      v13 = 0;
      v23 = 2i64;
    }
    else
    {
      v13 = i;
      v24 = (unsigned __int64)i >> 3;
      v25 = *((char *)v28 + v24) | (1 << (i & 7));
      v23 = 1i64;
      *((_BYTE *)v28 + v24) = v25;
    }
    v18 += v23;
  }
  *(_QWORD *)a2 = v18;
  LODWORD(v27) = a6;
  return ReadString(v14, (INT64)v28, a3, a4, a5, v27, File, a8, a9);
}

Referenced by:

input_s