int FUN_00409188(undefined1 param_1,void *param_2,undefined1 *param_3,int param_4,int param_5,
                int param_6)

{
  ushort uVar1;
  uint uVar2;
  int iVar3;
  uint __n;
  
  uVar2 = 0;
  do {
    __n = uVar2;
    uVar2 = __n + 2;
  } while (*(short *)((int)param_2 + __n) != 0);
  iVar3 = 0;
  if ((int)(__n + 1) < param_4) {
    uVar2 = __n & 0xffff;
    if (param_5 == 0) {
      g_short_reorder_buffer._0_1_ = (undefined1)(uVar2 >> 8);
      uVar1 = (ushort)(uVar2 << 8) | (ushort)(uVar2 >> 8);
      *param_3 = (undefined1)g_short_reorder_buffer;
      g_short_reorder_buffer = uVar1;
      param_3[1] = g_short_reorder_buffer._1_1_;
    }
    else {
      *param_3 = param_1;
      if (param_6 != 0) {
        param_3[1] = 0;
        return 2;
      }
      param_3[1] = (char)__n;
    }
    memcpy(param_3 + 2,param_2,__n)   //possible issue identified - semgrep
    iVar3 = __n + 2;
  }
  return iVar3;
}