亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? str_mem.c

?? OpenSSL 0.9.8k 最新版OpenSSL
?? C
字號:
/* crypto/store/str_mem.c -*- mode:C; c-file-style: "eay" -*- *//* Written by Richard Levitte (richard@levitte.org) for the OpenSSL * project 2003. *//* ==================================================================== * Copyright (c) 2003 The OpenSSL Project.  All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright *    notice, this list of conditions and the following disclaimer.  * * 2. Redistributions in binary form must reproduce the above copyright *    notice, this list of conditions and the following disclaimer in *    the documentation and/or other materials provided with the *    distribution. * * 3. All advertising materials mentioning features or use of this *    software must display the following acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit. (http://www.openssl.org/)" * * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to *    endorse or promote products derived from this software without *    prior written permission. For written permission, please contact *    openssl-core@openssl.org. * * 5. Products derived from this software may not be called "OpenSSL" *    nor may "OpenSSL" appear in their names without prior written *    permission of the OpenSSL Project. * * 6. Redistributions of any form whatsoever must retain the following *    acknowledgment: *    "This product includes software developed by the OpenSSL Project *    for use in the OpenSSL Toolkit (http://www.openssl.org/)" * * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE OpenSSL PROJECT OR * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED * OF THE POSSIBILITY OF SUCH DAMAGE. * ==================================================================== * * This product includes cryptographic software written by Eric Young * (eay@cryptsoft.com).  This product includes software written by Tim * Hudson (tjh@cryptsoft.com). * */#include <string.h>#include <openssl/err.h>#include "str_locl.h"/* The memory store is currently highly experimental.  It's meant to become   a base store used by other stores for internal caching (for full caching   support, aging needs to be added).   The database use is meant to support as much attribute association as   possible, while providing for as small search ranges as possible.   This is currently provided for by sorting the entries by numbers that   are composed of bits set at the positions indicated by attribute type   codes.  This provides for ranges determined by the highest attribute   type code value.  A better idea might be to sort by values computed   from the range of attributes associated with the object (basically,   the difference between the highest and lowest attribute type code)   and it's distance from a base (basically, the lowest associated   attribute type code).*/struct mem_object_data_st	{	STORE_OBJECT *object;	STORE_ATTR_INFO *attr_info;	int references;	};struct mem_data_st	{	STACK *data;		/* A stack of mem_object_data_st,				   sorted with STORE_ATTR_INFO_compare(). */	unsigned int compute_components : 1; /* Currently unused, but can						be used to add attributes						from parts of the data. */	};struct mem_ctx_st	{	int type;		/* The type we're searching for */	STACK *search_attributes; /* Sets of attributes to search for.				     Each element is a STORE_ATTR_INFO. */	int search_index;	/* which of the search attributes we found a match				   for, -1 when we still haven't found any */	int index;		/* -1 as long as we're searching for the first */	};static int mem_init(STORE *s);static void mem_clean(STORE *s);static STORE_OBJECT *mem_generate(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]);static STORE_OBJECT *mem_get(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]);static int mem_store(STORE *s, STORE_OBJECT_TYPES type,	STORE_OBJECT *data, OPENSSL_ITEM attributes[],	OPENSSL_ITEM parameters[]);static int mem_modify(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM search_attributes[], OPENSSL_ITEM add_attributes[],	OPENSSL_ITEM modify_attributes[], OPENSSL_ITEM delete_attributes[],	OPENSSL_ITEM parameters[]);static int mem_delete(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]);static void *mem_list_start(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[]);static STORE_OBJECT *mem_list_next(STORE *s, void *handle);static int mem_list_end(STORE *s, void *handle);static int mem_list_endp(STORE *s, void *handle);static int mem_lock(STORE *s, OPENSSL_ITEM attributes[],	OPENSSL_ITEM parameters[]);static int mem_unlock(STORE *s, OPENSSL_ITEM attributes[],	OPENSSL_ITEM parameters[]);static int mem_ctrl(STORE *s, int cmd, long l, void *p, void (*f)(void));static STORE_METHOD store_memory =	{	"OpenSSL memory store interface",	mem_init,	mem_clean,	mem_generate,	mem_get,	mem_store,	mem_modify,	NULL, /* revoke */	mem_delete,	mem_list_start,	mem_list_next,	mem_list_end,	mem_list_endp,	NULL, /* update */	mem_lock,	mem_unlock,	mem_ctrl	};const STORE_METHOD *STORE_Memory(void)	{	return &store_memory;	}static int mem_init(STORE *s)	{	return 1;	}static void mem_clean(STORE *s)	{	return;	}static STORE_OBJECT *mem_generate(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[])	{	STOREerr(STORE_F_MEM_GENERATE, STORE_R_NOT_IMPLEMENTED);	return 0;	}static STORE_OBJECT *mem_get(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[])	{	void *context = mem_list_start(s, type, attributes, parameters);		if (context)		{		STORE_OBJECT *object = mem_list_next(s, context);		if (mem_list_end(s, context))			return object;		}	return NULL;	}static int mem_store(STORE *s, STORE_OBJECT_TYPES type,	STORE_OBJECT *data, OPENSSL_ITEM attributes[],	OPENSSL_ITEM parameters[])	{	STOREerr(STORE_F_MEM_STORE, STORE_R_NOT_IMPLEMENTED);	return 0;	}static int mem_modify(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM search_attributes[], OPENSSL_ITEM add_attributes[],	OPENSSL_ITEM modify_attributes[], OPENSSL_ITEM delete_attributes[],	OPENSSL_ITEM parameters[])	{	STOREerr(STORE_F_MEM_MODIFY, STORE_R_NOT_IMPLEMENTED);	return 0;	}static int mem_delete(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[])	{	STOREerr(STORE_F_MEM_DELETE, STORE_R_NOT_IMPLEMENTED);	return 0;	}/* The list functions may be the hardest to understand.  Basically,   mem_list_start compiles a stack of attribute info elements, and   puts that stack into the context to be returned.  mem_list_next   will then find the first matching element in the store, and then   walk all the way to the end of the store (since any combination   of attribute bits above the starting point may match the searched   for bit pattern...). */static void *mem_list_start(STORE *s, STORE_OBJECT_TYPES type,	OPENSSL_ITEM attributes[], OPENSSL_ITEM parameters[])	{	struct mem_ctx_st *context =		(struct mem_ctx_st *)OPENSSL_malloc(sizeof(struct mem_ctx_st));	void *attribute_context = NULL;	STORE_ATTR_INFO *attrs = NULL;	if (!context)		{		STOREerr(STORE_F_MEM_LIST_START, ERR_R_MALLOC_FAILURE);		return 0;		}	memset(context, 0, sizeof(struct mem_ctx_st));	attribute_context = STORE_parse_attrs_start(attributes);	if (!attribute_context)		{		STOREerr(STORE_F_MEM_LIST_START, ERR_R_STORE_LIB);		goto err;		}	while((attrs = STORE_parse_attrs_next(attribute_context)))		{		if (context->search_attributes == NULL)			{			context->search_attributes =				sk_new((int (*)(const char * const *, const char * const *))STORE_ATTR_INFO_compare);			if (!context->search_attributes)				{				STOREerr(STORE_F_MEM_LIST_START,					ERR_R_MALLOC_FAILURE);				goto err;				}			}		sk_push(context->search_attributes,(char *)attrs);		}	if (!STORE_parse_attrs_endp(attribute_context))		goto err;	STORE_parse_attrs_end(attribute_context);	context->search_index = -1;	context->index = -1;	return context; err:	if (attribute_context) STORE_parse_attrs_end(attribute_context);	mem_list_end(s, context);	return NULL;	}static STORE_OBJECT *mem_list_next(STORE *s, void *handle)	{	int i;	struct mem_ctx_st *context = (struct mem_ctx_st *)handle;	struct mem_object_data_st key = { 0, 0, 1 };	struct mem_data_st *store =		(struct mem_data_st *)STORE_get_ex_data(s, 1);	int srch;	int cres = 0;	if (!context)		{		STOREerr(STORE_F_MEM_LIST_NEXT, ERR_R_PASSED_NULL_PARAMETER);		return NULL;		}	if (!store)		{		STOREerr(STORE_F_MEM_LIST_NEXT, STORE_R_NO_STORE);		return NULL;		}	if (context->search_index == -1)		{		for (i = 0; i < sk_num(context->search_attributes); i++)			{			key.attr_info =				(STORE_ATTR_INFO *)sk_value(context->search_attributes, i);			srch = sk_find_ex(store->data, (char *)&key);			if (srch >= 0)				{				context->search_index = srch;				break;				}			}		}	if (context->search_index < 0)		return NULL;		key.attr_info =		(STORE_ATTR_INFO *)sk_value(context->search_attributes,			context->search_index);	for(srch = context->search_index;	    srch < sk_num(store->data)		    && STORE_ATTR_INFO_in_range(key.attr_info,			    (STORE_ATTR_INFO *)sk_value(store->data, srch))		    && !(cres = STORE_ATTR_INFO_in_ex(key.attr_info,				 (STORE_ATTR_INFO *)sk_value(store->data, srch)));	    srch++)		;	context->search_index = srch;	if (cres)		return ((struct mem_object_data_st *)sk_value(store->data,				srch))->object;	return NULL;	}static int mem_list_end(STORE *s, void *handle)	{	struct mem_ctx_st *context = (struct mem_ctx_st *)handle;	if (!context)		{		STOREerr(STORE_F_MEM_LIST_END, ERR_R_PASSED_NULL_PARAMETER);		return 0;		}	if (context && context->search_attributes)		sk_free(context->search_attributes);	if (context) OPENSSL_free(context);	return 1;	}static int mem_list_endp(STORE *s, void *handle)	{	struct mem_ctx_st *context = (struct mem_ctx_st *)handle;	if (!context		|| context->search_index == sk_num(context->search_attributes))		return 1;	return 0;	}static int mem_lock(STORE *s, OPENSSL_ITEM attributes[],	OPENSSL_ITEM parameters[])	{	return 1;	}static int mem_unlock(STORE *s, OPENSSL_ITEM attributes[],	OPENSSL_ITEM parameters[])	{	return 1;	}static int mem_ctrl(STORE *s, int cmd, long l, void *p, void (*f)(void))	{	return 1;	}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美顶级少妇做爰| 91精品欧美一区二区三区综合在| 久久狠狠亚洲综合| 日本不卡免费在线视频| 欧美aⅴ一区二区三区视频| 亚洲成人久久影院| 日韩激情在线观看| 蜜臀久久99精品久久久画质超高清| 日韩av一二三| 国产资源精品在线观看| 成年人网站91| 欧美午夜影院一区| 欧美一级欧美三级| 久久久久久麻豆| 国产精品久久久久影视| 亚洲已满18点击进入久久| 亚洲午夜国产一区99re久久| 久久狠狠亚洲综合| 成人影视亚洲图片在线| 欧美探花视频资源| 精品蜜桃在线看| 亚洲视频中文字幕| 日本欧美一区二区在线观看| 国产乱码精品一区二区三| www.欧美亚洲| 欧美高清视频在线高清观看mv色露露十八 | 精品一区二区久久| 成人精品高清在线| 色狠狠色噜噜噜综合网| 日韩精品一区二区三区视频在线观看 | 奇米888四色在线精品| 国产成人精品亚洲777人妖| 91麻豆精东视频| 精品精品国产高清a毛片牛牛| 国产三级三级三级精品8ⅰ区| 亚洲激情欧美激情| 久久精品国产在热久久| 91福利国产精品| 久久久久久久久久久久久夜| 亚洲成人综合视频| 欧美日精品一区视频| 精品日韩在线观看| 午夜影院久久久| 99国产精品视频免费观看| 欧美日韩国产一二三| 国产精品久久久久永久免费观看| 青青青伊人色综合久久| 一本色道久久综合狠狠躁的推荐 | 国产69精品久久777的优势| 欧美日韩精品免费| 中文字幕色av一区二区三区| 激情图片小说一区| 欧美人xxxx| 一区二区三区免费在线观看| 国产高清视频一区| 欧美videossexotv100| 亚洲电影一区二区| 色欧美88888久久久久久影院| 欧美极品少妇xxxxⅹ高跟鞋 | 中文字幕亚洲一区二区va在线| 日本午夜精品一区二区三区电影| 一本一道久久a久久精品综合蜜臀 一本一道综合狠狠老 | 成人av免费在线| 国产欧美日韩在线看| 国产精品99久久久久久宅男| 日韩欧美一二区| 午夜精品123| 777久久久精品| 亚洲电影在线免费观看| 欧美日韩国产首页| 日韩二区在线观看| 欧美一级片在线观看| 日韩av电影天堂| 日韩欧美一区中文| 麻豆国产一区二区| 精品久久久久99| 国产成人午夜精品5599 | 亚洲精品日日夜夜| 色婷婷av一区二区三区大白胸 | 精品久久久久久最新网址| 天堂在线一区二区| 日韩一级片在线播放| 蜜乳av一区二区| 久久久久高清精品| 99久久精品99国产精品| 亚洲一级电影视频| 日韩色在线观看| 精品亚洲成a人| 国产精品美女一区二区| 在线观看亚洲一区| 免费成人深夜小野草| 国产亚洲欧美日韩日本| 成人性生交大片免费看在线播放| 亚洲色图20p| 日韩一区二区三区免费观看| 国产精品456露脸| 亚洲欧洲av另类| 欧美一区二区三区在线电影| 国产一区91精品张津瑜| 国产精品久久久久久久久免费相片| 一本到不卡免费一区二区| 国产高清一区日本| 亚洲一区在线观看网站| 久久一区二区三区四区| 一本大道久久a久久综合婷婷| 日本vs亚洲vs韩国一区三区二区| 久久日韩精品一区二区五区| 91捆绑美女网站| 久久精品国产秦先生| 亚洲图片激情小说| 精品免费一区二区三区| 在线观看日韩精品| 国产九九视频一区二区三区| 亚洲电影视频在线| 中文字幕精品在线不卡| 欧美一级欧美三级| 欧美最新大片在线看| 国产黄色成人av| 蜜臀va亚洲va欧美va天堂| 最新成人av在线| 国产亚洲欧美一区在线观看| 欧美美女一区二区在线观看| 成人一区二区三区在线观看| 毛片av一区二区| 天天操天天色综合| 亚洲免费视频成人| 中日韩av电影| 久久婷婷国产综合国色天香| 在线免费观看不卡av| 大陆成人av片| 国产乱码精品一区二区三| 麻豆精品一二三| 亚洲福利一区二区三区| 亚洲一区免费视频| 一区二区三区久久久| 国产精品福利一区| 久久精品一区二区三区av| 日韩欧美国产一区二区在线播放| 欧美精选午夜久久久乱码6080| 色综合天天在线| 一本色道久久综合亚洲91| 成人av片在线观看| 99精品国产热久久91蜜凸| 成人午夜在线免费| 成人av电影在线观看| 粗大黑人巨茎大战欧美成人| 国产麻豆日韩欧美久久| 国产精品一区二区三区99| 国产精品99久久久| 国产成人欧美日韩在线电影| 国产成人免费视频精品含羞草妖精 | 美女看a上一区| 麻豆极品一区二区三区| 九色porny丨国产精品| 免费三级欧美电影| 久久99精品久久久久久| 国产一区二区精品久久99| 国产一区二区精品久久91| 国产99久久久精品| 成人avav在线| 日本韩国一区二区三区视频| 欧美天堂一区二区三区| 欧美一级理论性理论a| 精品裸体舞一区二区三区| 久久久久久97三级| 成人免费在线播放视频| 亚洲影院在线观看| 美国毛片一区二区| 国产不卡免费视频| 久久久久久影视| 中文字幕一区二区三区在线播放| 亚洲三级电影全部在线观看高清| 一区二区在线观看不卡| 日韩av中文在线观看| 国产精品中文字幕欧美| 色综合久久久久综合体桃花网| 777欧美精品| 中文字幕av不卡| 亚洲午夜电影在线观看| 精品在线观看视频| 91女厕偷拍女厕偷拍高清| 欧美二区三区91| 国产欧美在线观看一区| 亚洲国产精品尤物yw在线观看| 国内精品伊人久久久久av一坑| 92精品国产成人观看免费| 日韩亚洲欧美在线| 亚洲人成影院在线观看| 久久精品免费看| 在线精品视频一区二区| 久久久久久久精| 日韩精品一级二级 | 日本怡春院一区二区| 成人免费看视频| 日韩美女视频在线| 亚洲午夜国产一区99re久久| 国产不卡视频一区| 欧美成人一区二区| 一区二区高清在线| 成人一区二区三区|