Beispiel #1
0
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;
}
Beispiel #2
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;
}