Lines Matching refs:ch

43 	struct cachekey_header	*ch;
108 static struct cachekey_header *remap_cache_file_ch(struct cachekey_header *ch,
111 static struct cachekey_header *cache_insert_ch(struct cachekey_header *ch,
117 static struct cachekey3_list *cache_retrieve_ch(struct cachekey_header *ch,
122 static int cache_remove_ch(struct cachekey_header *ch,
161 static struct cachekey3_list * copy_cl_item(struct cachekey_header *ch,
204 struct cachekey_header *ch;
283 if ((ch = (void *)mmap(0, sizeof (struct cachekey_header),
292 if (ch->version != CACHEKEY_HEADER_VERSION ||
293 ch->headerlength != sizeof (struct cachekey_header) ||
294 ch->keylen != keylen ||
295 ch->algtype != algtype ||
296 ch->reclength != reclength ||
297 ch->length < sizeof (struct cachekey_header) ||
298 ch->maxsize < ch->length ||
299 INVALID_ADDRESS(ch->inuse, ch) ||
300 INVALID_ADDRESS(ch->free, ch)) {
304 munmap((caddr_t)ch, sizeof (struct cachekey_header));
308 oldbase = (void *)ch->address;
309 length = ch->length;
310 if (munmap((caddr_t)ch, sizeof (struct cachekey_header)) < 0) {
320 if ((ch = (void *)mmap((caddr_t)oldbase, length,
329 ch->fd = fd;
330 ch->maxsize = maxsize;
333 ch->version = CACHEKEY_HEADER_VERSION;
334 ch->headerlength = sizeof (struct cachekey_header);
335 ch->keylen = keylen;
336 ch->algtype = algtype;
337 ch->reclength = reclength;
338 ch->length = length;
339 ch->address = (caddr_t)ch;
340 ch->inuse_count = 0;
341 ch->inuse = 0;
342 ch->inuse_end = 0;
343 ch->free = 0;
344 ch->free_count = 0;
346 ch->bucket[i] = 0;
349 cd = &(ch->array[0]);
350 for (i = 0; i < MAPRECS(ch);
351 i++, cd = MOVE_ADDR(cd, ch->reclength)) {
353 cd->prev = MOVE_ADDR(cd, -(ch->reclength));
354 cd->next = MOVE_ADDR(cd, +(ch->reclength));
362 cd = MOVE_ADDR(cd, -(ch->reclength));
364 cd = &(ch->array[0]);
367 ch->free_count = MAPRECS(ch);
368 ch->free = &(ch->array[0]);
370 (void) msync((caddr_t)ch, ch->length, MS_SYNC);
372 } else if (ch->length > maxsize) {
374 if ((ch = remap_cache_file_ch(ch, MAXRECS(ch))) == 0) {
387 cache_remap_addresses_ch(ch) == 0) {
390 (void) munmap((caddr_t)ch, ch->length);
395 (void) msync((caddr_t)ch, ch->length, MS_SYNC);
397 return (ch);
402 cache_remap_addresses_ch(struct cachekey_header *ch)
408 offset = (u_long)ch - (u_long)ch->address;
410 if (INVALID_ADDRESS(ch->inuse, ch) ||
411 INVALID_ADDRESS(ch->inuse_end, ch) ||
412 INVALID_ADDRESS(ch->free, ch)) {
416 ch->inuse = MOVE_ADDR(ch->inuse, offset);
417 ch->inuse_end = MOVE_ADDR(ch->inuse_end, offset);
418 ch->free = MOVE_ADDR(ch->free, offset);
420 cd = &(ch->array[0]);
421 for (i = 0; i < NUMRECS(ch); i++) {
422 if (INVALID_ADDRESS(cd->prev, ch) ||
423 INVALID_ADDRESS(cd->next, ch) ||
424 INVALID_ADDRESS(cd->prevhash, ch) ||
425 INVALID_ADDRESS(cd->nexthash, ch)) {
432 cd = MOVE_ADDR(cd, ch->reclength);
436 if (INVALID_ADDRESS(ch->bucket[i], ch)) {
439 ch->bucket[i] = MOVE_ADDR(ch->bucket[i], offset);
444 * update ch->address, so that offset will be zero if we do
447 ch->address = (caddr_t)ch;
458 remap_cache_file_ch(struct cachekey_header *ch, u_int newrecs)
467 if (ch == 0)
479 (ch->reclength)*newrecs;
480 currecs = NUMRECS(ch);
482 if (newsize > ch->maxsize) {
484 newsize = ch->maxsize;
488 oldsize = ch->length;
489 oldaddr = (caddr_t)ch;
490 fd = ch->fd;
492 if (newsize > ch->length) {
494 cd = &(ch->array[0]);
495 } else if (newsize == ch->length) {
497 return (ch);
506 if (cache_remap_addresses_ch(ch) == 0) {
508 ch->keylen, ch->algtype);
509 close(ch->fd);
510 munmap((caddr_t)ch, ch->length);
513 fcd = MOVE_ADDR(&(ch->array[0]),
514 ch->reclength*(MAPRECS(ch)-1));
515 tmpsize = (u_long)fcd - (u_long)ch + ch->reclength;
516 while (tmpsize > newsize && fcd > &(ch->array[0])) {
518 list_remove(fcd, &(ch->free), 0,
519 &(ch->free_count));
522 &(ch->bucket[hashval(fcd->uid)]), 0, 0);
523 list_remove(fcd, &(ch->inuse), &(ch->inuse_end),
524 &(ch->inuse_count));
526 tmpsize -= ch->reclength;
527 fcd = MOVE_ADDR(fcd, -(ch->reclength));
529 ch->length = newsize;
530 (void) msync((caddr_t)ch, ch->length, MS_SYNC);
537 ch = 0;
582 print_cache_ch(struct cachekey_header *ch)
590 ch->keylen, ch->algtype, ch->version, ch->headerlength,
591 ch->reclength);
593 ch->fd, ch->address, ch->length, ch->maxsize);
594 printf("inuse = %d, free = %d\n", ch->inuse_count, ch->free_count);
599 cd = ch->bucket[i];
621 cd = ch->inuse;
633 cd = ch->free;
656 if (c->ch == 0) {
661 print_cache_ch(c->ch);
800 find_cache_item(struct cachekey_header **ch, uid_t uid, struct dhkey *public)
807 if ((ch == NULL) || ((*ch) == NULL)) {
810 for (cd = (*ch)->bucket[hash]; cd != 0; cd = cd->nexthash) {
815 list_remove_hash(cd, &((*ch)->bucket[hash]), 0, 0);
816 list_remove(cd, &((*ch)->inuse), &((*ch)->inuse_end),
817 &((*ch)->inuse_count));
822 if ((cd = (*ch)->free) != 0) {
823 list_remove(cd, &((*ch)->free), 0, &((*ch)->free_count));
828 if (((*ch) = remap_cache_file_ch(*ch, NUMRECS(*ch)+CHUNK_NUMREC)) == 0)
832 if ((cd = (*ch)->free) != 0) {
833 list_remove(cd, &((*ch)->free), 0, &((*ch)->free_count));
838 if ((cd = (*ch)->inuse) == 0)
842 list_remove_hash(cd, &((*ch)->bucket[hashval(cd->uid)]), 0, 0);
844 list_remove(cd, &((*ch)->inuse), &((*ch)->inuse_end),
845 &((*ch)->inuse_count));
853 struct cachekey_header *ch,
869 if (ch == 0 || uid == (uid_t)-1) {
879 newch = ch;
923 copy_cl_item(struct cachekey_header *ch, struct cachekey_disklist *cd,
932 if ((cl = malloc(CACHEKEY3_LIST_SIZE(ch->keylen))) == 0) {
937 if ((skck = malloc(SKCK_LEN(ch->keylen))) == 0) {
944 memcpy(skck, skck_cd, SKCK_LEN(ch->keylen));
946 err = cbc_crypt(key.c, (char *)skck, SKCK_LEN(ch->keylen),
963 ALIGN4(2*KEYLEN(ch->keylen)+1));
967 ALIGN4(2*KEYLEN(ch->keylen)+1));
991 cache_retrieve_ch(struct cachekey_header *ch, uid_t uid, keybuf3 *public,
1006 for (cd = ch->bucket[hash]; cd != 0; cd = cd->nexthash) {
1015 cl = copy_cl_item(ch, cd, key);
1019 *cltmp = copy_cl_item(ch, cd, key);
1041 cache_remove_ch(struct cachekey_header *ch, uid_t uid, keybuf3 *public) {
1055 for (cd = ch->bucket[hash]; cd != 0; ) {
1065 list_remove_hash(cd, &(ch->bucket[hash]), 0, 0);
1066 list_remove(cd, &(ch->inuse), &(ch->inuse_end),
1067 &(ch->inuse_count));
1069 list_insert(cd, &(ch->free), 0,
1070 &(ch->free_count));
1082 list_remove_hash(cd, &(ch->bucket[hash]), 0, 0);
1083 list_remove(cd, &(ch->inuse), &(ch->inuse_end),
1084 &(ch->inuse_count));
1086 list_insert(cd, &(ch->free), 0,
1087 &(ch->free_count));
1145 c->ch = 0;
1189 if (c->ch != 0) {
1195 ret = (c->ch = create_cache_file_ch(keylen, algtype, sizespec)) != 0;
1218 if (c->ch == 0) {
1223 ret = (c->ch =
1224 cache_insert_ch(c->ch, uid, common, key, public, secret)) != 0;
1246 if (c->ch == 0) {
1251 cl = cache_retrieve_ch(c->ch, uid, public, key);
1267 if (c->ch == 0) {
1272 ret = cache_remove_ch(c->ch, uid, public);