本文整理汇总了C++中cdb_free函数的典型用法代码示例。如果您正苦于以下问题:C++ cdb_free函数的具体用法?C++ cdb_free怎么用?C++ cdb_free使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了cdb_free函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: CheckIfAlreadySeen
time_t CheckIfAlreadySeen(const char *Facility,
StrBuf *guid,
time_t now,
time_t antiexpire,
eCheckType cType,
long ccid,
long ioid)
{
time_t InDBTimeStamp = 0;
struct UseTable ut;
struct cdbdata *cdbut;
if (cType != eWrite)
{
SEEN_syslog(LOG_DEBUG, "Loading [%s]", ChrPtr(guid));
cdbut = cdb_fetch(CDB_USETABLE, SKEY(guid));
if ((cdbut != NULL) && (cdbut->ptr != NULL)) {
memcpy(&ut, cdbut->ptr,
((cdbut->len > sizeof(struct UseTable)) ?
sizeof(struct UseTable) : cdbut->len));
InDBTimeStamp = now - ut.ut_timestamp;
if (InDBTimeStamp < antiexpire)
{
SEEN_syslog(LOG_DEBUG, "Found - Not expired %ld < %ld", InDBTimeStamp, antiexpire);
cdb_free(cdbut);
return InDBTimeStamp;
}
else
{
SEEN_syslog(LOG_DEBUG, "Found - Expired. %ld >= %ld", InDBTimeStamp, antiexpire);
cdb_free(cdbut);
}
}
else
{
if (cdbut) cdb_free(cdbut);
SEENM_syslog(LOG_DEBUG, "not Found");
}
if (cType == eCheckExist)
return InDBTimeStamp;
}
memcpy(ut.ut_msgid, SKEY(guid));
ut.ut_timestamp = now;
SEENM_syslog(LOG_DEBUG, "Saving new Timestamp");
/* rewrite the record anyway, to update the timestamp */
cdb_store(CDB_USETABLE,
SKEY(guid),
&ut, sizeof(struct UseTable) );
SEENM_syslog(LOG_DEBUG, "Done Saving");
return InDBTimeStamp;
}
示例2: cdbb_close_read
void cdbb_close_read(struct cdbb *a)
{
if (a->r->fd > 0)
close(a->r->fd);
cdb_free(a->r);
free(a->r);
}
示例3: respond
int respond(char *q,char qtype[2],char ip[4])
{
int fd;
int r;
char key[6];
tai_now(&now);
fd = open_read("data.cdb");
if (fd == -1) return 0;
cdb_init(&c,fd);
byte_zero(clientloc,2);
key[0] = 0;
key[1] = '%';
byte_copy(key + 2,4,ip);
r = cdb_find(&c,key,6);
if (!r) r = cdb_find(&c,key,5);
if (!r) r = cdb_find(&c,key,4);
if (!r) r = cdb_find(&c,key,3);
if (!r) r = cdb_find(&c,key,2);
if (r == -1) return 0;
if (r && (cdb_datalen(&c) == 2))
if (cdb_read(&c,clientloc,2,cdb_datapos(&c)) == -1) return 0;
r = doit(q,qtype);
cdb_free(&c);
close(fd);
return r;
}
示例4: cmd_oidl
/*
* List the OpenIDs associated with the currently logged in account
*/
void cmd_oidl(char *argbuf) {
struct cdbdata *cdboi;
long usernum = 0L;
if (CtdlGetConfigInt("c_disable_newu"))
{
cprintf("%d this system does not support openid.\n",
ERROR + CMD_NOT_SUPPORTED);
return;
}
if (CtdlAccessCheck(ac_logged_in)) return;
cdb_rewind(CDB_OPENID);
cprintf("%d Associated OpenIDs:\n", LISTING_FOLLOWS);
while (cdboi = cdb_next_item(CDB_OPENID), cdboi != NULL) {
if (cdboi->len > sizeof(long)) {
memcpy(&usernum, cdboi->ptr, sizeof(long));
if (usernum == CC->user.usernum) {
cprintf("%s\n", cdboi->ptr + sizeof(long));
}
}
cdb_free(cdboi);
}
cprintf("000\n");
}
示例5: main
int main(int argc, char **argv, char **envp) {
uint8_t buf[1024];
cdb_t cdb;
char *key;
uint32_t len;
uint32_t r;
uint32_t pos;
uint32_t skip = 0;
char *skip_str;
if (!*argv || !*++argv)
usage();
key = *argv;
skip_str = *++argv;
if (skip_str) {
if (sscanf(skip_str, "%" PRIu32, &skip) != strlen(skip_str))
usage();
}
/* Initialize the cdb struct using stdin as it's file descriptor. */
if (cdb_init(&cdb, 0) == -1)
strerr_die2x(111, FATAL, "failed to initialize cdb");
for (;;) {
r = cdb_find_next(&cdb, key, strlen(key));
if (r == -1)
strerr_die2sys(111, FATAL, "unable to read input: ");
if (!r)
_exit(100);
if (!skip)
break;
skip--;
}
/* If there's a record in the cdb file, then the cdb structs dlen property
* will be set to a non-zero value and it's position will be set to the
* offset in the file containing the data. Read the data in chunks and send
* it to stdout. */
len = cdb.dlen;
pos = cdb.dpos;
while (len > 0) {
r = sizeof(buf);
if (r > len)
r = len;
if (cdb_read(buf, r, &cdb, pos) == -1)
strerr_die2sys(111, FATAL, "unable to read input: ");
if (bio_put(bio_1, buf, r) == -1)
strerr_die2sys(111, FATAL, "unable to write output: ");
pos += r;
len -= r;
}
if (bio_flush(bio_1) == -1)
strerr_die2sys(111, FATAL, "unable to write output: ");
cdb_free(&cdb);
return 0;
}
示例6: cmd_oida
/*
* List ALL OpenIDs in the database
*/
void cmd_oida(char *argbuf) {
struct cdbdata *cdboi;
long usernum;
struct ctdluser usbuf;
if (CtdlGetConfigInt("c_disable_newu"))
{
cprintf("%d this system does not support openid.\n",
ERROR + CMD_NOT_SUPPORTED);
return;
}
if (CtdlAccessCheck(ac_aide)) return;
cdb_rewind(CDB_OPENID);
cprintf("%d List of all OpenIDs in the database:\n", LISTING_FOLLOWS);
while (cdboi = cdb_next_item(CDB_OPENID), cdboi != NULL) {
if (cdboi->len > sizeof(long)) {
memcpy(&usernum, cdboi->ptr, sizeof(long));
if (CtdlGetUserByNumber(&usbuf, usernum) != 0) {
usbuf.fullname[0] = 0;
}
cprintf("%s|%ld|%s\n",
cdboi->ptr + sizeof(long),
usernum,
usbuf.fullname
);
}
cdb_free(cdboi);
}
cprintf("000\n");
}
示例7: rules
int rules(void (*callback)(char *,unsigned int),int fd,char *ip,char *host,char *info)
{
int r;
cdb_init(&c,fd);
r = doit(callback,ip,host,info);
cdb_free(&c);
return r;
}
示例8: dict_cdbq_close
static void dict_cdbq_close(DICT *dict)
{
DICT_CDBQ *dict_cdbq = (DICT_CDBQ *) dict;
cdb_free(&dict_cdbq->cdb);
close(dict->stat_fd);
if (dict->fold_buf)
vstring_free(dict->fold_buf);
dict_free(dict);
}
示例9: PurgeUseTable
/*
* Purge the use table of old entries.
*
*/
int PurgeUseTable(StrBuf *ErrMsg) {
int purged = 0;
struct cdbdata *cdbut;
struct UseTable ut;
struct UPurgeList *ul = NULL;
struct UPurgeList *uptr;
/* Phase 1: traverse through the table, discovering old records... */
if (CheckTDAPVeto(CDB_USETABLE, ErrMsg))
{
syslog(LOG_DEBUG, "Purge use table: VETO!");
return 0;
}
syslog(LOG_DEBUG, "Purge use table: phase 1");
cdb_rewind(CDB_USETABLE);
while(cdbut = cdb_next_item(CDB_USETABLE), cdbut != NULL) {
/*
* TODODRW: change this to create a new function time_t cdb_get_timestamp( struct cdbdata *)
* this will release this file from the serv_network.h
* Maybe it could be a macro that extracts and casts the reult
*/
if (cdbut->len > sizeof(struct UseTable))
memcpy(&ut, cdbut->ptr, sizeof(struct UseTable));
else {
memset(&ut, 0, sizeof(struct UseTable));
memcpy(&ut, cdbut->ptr, cdbut->len);
}
cdb_free(cdbut);
if ( (time(NULL) - ut.ut_timestamp) > USETABLE_RETAIN ) {
uptr = (struct UPurgeList *) malloc(sizeof(struct UPurgeList));
if (uptr != NULL) {
uptr->next = ul;
safestrncpy(uptr->up_key, ut.ut_msgid, sizeof uptr->up_key);
ul = uptr;
}
++purged;
}
}
/* Phase 2: delete the records */
syslog(LOG_DEBUG, "Purge use table: phase 2");
while (ul != NULL) {
cdb_delete(CDB_USETABLE, ul->up_key, strlen(ul->up_key));
uptr = ul->next;
free(ul);
ul = uptr;
}
syslog(LOG_DEBUG, "Purge use table: finished (purged %d records)", purged);
return(purged);
}
示例10: checkpart_deinit
static void checkpart_deinit(UDF_INIT *iid)
{
struct _info *info = (struct _info *)iid->ptr;
cdb_free(&info->cdb);
close(info->fd);
fprintf(stderr, "%s\n", info->msg);
free(info->msg);
free(info->reason);
free(iid->ptr);
}
示例11: sdb_free
SDB_VISIBLE void sdb_free (Sdb* s) {
if (!s) return;
cdb_free (&s->db);
if (s->lock)
sdb_unlock (sdb_lockfile (s->dir));
ls_free (s->ns);
ht_free (s->ht);
if (s->fd != -1)
close (s->fd);
free (s->ndump);
free (s->dir);
free (s);
}
示例12: respond
int respond(char *q,char qtype[2],char ip[4])
{
int fd;
int result;
fd = open_read("data.cdb");
if (fd == -1) return 0;
cdb_init(&c,fd);
result = doit(q,qtype,ip);
cdb_free(&c);
close(fd);
return result;
}
示例13: cdb_advance_fd
/* Given a file descriptor of an open directory (or AT_FDCWD), CDB->fd,
try to open the CDB->fd-relative directory, DIR. If the open succeeds,
update CDB->fd with the resulting descriptor, close the incoming file
descriptor, and return zero. Upon failure, return -1 and set errno. */
static int
cdb_advance_fd (struct cd_buf *cdb, char const *dir)
{
int new_fd = openat (cdb->fd, dir,
O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK);
if (new_fd < 0)
return -1;
cdb_free (cdb);
cdb->fd = new_fd;
return 0;
}
示例14: PurgeEuidIndexTable
/*
* Purge the EUID Index of old records.
*
*/
int PurgeEuidIndexTable(void) {
int purged = 0;
struct cdbdata *cdbei;
struct EPurgeList *el = NULL;
struct EPurgeList *eptr;
long msgnum;
struct CtdlMessage *msg = NULL;
/* Phase 1: traverse through the table, discovering old records... */
syslog(LOG_DEBUG, "Purge EUID index: phase 1");
cdb_rewind(CDB_EUIDINDEX);
while(cdbei = cdb_next_item(CDB_EUIDINDEX), cdbei != NULL) {
memcpy(&msgnum, cdbei->ptr, sizeof(long));
msg = CtdlFetchMessage(msgnum, 0);
if (msg != NULL) {
CM_Free(msg); /* it still exists, so do nothing */
}
else {
eptr = (struct EPurgeList *) malloc(sizeof(struct EPurgeList));
if (eptr != NULL) {
eptr->next = el;
eptr->ep_keylen = cdbei->len - sizeof(long);
eptr->ep_key = malloc(cdbei->len);
memcpy(eptr->ep_key, &cdbei->ptr[sizeof(long)], eptr->ep_keylen);
el = eptr;
}
++purged;
}
cdb_free(cdbei);
}
/* Phase 2: delete the records */
syslog(LOG_DEBUG, "Purge euid index: phase 2");
while (el != NULL) {
cdb_delete(CDB_EUIDINDEX, el->ep_key, el->ep_keylen);
free(el->ep_key);
eptr = el->next;
free(el);
el = eptr;
}
syslog(LOG_DEBUG, "Purge euid index: finished (purged %d records)", purged);
return(purged);
}
示例15: nntp_fetch_msglist
//
// Utility function to fetch the current list of message numbers in a room
//
struct nntp_msglist nntp_fetch_msglist(struct ctdlroom *qrbuf) {
struct nntp_msglist nm;
struct cdbdata *cdbfr;
cdbfr = cdb_fetch(CDB_MSGLISTS, &qrbuf->QRnumber, sizeof(long));
if (cdbfr != NULL) {
nm.msgnums = (long*)cdbfr->ptr;
cdbfr->ptr = NULL;
nm.num_msgs = cdbfr->len / sizeof(long);
cdbfr->len = 0;
cdb_free(cdbfr);
} else {
nm.num_msgs = 0;
nm.msgnums = NULL;
}
return(nm);
}