int FUN_0040991c(undefined1 param_1,uint *param_2,undefined1 *param_3,int param_4,int param_5,
                int param_6,int param_7)

{
  ushort uVar1;
  int iVar2;
  __off_t _Var3;
  int *piVar4;
  char *pcVar5;
  uint uVar6;
  ssize_t sVar7;
  uint uVar8;
  
  iVar2 = 0;
  if (-1 < (int)param_2[1]) {
    if ((param_5 == 1) &&
       (((0xff < *param_2 || (param_4 <= (int)(*param_2 + 1))) || (param_6 == 1)))) {
      *param_3 = param_1;
      param_3[1] = 0;
      close(param_2[1]);
      param_2[1] = 0xffffffff;
      iVar2 = 2;
    }
    else {
      _Var3 = lseek(param_2[1],param_7,0);
      if (_Var3 == param_7) {
        uVar6 = read(param_2[1],param_3 + 2,param_4 - 2)   //possible issue identified - semgrep
        if (-1 < (int)uVar6) {
          if (param_5 == 1) {
            *param_3 = param_1;
            param_3[1] = (char)uVar6;
          }
          else {
            sVar7 = read(param_2[1],param_3,1)   //possible issue identified - semgrep
            uVar8 = uVar6 & 0xffff;
            if (0 < sVar7) {
              uVar8 = uVar6 & 0x7fff | 0x8000;
            }
            g_short_reorder_buffer._0_1_ = (undefined1)(uVar8 >> 8);
            uVar1 = (ushort)(uVar8 << 8) | (ushort)(uVar8 >> 8);
            *param_3 = (undefined1)g_short_reorder_buffer;
            g_short_reorder_buffer = uVar1;
            param_3[1] = g_short_reorder_buffer._1_1_;
          }
          close(param_2[1]);
          param_2[1] = 0xffffffff;
          return uVar6 + 2;
        }
        piVar4 = __errno_location();
        pcVar5 = strerror(*piVar4);
        warn("write_icon_file_t: read of the iconfile FAILED, errno: %s",pcVar5);
      }
      else {
        piVar4 = __errno_location();
        pcVar5 = strerror(*piVar4);
        warn("write_icon_file_t: lseek to byte %d on the iconfile FAILED, errno: %s",param_7,pcVar5)
        ;
      }
      close(param_2[1]);
      param_2[1] = 0xffffffff;
      iVar2 = 0;
    }
  }
  return iVar2;
}