[YukiWiki] [[zz_GetString()]]

[ トップ | 一覧 | 編集 | 差分 | 単語検索 | 最終更新 | ]

 #define GETSTRING_DELIM '&'
 #define MAX_QUERY_STRING 200
 #define MAX_GETSTRING_VALUE_LEN 1023	/* nul文字を含めない長さ */

 /* '&' を改行文字とし、複数行が格納された zz_query_string グローバル変数の中から
  * 行頭が tgt に一致する行を探し、それに1文字あけて続く文字列を dstにコピーする
  */
 char	*zz_GetString(char *dst,char *tgt)
 {
	int	i;

	char *line = zz_query_string;
	char *delim_ptr;
	int tgt_len = strlen(tgt);
	int line_len;
	int value_len;
	int value_start;

	for(i=0;i<MAX_QUERY_STRING;i++)
	{
		delim_ptr = strchr( line, GETSTRING_DELIM );
		if ( delim_ptr )
			line_len = delim_ptr - line;
		else
			line_len = strlen(line);

		/* 行の長さが tgt より長く、かつ行頭が tgt と一致した場合 */
		if ( line_len > tgt_len /* && line[tgt_len] == '=' */ && !strncmp(line, tgt, tgt_len) )
		{
			/* 値部分の開始位置と長さ */
			value_start = tgt_len + 1; /* tgt '=' value */
			value_len = line_len - value_start;

			/* 長さを丸める */
			if ( value_len > MAX_GETSTRING_VALUE_LEN )
				value_len = MAX_GETSTRING_VALUE_LEN;

			/* 値をコピー */
			memcpy( dst, line + value_start, value_len );
			dst[value_len] = '\0';

			return dst;
		}

		if ( !delim_ptr )
			break;

		line += line_len + 1; /* skip delim */
	}
	*dst = '\0';
	return	dst;
 }

YukiWiki 1.6.2 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by aki.