Example #1
0
static UnshieldReader* unshield_reader_create(/*{{{*/
    Unshield* unshield, 
    int index,
    FileDescriptor* file_descriptor)
{
  bool success = false;
  
  UnshieldReader* reader = NEW1(UnshieldReader);
  if (!reader)
    return NULL;

  reader->unshield          = unshield;
  reader->index             = index;
  reader->file_descriptor   = file_descriptor;

  for (;;)
  {
    if (!unshield_reader_open_volume(reader, file_descriptor->volume))
    {
      unshield_error("Failed to open volume %i",
          file_descriptor->volume);
      goto exit;
    }

    /* Start with the correct volume for IS5 cabinets */
    if (reader->unshield->header_list->major_version == 5 &&
        index > (int)reader->volume_header.last_file_index)
    {
      unshield_trace("Trying next volume...");
      file_descriptor->volume++;
      continue;
    }
      
    break;  
  };

  success = true;

exit:
  if (success)
    return reader;

  FREE(reader);
  return NULL;
}/*}}}*/
double lowNE6SSM_convergence_tester<Two_scale>::max_rel_diff() const
{
   const lowNE6SSM<Two_scale>* ol = get_last_iteration_model();
   const lowNE6SSM<Two_scale>* ne = get_model();

   double diff[81] = { 0 };

   diff[0] = MaxRelDiff(OLD1(MGlu),NEW1(MGlu));
   diff[1] = MaxRelDiff(OLD1(MChaP),NEW1(MChaP));
   diff[2] = MaxRelDiff(OLD1(MVZp),NEW1(MVZp));
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 3] = MaxRelDiff(OLD(MSd,i),NEW(MSd,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 9] = MaxRelDiff(OLD(MSv,i),NEW(MSv,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 12] = MaxRelDiff(OLD(MSu,i),NEW(MSu,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 18] = MaxRelDiff(OLD(MSe,i),NEW(MSe,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 24] = MaxRelDiff(OLD(MSDX,i),NEW(MSDX,i));
   }
   for (unsigned i = 0; i < 5; ++i) {
      diff[i + 30] = MaxRelDiff(OLD(Mhh,i),NEW(Mhh,i));
   }
   for (unsigned i = 2; i < 5; ++i) {
      diff[i + 35] = MaxRelDiff(OLD(MAh,i),NEW(MAh,i));
   }
   for (unsigned i = 1; i < 2; ++i) {
      diff[i + 40] = MaxRelDiff(OLD(MHpm,i),NEW(MHpm,i));
   }
   for (unsigned i = 0; i < 8; ++i) {
      diff[i + 42] = MaxRelDiff(OLD(MChi,i),NEW(MChi,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 50] = MaxRelDiff(OLD(MCha,i),NEW(MCha,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 52] = MaxRelDiff(OLD(MFDX,i),NEW(MFDX,i));
   }
   for (unsigned i = 0; i < 7; ++i) {
      diff[i + 55] = MaxRelDiff(OLD(MSHI0,i),NEW(MSHI0,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 62] = MaxRelDiff(OLD(MSHIPM,i),NEW(MSHIPM,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 66] = MaxRelDiff(OLD(MChaI,i),NEW(MChaI,i));
   }
   for (unsigned i = 0; i < 7; ++i) {
      diff[i + 68] = MaxRelDiff(OLD(MChiI,i),NEW(MChiI,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 75] = MaxRelDiff(OLD(MSHp0,i),NEW(MSHp0,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 77] = MaxRelDiff(OLD(MSHpp,i),NEW(MSHpp,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 79] = MaxRelDiff(OLD(MChiP,i),NEW(MChiP,i));
   }

   return *std::max_element(diff, diff + 81);

}
Example #3
0
static FileDescriptor* unshield_read_file_descriptor(Unshield* unshield, int index)
{
  /* XXX: multi-volume support... */
  Header* header = unshield->header_list;
  uint8_t* p = NULL;
  uint8_t* saved_p = NULL;
  FileDescriptor* fd = NEW1(FileDescriptor);

  switch (header->major_version)
  {
    case 0:
    case 5:
      saved_p = p = header->data +
          header->common.cab_descriptor_offset +
          header->cab.file_table_offset +
          header->file_table[header->cab.directory_count + index];

#if VERBOSE
      unshield_trace("File descriptor offset %i: %08x", index, p - header->data);
#endif
 
      fd->volume            = header->index;

      fd->name_offset       = READ_UINT32(p); p += 4;
      fd->directory_index   = READ_UINT32(p); p += 4;

      fd->flags             = READ_UINT16(p); p += 2;

      fd->expanded_size     = READ_UINT32(p); p += 4;
      fd->compressed_size   = READ_UINT32(p); p += 4;
      p += 0x14;
      fd->data_offset       = READ_UINT32(p); p += 4;
      
#if VERBOSE >= 2
      unshield_trace("Name offset:      %08x", fd->name_offset);
      unshield_trace("Directory index:  %08x", fd->directory_index);
      unshield_trace("Flags:            %04x", fd->flags);
      unshield_trace("Expanded size:    %08x", fd->expanded_size);
      unshield_trace("Compressed size:  %08x", fd->compressed_size);
      unshield_trace("Data offset:      %08x", fd->data_offset);
#endif

      if (header->major_version == 5)
      {
        memcpy(fd->md5, p, 0x10); p += 0x10;
        assert((p - saved_p) == 0x3a);
      }

      break;

    case 6:
    case 7:
    case 8:
    case 9:
    case 10:
    case 11:
    case 12:
    case 13:
    default:
      saved_p = p = header->data +
          header->common.cab_descriptor_offset +
          header->cab.file_table_offset +
          header->cab.file_table_offset2 +
          index * 0x57;
      
#if VERBOSE
      unshield_trace("File descriptor offset: %08x", p - header->data);
#endif
      fd->flags             = READ_UINT16(p); p += 2;
      fd->expanded_size     = READ_UINT32(p); p += 4;
      p += 4;
      fd->compressed_size   = READ_UINT32(p); p += 4;
      p += 4;
      fd->data_offset       = READ_UINT32(p); p += 4;
      p += 4;
      memcpy(fd->md5, p, 0x10); p += 0x10;
      p += 0x10;
      fd->name_offset       = READ_UINT32(p); p += 4;
      fd->directory_index   = READ_UINT16(p); p += 2;

      assert((p - saved_p) == 0x40);
      
      p += 0xc;
      fd->link_previous     = READ_UINT32(p); p += 4;
      fd->link_next         = READ_UINT32(p); p += 4;
      fd->link_flags        = *p; p ++;

#if VERBOSE
      if (fd->link_flags != LINK_NONE)
      {
        unshield_trace("Link: previous=%i, next=%i, flags=%i",
            fd->link_previous, fd->link_next, fd->link_flags);
      }
#endif
      
      fd->volume            = READ_UINT16(p); p += 2;

      assert((p - saved_p) == 0x57);
      break;
  }

  if (!(fd->flags & FILE_COMPRESSED) &&
      fd->compressed_size != fd->expanded_size)
  {
    unshield_warning("File is not compressed but compressed size is %08x and expanded size is %08x",
        fd->compressed_size, fd->expanded_size);
  }

  return fd;
}
double E6SSM_convergence_tester<Two_scale>::max_rel_diff() const
{
   const E6SSM<Two_scale>* ol = get_last_iteration_model();
   const E6SSM<Two_scale>* ne = get_model();

   double diff[73] = { 0 };

   diff[0] = MaxRelDiff(OLD1(MGlu),NEW1(MGlu));
   diff[1] = MaxRelDiff(OLD1(MChaP),NEW1(MChaP));
   diff[2] = MaxRelDiff(OLD1(MVZp),NEW1(MVZp));
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 3] = MaxRelDiff(OLD(MSd,i),NEW(MSd,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 9] = MaxRelDiff(OLD(MSv,i),NEW(MSv,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 12] = MaxRelDiff(OLD(MSu,i),NEW(MSu,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 18] = MaxRelDiff(OLD(MSe,i),NEW(MSe,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 24] = MaxRelDiff(OLD(MSDX,i),NEW(MSDX,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 30] = MaxRelDiff(OLD(Mhh,i),NEW(Mhh,i));
   }
   for (unsigned i = 2; i < 3; ++i) {
      diff[i + 33] = MaxRelDiff(OLD(MAh,i),NEW(MAh,i));
   }
   for (unsigned i = 1; i < 2; ++i) {
      diff[i + 36] = MaxRelDiff(OLD(MHpm,i),NEW(MHpm,i));
   }
   for (unsigned i = 0; i < 6; ++i) {
      diff[i + 38] = MaxRelDiff(OLD(MChi,i),NEW(MChi,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 44] = MaxRelDiff(OLD(MCha,i),NEW(MCha,i));
   }
   for (unsigned i = 0; i < 3; ++i) {
      diff[i + 46] = MaxRelDiff(OLD(MFDX,i),NEW(MFDX,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 49] = MaxRelDiff(OLD(MSHI0,i),NEW(MSHI0,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 53] = MaxRelDiff(OLD(MSHIp,i),NEW(MSHIp,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 57] = MaxRelDiff(OLD(MChaI,i),NEW(MChaI,i));
   }
   for (unsigned i = 0; i < 4; ++i) {
      diff[i + 59] = MaxRelDiff(OLD(MChiI,i),NEW(MChiI,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 63] = MaxRelDiff(OLD(MSSI0,i),NEW(MSSI0,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 65] = MaxRelDiff(OLD(MFSI,i),NEW(MFSI,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 67] = MaxRelDiff(OLD(MSHp0,i),NEW(MSHp0,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 69] = MaxRelDiff(OLD(MSHpp,i),NEW(MSHpp,i));
   }
   for (unsigned i = 0; i < 2; ++i) {
      diff[i + 71] = MaxRelDiff(OLD(MChiP,i),NEW(MChiP,i));
   }

   return *std::max_element(diff, diff + 73);

}