/* * 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); }
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() */