?? find.c
字號:
#include "mail.h"/* Find the specified record. * Called by mail_delete(), mail_fetch(), and mail_store(). */int_mail_find(MAIL *mail, const char *key, int writelock){ off_t offset, nextoffset; /* Calculate hash value for this key, then calculate byte offset of correspondin g chain ptr in hash table. This is where our search starts. */ /* calc offset in hash table for this key */ mail->chainoff = (_mail_hash(mail, key) * PTR_SZ) + mail->hashoff; mail->ptroff = mail->chainoff; /* Here's where we lock this hash chain. It's the caller's responsibility to unlock it when done. Note we lock and unlock only the first byte. */ if (writelock) { if (writew_lock(mail->idxfd, mail->chainoff, SEEK_SET, 1) < 0) err_dump("writew_lock error"); } else { if (readw_lock(mail->idxfd, mail->chainoff, SEEK_SET, 1) < 0) err_dump("readw_lock error"); } /* Get the offset in the index file of first record on the hash chain (can be 0) */ offset = _mail_readptr(mail, mail->ptroff); while (offset != 0) { nextoffset = _mail_readidx(mail, offset,REALIDX); if (strcmp(mail->keybuf, key) == 0) break; /* found a match */ mail->ptroff = offset; /* offset of this (unequal) record */ offset = nextoffset; /* next one to compare */ } if (offset == 0) return(-1); /* error, record not found */ /* We have a match. We're guaranteed that mail->ptroff contains the offset of the chain ptr that points to this matching index record. _mail_dodelete() uses this fact. (The chain ptr that points to this matching record could be in an index record or in the hash table.) */ return(0);}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -