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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? mimetype.cpp

?? PGP8.0源碼 請認真閱讀您的文件包然后寫出其具體功能
?? CPP
字號:
/*
 *  Functions to manage emsMIMEtype structures
 *  for use with Eudora EMS API under MS Windows.
 *
 *  Filename: mimetype.cpp
 *
 *  Last Edited: Wednesday, April 2, 1996
 *
 *  Author: Scott Manjourides
 *
 *  Copyright 1995, 1996 QUALCOMM Inc.
 *
 *  Send comments and questions to <emsapi-info@qualcomm.com>
 */

/*	$Id: MIMETYPE.CPP,v 1.1 1999/10/05 18:20:42 dgal Exp $	*/

#include <windows.h>
#include <string.h>
#include <malloc.h>

#include "ems-win.h"
#include "mimetype.h"
#include "rfc822.h"

/* ========================================================================= */

#define safefree(p) { if (p) { free(p); p = NULL; } }

/* ========================================================================= */

static void free_param_type(emsMIMEParamP paramPtr);

/* ========================================================================= */

/*
 *  Create an emsMIMEtype structure to hold MIME information. Only the
 *  type and subtype are set here, use add_mime_parameter() to add
 *  any name/value parameter pairs.
 *
 *  NOTE: All input strings are COPIED before permanent use. The user
 *        of this function is responsible for calling free_mime_type()
 *        on returned structure.
 *
 *  Args:
 *   mime_type    [IN] the main MIME type: e.g., text, application, image
 *   sub_type     [IN] the sub type: e.g., plain, octet-stream, jpeg
 *   mime_version [IN] the MIME verion number, if NULL will default to "1.0"
 *
 *  Returns: Pointer to the created emsMIMEtype structure, NULL if error.
 */
