Exemple #1
0
static CDFstatus ValidateADR (struct CDFstruct *CDF, vFILE *fp, OFF_T offset,
                              Logical debug)
{
    struct ADRstruct64 ADR;
    CDFstatus status;

    if (debug)
#if defined(win32) || defined(__MINGW32__)
        printf("  Checking ADR...@%I64d\n", offset);
#else
        printf("  Checking ADR...@%lld\n", offset);
#endif
    status = ReadADR64 (fp, offset,
                        ADR_RECORD, &ADR,
                        ADR_NULL);
    if (status != CDF_OK) return status;
    if (ADR.RecordType != ADR_)
        return QuitCDF ("CDF(ADR): record type is invalid ", offset,
                        4, 1, &(ADR.RecordType), 0, debug);
    if (ADR.RecordSize < ADR_BASE_SIZE64 ||
            ADR.RecordSize > ADR_MAX_SIZE64)
        return QuitCDF ("CDF(ADR): record size is invalid ", offset,
                        8, 1, &(ADR.RecordSize), 0, debug);
    if (ADR.ADRnext < 0 || ((ADR.Num < (GDR.NumAttr-1))  && ADR.ADRnext == 0))
        return QuitCDF ("CDF(ADR): offset to next ADR is invalid ", offset,
                        8, 1, &(ADR.ADRnext), 0, debug);
    if (ADR.AgrEDRhead < 0 || (ADR.NgrEntries > 0 && ADR.AgrEDRhead == 0))
        return QuitCDF ("CDF(ADR): offset to AgrEDR is invalid ", offset,
                        8, 1, &(ADR.AgrEDRhead), 0, debug);
    if (!ValidAttrScope(ADR.Scope))
        return QuitCDF ("CDF(ADR): scope is invalid ", offset,
                        4, 1, &(ADR.Scope), 0, debug);
    if (ADR.Num < 0 || ADR.Num > GDR.NumAttr)
        return QuitCDF ("CDF(ADR): attribute number is invalid ", offset,
                        4, 2, &(ADR.Num), &(GDR.NumAttr), debug);
    if (ADR.NgrEntries < 0)
        return QuitCDF ("CDF(ADR): number of g/rEntries is invalid ", offset,
                        4, 1, &(ADR.NgrEntries), 0, debug);
    if (ADR.MAXgrEntry < -1)
        return QuitCDF ("CDF(ADR): max g/rEntry is invalid ", offset,
                        4, 1, &(ADR.MAXgrEntry), 0, debug);
    if ((ADR.Scope == VARIABLE_SCOPE) && (ADR.MAXgrEntry < (ADR.NgrEntries-1)))
        return QuitCDF ("CDF(ADR): max rEntry is invalid ", offset,
                        4, 2, &(ADR.MAXgrEntry), &(ADR.NgrEntries), debug);
    if (ADR.AzEDRhead < 0 || (ADR.NzEntries > 0 && ADR.AzEDRhead == 0))
        return QuitCDF ("CDF(ADR): offset to next AzEDR is invalid ", offset,
                        8, 1, &(ADR.AzEDRhead), 0, debug);
    if ((ADR.Scope == VARIABLE_SCOPE) && (ADR.MAXzEntry < (ADR.NzEntries-1)))
        return QuitCDF ("CDF(ADR): max zEntry is invalid ", offset,
                        4, 2, &(ADR.MAXzEntry), &(ADR.NzEntries), debug);
    if (!ValidAttrName(ADR.Name))
        return QuitCDF ("CDF(ADR): attribute name is invalid ",  offset,
                        0, 1, ADR.Name, 0, debug);
    return CDF_OK;
}
Exemple #2
0
CDFstatus ValidateADR (struct CDFstruct *CDF, vFILE *fp, Int32 offset, 
                       Logical debug)
{
  struct ADRstruct ADR;
  CDFstatus status;

  if (debug)
    printf("  Checking ADR...@%d\n", (int) offset);
  status = ReadADR (fp, offset, 
                    ADR_RECORD, &ADR,
                    ADR_NULL);
  if (status != CDF_OK) return status;
  if (ADR.RecordType != ADR_)
    return QuitCDF ("CDF: record type is invalid ",
                    4, 1, &(ADR.RecordType), 0, debug);

  if (ADR.RecordSize < ADR_BASE_SIZE ||
      ADR.RecordSize > ADR_MAX_SIZE) 
    return QuitCDF ("CDF: record size is invalid ",
                    4, 1, &(ADR.RecordSize), 0, debug);
  if (ADR.ADRnext < 0 || ((ADR.Num < (GDR.NumAttr-1))  && ADR.ADRnext == 0)) 
    return QuitCDF ("CDF: offset to next ADR is invalid ",
                    4, 1, &(ADR.ADRnext), 0, debug);
  if (ADR.AgrEDRhead < 0 || (ADR.NgrEntries > 0 && ADR.AgrEDRhead == 0)) 
    return QuitCDF ("CDF: record size is invalid ",
                    4, 1, &(ADR.AgrEDRhead), 0, debug);
/*
  if ((ADR.Scope == GLOBAL_SCOPE) && (ADR.NzEntries > 0))
    return QuitCDF ("CDF: attribute zEntries exist for a global attribute ",
                    4, 1, &(ADR.NzEntries), 0, debug);
*/
  if (!ValidAttrScope(ADR.Scope)) 
    return QuitCDF ("CDF: scope is invalid ",
                    4, 1, &(ADR.Scope), 0, debug);
  if (ADR.Num < 0 || ADR.Num > GDR.NumAttr) 
    return QuitCDF ("CDF: attribute number is invalid ",
                    4, 2, &(ADR.Num), &(GDR.NumAttr), debug);
  if (ADR.NgrEntries < 0) 
    return QuitCDF ("CDF: number of g/rEntries is invalid ",
                    4, 1, &(ADR.NgrEntries), 0, debug);
/*
  if ((ADR.Scope == VARIABLE_SCOPE) && (ADR.NgrEntries > CDF->NrVars)) 
    return QuitCDF ("CDF: number of rEntries is invalid ",
                    4, 1, &(ADR.NgrEntries), 0, debug);
*/
  if (ADR.MAXgrEntry < -1) 
    return QuitCDF ("CDF: max g/rEntry is invalid ",
                    4, 1, &(ADR.MAXgrEntry), 0, debug);
  if ((ADR.Scope == VARIABLE_SCOPE) && (ADR.MAXgrEntry < (ADR.NgrEntries-1)))
    return QuitCDF ("CDF: max rEntry is invalid ",
                    4, 2, &(ADR.MAXgrEntry), &(ADR.NgrEntries), debug);
  if (ADR.AzEDRhead < 0 || (ADR.NzEntries > 0 && ADR.AzEDRhead == 0)) 
    return QuitCDF ("CD2: offset to next AzEDR is invalid ",
                    4, 1, &(ADR.AzEDRhead), 0, debug);
/*
  if (ADR.NzEntries < 0 || ((ADR.Scope == VARIABLE_SCOPE) && 
                            (ADR.NzEntries > CDF->NzVars)))
    return QuitCDF ("CDF: number of zEntries is invalid ",
                    4, 2, &(ADR.NzEntries), &(CDF->NzVars), debug);
  if (ADR.MAXzEntry < -1 || ((ADR.Scope == VARIABLE_SCOPE) &&
                             (ADR.MAXzEntry > CDF->NzVars)))
    return QuitCDF ("CDF: max zEntry is invalid ",
                    4, 2, &(ADR.MAXzEntry), &(CDF->NzVars), debug);
*/
  if ((ADR.Scope == VARIABLE_SCOPE) && (ADR.MAXzEntry < (ADR.NzEntries-1)))
    return QuitCDF ("CDF: max zEntry is invalid ",
                    4, 2, &(ADR.MAXzEntry), &(ADR.NzEntries), debug);
  if (!ValidAttrName(ADR.Name)) 
    return QuitCDF ("CDF: attribute name is invalid ", 
                    0, 1, ADR.Name, 0, debug);
  return CDF_OK;
}