/*
 *      Validates a version string by the extended JSR 56 grammar.
 */
int
JLI_ValidVersionString(char *version_string)
{
    char        *vs;
    char        *m1;
    char        *end;
    if ((version_string == NULL) || (JLI_StrLen(version_string) == 0))
        return (0);
    m1 = vs = JLI_StringDup(version_string);
    do {
        if ((end = JLI_StrChr(vs, ' ')) != NULL)
            *end = '\0';
        if (!valid_element(vs)) {
            JLI_MemFree(m1);
            return (0);
        }
        if (end != NULL)
            vs = end + 1;
    } while (end != NULL);
    JLI_MemFree(m1);
    return (1);
}
示例#2
0
文件: check.c 项目: kashif/evolver
int list_check()
{
  int type;
  element_id id;
  int numerr = 0;


  /* free_discards(DISCARDS_ALL); */
  for ( type = 0 ; type < NUMELEMENTS ; type++ )
  { 
    element_id backid = NULLID;

    if ( (web.representation == SIMPLEX)  && (type == EDGE) ) continue;
    #ifndef HASH_ID
    /* check free list */
    {  int freecount,maxfree;
     maxfree = web.skel[type].maxcount - web.skel[type].count
                 - web.skel[type].discard_count;
    id = web.skel[type].free;
    freecount = 0;
    while ( id != NULLID )
    { freecount++;
      if ( freecount > maxfree )
      { sprintf(msg,"Type %d freelist has too many elements: %d.\n",
            type,freecount);
        erroutstring(msg);
        if ( ++numerr > MAXERR )
        {erroutstring("Too many errors.\n"); return numerr;}
        break;
      }
      if ( id_type(id) != type )
      { sprintf(msg,"Type %d freelist has bad id %lX\n",type,(unsigned long)id);
        erroutstring(msg);
        if ( ++numerr > MAXERR )
        {erroutstring("Too many errors.\n"); return numerr;}
        break;
      }
      if ( elptr(id)->backchain != backid )
      { sprintf(msg,
         "Type %d freelist has bad backchain %X instead of %X for id %lX\n",
            type, (unsigned long)elptr(id)->backchain,(unsigned long)backid,
           (unsigned long)id);
        erroutstring(msg);
        if ( ++numerr > MAXERR )
        {erroutstring("Too many errors.\n"); return numerr;}
      }
      backid = id;
       
      id = elptr(id)->forechain;
    } /* end while */
    if ( backid != web.skel[type].freelast )
    { sprintf(msg,"Type %d freelist has bad freelast %lX instead of %lX.\n",
          type, (unsigned long)web.skel[type].freelast,(unsigned long)backid);
      erroutstring(msg);
    }

    if ( freecount != maxfree )
    { sprintf(msg,"Type %d freelist has %d elements instead of %d.\n",
          type,freecount,maxfree);
      erroutstring(msg);
    }
    if ( !equal_id(id,NULLID) )
    { sprintf(msg,"Type %d freelist last id is non-null: %lX\n",type,
          (unsigned long)id);
      erroutstring(msg);
    }
    }
    #endif
    
#ifndef MPI_EVOLVER
  { int usedcount,maxused,discards;
    element_id prev_id;

    /* check used list */
    maxused = web.skel[type].count;
    id = web.skel[type].used;
    prev_id = NULLID;
    usedcount = 0;
    discards = 0;
    while ( valid_id(id) )
    { 
      if ( valid_element(id) )
        usedcount++;
      else discards++;

      if ( usedcount > maxused )
      { sprintf(msg,"Type %d usedlist has too many elements: %d.\n",
            type,usedcount);
        erroutstring(msg);
        if ( ++numerr > MAXERR )
        {erroutstring("Too many errors.\n"); return numerr;}
        break;
      }
      if ( id_type(id) != type )
      { sprintf(msg,"Type %d usedlist has bad id %lX of type %d\n",
            type,(unsigned long)id,id_type(id));
        erroutstring(msg);
        if ( ++numerr > MAXERR )
        { erroutstring("Too many errors.\n"); return numerr;}
        break;
      }
      if ( !equal_id(prev_id,elptr(id)->backchain) )
      { sprintf(msg,"Type %d used list id %lX has backchain %lX instead of %lX\n",
              type,(unsigned long)id,(unsigned long)elptr(id)->backchain,
             (unsigned long)prev_id);
        erroutstring(msg);
        if ( ++numerr > MAXERR )
        {erroutstring("Too many errors.\n"); return numerr;}
      }
      prev_id = id;
      id = elptr(id)->forechain;
    } /* end while */
    if ( usedcount != maxused )
    { sprintf(msg,"Type %d usedlist has %d elements.\n",type,usedcount);
      erroutstring(msg);
    }
    if ( discards != web.skel[type].discard_count )
    { sprintf(msg,"Type %d usedlist has %d elements.\n",type,usedcount);
      erroutstring(msg);
    }
    if ( !equal_id(id,NULLID) )
    { sprintf(msg,"Type %d usedlist last id is non-null: %lX\n",type,
          (unsigned long)id);
      erroutstring(msg);
    }
  }
#endif
  } /* end for loop */

  #ifdef MPI_EVOLVER
  for ( type = VERTEX ; type < NUMELEMENTS ; type++ )
  { int k;
    for ( k = 0 ; k < web.skel[type].maxcount ; k++ )
      if ( (web.skel[type].ibase[k]->local_id & OFFSETMASK) != k )
      { sprintf(msg,"Task %d: local_id is %08X on %s ibase[0x%X], self id %08X\n",
          this_task,(int)(web.skel[type].ibase[k]->local_id),
           typenames[type],k, (int)(web.skel[type].ibase[k]->self_id));
        erroutstring(msg);
      }
  }
  #endif
  
  return numerr;
} /* end list_check() */