emsMIMEtypeP make_mime_type(const char *mime_type, const char *sub_type, 
							const char *mime_version)
{
	emsMIMEtypeP mimePtr = NULL;

	mimePtr = (emsMIMEtypeP) malloc(sizeof(emsMIMEtype));

	if ((mimePtr) && (mime_type) && (sub_type))
	{
		mimePtr->type = strdup(mime_type);
		mimePtr->subType = strdup(sub_type);

		if (mime_version)
			mimePtr->version = strdup(mime_version);
		else
			mimePtr->version = strdup("1.0");

		mimePtr->size = sizeof(emsMIMEtype);
		mimePtr->params = NULL;
		mimePtr->contentDisp = NULL;
		mimePtr->contentParams = NULL;

		if ((mimePtr->type) && (mimePtr->subType) && (mimePtr->version))
		{
			return mimePtr;
		}
	}

	// If we get here then something went wrong
	// Do complete cleanup and return NULL

	free_mime_type(mimePtr);

	return (NULL); // ERROR
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/*
 *  Create an emsMIMEtype structure to hold MIME information. Structure is
 *  initialized to values provided in RFC822 content-type header line. This
 *  includes all parameter name-value pairs.
 *   
 *  NOTE: The user of this function is responsible for calling
 *        free_mime_type() on returned structure.
 *
 *  Args:
 *   content_type [IN] The RFC822 content-type string to parse
 *
 *  Returns: Pointer to the created emsMIMEtype structure, NULL if error.
 */
emsMIMEtypeP parse_make_mime_type(const char *content_type)
{
	const char *kPrefixStr = "Content-Type:";
	const unsigned int kPrefixStrLen = strlen(kPrefixStr);

	if (strnicmp(content_type, kPrefixStr, kPrefixStrLen) != 0)
		return NULL;

	char *cp = (char *) content_type + kPrefixStrLen;
	char *mime_type = NULL, *mime_subtype = NULL;

	mime_type = rfc822_extract_token(&cp);

	if ((strlen(mime_type) > 0) && ((*cp++) == '/'))
	{
		mime_subtype = rfc822_extract_token(&cp);

		if (strlen(mime_subtype) > 0)
		{
			// We have a type/subtype, so create emsMIMEtype structure
			emsMIMEtypeP mimePtr = make_mime_type(mime_type, mime_subtype, 
													NULL);

			safefree(mime_type);
			safefree(mime_subtype);

			if (mimePtr)
			{
				char *name = NULL, *value = NULL;

				do {

					if ((*cp++) != ';') // Skip semi-colon
						break;
				
					if (!(name = rfc822_extract_token(&cp)))
						break;

					if ((*cp++) != '=') // Skip equals
						break;

					if (!(value = rfc822_extract_token(&cp)))
						break;

					if ((strlen(name) > 0) && (strlen(value) > 0))
						add_mime_parameter(mimePtr, name, value);

					safefree(name);
					safefree(value);
				} while (*cp);

				safefree(name);
				safefree(value);

				return mimePtr;
			}
		}
	}

	// If we get here then something went wrong
	// Do complete cleanup

	safefree(mime_type);
	safefree(mime_subtype);

	return (NULL); // ERROR
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/*
 *  Add a parameter to an existing emsMIMEtype structure. This structure
 *  should be created using make_mime_type().
 *
 *  NOTE: All input strings are COPIED before permanent use.
 *
 * Args:
 *   mimePtr [IN] Pointer to the emsMIMEtype structure to be added too
 *   name    [IN] Name of the parameter
 *   value   [IN] Value of the parameter
 *   
 *  Returns: Boolean (TRUE = success, FALSE = failure)
 */
int add_mime_parameter(emsMIMEtypeP mimePtr, const char *name, 
					   const char *value)
{
	if (!mimePtr)
		return (FALSE);
	
	emsMIMEParamP paramPtr = (emsMIMEParamP) malloc (sizeof(emsMIMEparam));

	if (paramPtr)
	{
		paramPtr->size = sizeof(emsMIMEparam);
		paramPtr->name = strdup(name);
		paramPtr->value = strdup(value);
		paramPtr->next = NULL;

		if ((paramPtr->name) && (paramPtr->value))
		{
			emsMIMEParamP *paramEnd = &(mimePtr->params);

		    while (*paramEnd)
				paramEnd = &((*paramEnd)->next);

			*paramEnd = paramPtr;

			return (TRUE);
		}
	}

	// If we get here then something went wrong
	// Do complete cleanup

	free_param_type(paramPtr);
	return (FALSE);
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/*
 *  Free an emsMIMEtype structure, including all strings and parameters.
 *
 *  Args:
 *   mimePtr [IN] Pointer to the emsMIMEtype structure to be freed
 *
 *  No return value.
 */
void free_mime_type(emsMIMEtypeP mimePtr)
{
	if (mimePtr)
	{
		safefree(mimePtr->version);
		safefree(mimePtr->type);
		safefree(mimePtr->subType);
		
		free_param_type(mimePtr->params);

		safefree(mimePtr->contentDisp);
		free_param_type(mimePtr->contentParams);

		safefree(mimePtr);
	}
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/*
 *  Convert an emsMIMEtype structure to a Content-Type header field line
 *  in the format specified by RFC 882.
 *
 *  NOTE: The user of this function is responsible for freeing the
 *        returned string.
 *
 *  Args:
 *   mimePtr [IN] Pointer to the emsMIMEtype structure
 *
 *  Returns: String containing header field; dynamically allocated.
 */
char *string_mime_type(emsMIMEtypeP mimePtr) 
{
	const char *kPrefixStr          = "Content-Type: ";
	const char *kParamSepStr        = ";\r\n  ";
	const char *kTypeSubtypeSepStr  = "/";
	const char *kAttValueSepStr     = "=";

	// Must have a valid mime structure
	if (!mimePtr)
		return NULL;

	// Both TYPE and SUBTYPE are required by RFC822
	if ((!mimePtr->type) || (!mimePtr->subType))
		return NULL;

	// Calculate the length of the header string
	unsigned int hLen = 0;

	hLen += strlen(kPrefixStr);
	hLen += rfc822_quoted_strlen(mimePtr->type);
	hLen += strlen(kTypeSubtypeSepStr);
	hLen += rfc822_quoted_strlen(mimePtr->subType);

	emsMIMEParamP paramPtr = mimePtr->params;

	while (paramPtr)
	{
		hLen += strlen(kParamSepStr);
		hLen += rfc822_quoted_strlen(paramPtr->name);
		hLen += strlen(kAttValueSepStr);
		hLen += rfc822_quoted_strlen(paramPtr->value);

		paramPtr = paramPtr->next;
	}

	// Allocate space for the header line
	char *hStr = (char *) malloc(hLen + 1);
	
	if (!hStr)
		return NULL;

	// Build the header line
	char *cp = hStr;

	cp = strchr(strcpy(cp, kPrefixStr), '\0');
	cp = rfc822_quote_strcpy(cp, mimePtr->type);
	cp = strchr(strcpy(cp, kTypeSubtypeSepStr), '\0');
	cp = rfc822_quote_strcpy(cp, mimePtr->subType);

	paramPtr = mimePtr->params;
	while (paramPtr)
	{
		cp = strchr(strcpy(cp, kParamSepStr), '\0');
		cp = rfc822_quote_strcpy(cp, paramPtr->name);
		cp = strchr(strcpy(cp, kAttValueSepStr), '\0');
		cp = rfc822_quote_strcpy(cp, paramPtr->value);

		paramPtr = paramPtr->next;
	}

	// Return the header line
	return (hStr);
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/*
 *  Pick out a specific parameter name-value pair from an emsMIMEtype
 *  structure. The match is case sensitive.
 *
 *  NOTE: The user of this function should NOT alter the returned string
 *        in any way -- it should be considered READ-ONLY.
 *
 *  Args:
 *   mimePtr   [IN] Pointer to the emsMIMEtype structure
 *   paramName [IN] Name of parameter to look for
 *
 *  Returns: String of the associated value or NULL if no match is found
 */
const char *get_mime_parameter(emsMIMEtypeP mimePtr, const char *paramName)
{
	if (!mimePtr)
		return NULL;

	emsMIMEParamP paramPtr = mimePtr->params;

	while (paramPtr)
	{
		if (strcmp(paramPtr->name, paramName) == 0)
			return (paramPtr->value);

		paramPtr = paramPtr->next;
	}

    return (NULL);
}				

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/*
 *  Remove a parameter from an existing emsMIMEtype structure. This structure
 *  should be created using make_mime_type().
 *
 *  NOTE: All input strings are COPIED before permanent use.
 *
 * Args:
 *   mimePtr [IN] Pointer to the emsMIMEtype structure to altered
 *   name    [IN] Name of the parameter to be removed
 *   
 *  Returns: Boolean (TRUE = success, FALSE = failure)
 */
int remove_mime_parameter(emsMIMEtypeP mimePtr, const char *name)
{
	if (!mimePtr)
		return (FALSE);

	emsMIMEParamP paramPtr = mimePtr->params, prevParamPtr = NULL;

	/* Find the parameter */
	while (paramPtr)
	{
		if (strcmp(paramPtr->name, name) == 0)
			break;

		prevParamPtr = paramPtr;
		paramPtr = paramPtr->next;
	}

	if (!paramPtr)
	    return (FALSE); /* Not found */

	if (prevParamPtr == NULL) /* Removing first in list */
		mimePtr->params = paramPtr->next;
	else
		prevParamPtr->next = paramPtr->next;

	paramPtr->next = NULL;
	free_param_type(paramPtr);

	return (TRUE);
}

/* - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - */

/*
 *  Check for a matching MIME type/subtype. If either type or subtype is
 *  NULL, then it won't be checked. If both are NULL, then TRUE is always
 *  returned.
 *
 *  Args:
 *   mimePtr   [IN] Pointer to the emsMIMEtype structure
 *   mime_type [IN] The major MIME type to check
 *   sub_type  [IN] The MIME subtype to check
 *  
 *  Returns: Boolean (TRUE if the MIME type matches, FALSE if not)
 */
int match_mime_type(emsMIMEtypeP mimePtr, const char *mime_type,
					const char *sub_type)
{
	if (!mimePtr)
		return (FALSE);

	return (
			((mime_type == NULL) || (stricmp(mimePtr->type, mime_type) == 0))
			&&
			((sub_type == NULL) || (stricmp(mimePtr->subType, sub_type) == 0))
		   );
}

/* ========================================================================== */
/*                              LOCAL FUNCTIONS                               */
/* ========================================================================== */

/* Private function used to free the parameter linked-list */
/* static */ void free_param_type(emsMIMEParamP paramPtr)
{
	emsMIMEParamP nextParamPtr;

	while (paramPtr)
	{
		nextParamPtr = paramPtr->next;

		safefree(paramPtr->name);
		safefree(paramPtr->value);
		safefree(paramPtr);

		paramPtr = nextParamPtr;
	}
}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美一级黄色录像| 精品日韩成人av| 久久五月婷婷丁香社区| 精品欧美久久久| 丁香天五香天堂综合| 欧美午夜电影在线播放| 中国色在线观看另类| 日日夜夜精品视频天天综合网| 成人毛片视频在线观看| 日韩美一区二区三区| 亚洲 欧美综合在线网络| 成人深夜福利app| 久久综合网色—综合色88| 污片在线观看一区二区| 色老头久久综合| 亚洲欧美综合另类在线卡通| 精品一区二区国语对白| 欧美美女黄视频| 亚洲国产aⅴ成人精品无吗| 91在线观看污| 国产精品久久久一本精品| 精品无人区卡一卡二卡三乱码免费卡| 日本亚洲天堂网| 国产一区二区主播在线| 欧美精选一区二区| 午夜视频久久久久久| 色婷婷久久久亚洲一区二区三区| 国产精品视频观看| 国产大陆精品国产| 久久久久久久久岛国免费| 久久99精品久久久久久动态图| 日韩一级完整毛片| 日韩成人免费看| 欧美一区二区精美| 看国产成人h片视频| 日韩欧美一级精品久久| 麻豆中文一区二区| 26uuu成人网一区二区三区| 国产一区二区中文字幕| 久久久久久免费毛片精品| 国产精品一区二区黑丝| 精品99久久久久久| 国产麻豆精品视频| 久久狠狠亚洲综合| 日韩一区欧美二区| 欧美日韩精品专区| 丝袜亚洲另类丝袜在线| 3d成人动漫网站| 久久精品国产99国产精品| 亚洲精品在线观看网站| 国产一区在线看| 国产精品高潮呻吟| 91成人看片片| 久久精品国产亚洲高清剧情介绍| www精品美女久久久tv| 成人午夜短视频| 洋洋成人永久网站入口| 欧美高清视频不卡网| 黄页网站大全一区二区| 亚洲婷婷在线视频| 欧美精品高清视频| 国产99久久久国产精品免费看 | 国产69精品久久久久777| 日本一区二区免费在线观看视频| 成人av在线播放网址| 亚洲午夜久久久久久久久电影院| 91精品国产91久久久久久最新毛片| 久久精工是国产品牌吗| 亚洲日本va午夜在线影院| 欧美一卡二卡在线| 成人av集中营| 日本欧美一区二区三区| 中文在线免费一区三区高中清不卡 | 波多野结衣中文字幕一区| 亚洲一区二区三区四区在线免费观看| 91精品国产综合久久精品性色| 高清国产一区二区| 天天亚洲美女在线视频| 国产精品动漫网站| 日韩午夜av一区| 91蝌蚪porny九色| 激情综合网天天干| 亚洲制服丝袜一区| 欧美国产一区在线| 日韩午夜激情视频| 欧美午夜片在线看| 波多野结衣欧美| 国产美女娇喘av呻吟久久| 午夜精品一区在线观看| 国产精品高潮呻吟| 久久久久久一二三区| 欧美一区二区福利视频| 色欧美88888久久久久久影院| 秋霞国产午夜精品免费视频| 欧美一级生活片| 男人的j进女人的j一区| 久久九九影视网| 久久综合九色综合欧美就去吻 | 欧洲国产伦久久久久久久| 日本亚洲最大的色成网站www| 国产精品色婷婷久久58| 欧美va天堂va视频va在线| 欧美日韩成人一区二区| 91麻豆6部合集magnet| www.亚洲色图.com| 国产99久久久精品| 国产精品资源在线看| 理论电影国产精品| 美女视频黄频大全不卡视频在线播放| 亚洲免费av在线| 亚洲激情校园春色| 亚洲欧洲国产日本综合| 国产调教视频一区| 成人深夜在线观看| 国产成人精品午夜视频免费| 精品一区在线看| 国产精品18久久久久久久久 | 欧美成人一区二区三区 | 欧美日韩精品欧美日韩精品一综合| 色综合 综合色| 色婷婷久久久久swag精品| 91亚洲国产成人精品一区二三 | 亚洲人吸女人奶水| 亚洲精品视频观看| 一区二区高清视频在线观看| 亚洲青青青在线视频| 一区二区三区精品在线| 亚洲国产欧美一区二区三区丁香婷| 亚洲成人福利片| 久88久久88久久久| 国产伦精一区二区三区| 成人精品视频.| 在线观看不卡一区| 欧美猛男男办公室激情| 精品毛片乱码1区2区3区| 国产婷婷一区二区| 亚洲日穴在线视频| 亚洲成av人片一区二区梦乃 | 亚洲成av人综合在线观看| 午夜精品影院在线观看| 韩国三级在线一区| 97精品国产露脸对白| 在线影视一区二区三区| 日韩欧美一二三四区| 国产欧美日韩另类视频免费观看| 亚洲少妇30p| 日韩二区三区四区| 不卡视频在线看| 欧美男男青年gay1069videost| 久久久久久一二三区| 亚洲精品欧美专区| 精品亚洲porn| 一本到不卡免费一区二区| 日韩欧美国产麻豆| 亚洲男人天堂一区| 久久99热狠狠色一区二区| 日本乱码高清不卡字幕| 精品理论电影在线观看| 亚洲免费观看高清完整版在线| 人人爽香蕉精品| 色婷婷久久综合| 国产午夜亚洲精品理论片色戒 | 国产精品久久国产精麻豆99网站| 亚洲不卡在线观看| 成人激情图片网| 日韩丝袜情趣美女图片| 一区二区三区四区乱视频| 国产真实乱偷精品视频免| 欧洲视频一区二区| 日本一二三四高清不卡| 日本亚洲电影天堂| 欧美午夜电影在线播放| 亚洲欧美综合色| 成人网男人的天堂| 精品99一区二区三区| 日韩精品一二三区| 色久优优欧美色久优优| 中文字幕精品三区| 国产精品亚洲专一区二区三区| 91精品国产综合久久福利| 开心九九激情九九欧美日韩精美视频电影 | 午夜久久久久久久久| 国产iv一区二区三区| 欧美电影免费观看完整版| 午夜精品免费在线| 在线日韩国产精品| 一区二区三区在线影院| a4yy欧美一区二区三区| 久久精品网站免费观看| 伦理电影国产精品| 日韩欧美一区二区不卡| 一区二区免费在线播放| 一本到不卡精品视频在线观看| 国产精品美女久久久久aⅴ国产馆| 国内精品写真在线观看| 欧美一区二区免费观在线| 男女性色大片免费观看一区二区| 在线亚洲免费视频| 亚洲va天堂va国产va久| 欧美日韩精品一区二区天天拍小说 |