- i = icache[hashid(id, type)];
- if (i->id == id &&
- !strcasecmp(i->type, type) &&
- !strcmp(i->name, name))
- return(SMS_SUCCESS);
- minv = use;
- if (i)
- mini = i;
- else
- for (i = &cache[0]; i < &cache[CACHESIZE]; i++) {
- if (i->use < minv) {
- minv = i->use;
- mini = i;
- if (minv == 0)
- break;
- }
- }
- mini->id = id;
- mini->use = use++;
- strcpy(mini->name, name);
- strcpy(mini->type, type);
- ncache[hashname(name, type)] = icache[hashid(id, type)] = mini;
+ for (i = cachehead.next; i != &cachehead; i = i->next)
+ if (i->id == id && !strcmp(i->type, type))
+ return(SMS_SUCCESS);
+ if (cachesize < CACHESIZE) {
+ i = (struct item *) malloc(sizeof(struct item));
+ cachesize++;
+ } else {
+ i = cachehead.prev;
+ cachehead.prev = i->prev;
+ i->prev->next = &cachehead;
+ }
+ strcpy(i->name, name);
+ strcpy(i->type, type);
+ i->nhash = hashname(name, type);
+ i->id = id;
+ i->next = cachehead.next;
+ i->prev = &cachehead;
+ cachehead.next->prev = i;
+ cachehead.next = i;
+ return(SMS_SUCCESS);