int get_store(DB *dbp,PSTORE pstore) { DBT key,data; char buf[BUFFER_SIZE]; int ret; memset(&key,0,sizeof(key)); memset(&data,0,sizeof(data)); key.data = pstore->key; key.size = strlen(pstore->key) + 1; data.flags = DB_DBT_USERMEM; memset(buf,0,sizeof(buf)); data.data = buf; data.ulen = sizeof(buf); switch (ret = dbp->get(dbp,NULL,&key,&data,0)){ case 0: data_unserialize(&pstore->data,buf,sizeof(buf)); return 0; break; case DB_NOTFOUND: return -2; break; default: return -1; } return 0; }
static int apc_load_data(apc_cache_t* cache, const char *data_file) { char *p; char key[MAXPATHLEN] = {0,}; unsigned int key_len; zval data; p = strrchr(data_file, DEFAULT_SLASH); if(p && p[1]) { strlcpy(key, p+1, sizeof(key)); p = strrchr(key, '.'); if(p) { p[0] = '\0'; key_len = strlen(key); data = data_unserialize(data_file); if(Z_TYPE(data) != IS_UNDEF) { zend_string *name = zend_string_init(key, key_len, 0); apc_cache_store( cache, name, &data, 0, 1); zend_string_release(name); zval_dtor(&data); } return 1; } } return 0; }