added new string functions and fixed get_file_name() for sed
- added qse_str_setlen() & qse_str_getlen() - changed get_file_name() to ignore trailing spaces of a file name.
This commit is contained in:
		| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: str.h 90 2009-03-01 09:58:19Z hyunghwan.chung $ |  * $Id: str.h 110 2009-03-24 05:52:27Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|    Copyright 2006-2009 Chung, Hyung-Hwan. |    Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|  |  | ||||||
| @ -420,37 +420,68 @@ void qse_str_setsizer ( | |||||||
| ); | ); | ||||||
| /******/ | /******/ | ||||||
|  |  | ||||||
| /* | /****f* Common/qse_str_getcapa | ||||||
|  * NAME: get capacity |  * NAME | ||||||
|  * |  *  qse_str_getcapa - get capacity | ||||||
|  * DESCRIPTION: |  * DESCRIPTION | ||||||
|  *  The qse_str_getcapa() function returns the current capacity. |  *  The qse_str_getcapa() function returns the current capacity. | ||||||
|  *  You may use QSE_STR_CAPA(str) macro for performance sake. |  *  You may use QSE_STR_CAPA(str) macro for performance sake. | ||||||
|  * |  * RETURNS | ||||||
|  * RETURNS: the current capacity in number of characters. |  *  current capacity in number of characters. | ||||||
|  */ |  */ | ||||||
| qse_size_t qse_str_getcapa ( | qse_size_t qse_str_getcapa ( | ||||||
| 	qse_str_t* str /* a dynamic string */ | 	qse_str_t* str | ||||||
| ); | ); | ||||||
|  | /******/ | ||||||
|  |  | ||||||
| /* | /****f* Common/qse_str_setcapa | ||||||
|  * NAME: set new capacity |  * NAME | ||||||
|  * |  *  qse_str_setcapa - set new capacity | ||||||
|  * DESCRIPTION: |  * DESCRIPTION | ||||||
|  *  The qse_str_setcapa() function set new capacity. If the new capacity |  *  The qse_str_setcapa() function sets the new capacity. If the new capacity | ||||||
|  *  is smaller than the old, the overflowing characters are removed from |  *  is smaller than the old, the overflowing characters are removed from | ||||||
|  *  from the buffer. |  *  from the buffer. | ||||||
|  *  |  * RETURNS | ||||||
|  * RETURNS: -1 on failure, a new capacity on success  |  *  (qse_size_t)-1 on failure, new capacity on success  | ||||||
|  */ |  */ | ||||||
| qse_size_t qse_str_setcapa ( | qse_size_t qse_str_setcapa ( | ||||||
| 	qse_str_t* str  /* a dynamic string */, | 	qse_str_t* str, | ||||||
| 	qse_size_t capa /* a new capacity */ | 	qse_size_t capa | ||||||
| ); | ); | ||||||
|  | /******/ | ||||||
|  |  | ||||||
|  | /****f* Common/qse_str_getlen | ||||||
|  |  * NAME | ||||||
|  |  *  qse_str_getlen - get length | ||||||
|  |  */ | ||||||
|  | qse_size_t qse_str_getlen ( | ||||||
|  | 	qse_str_t* str | ||||||
|  | ); | ||||||
|  | /******/ | ||||||
|  |  | ||||||
|  | /****f* Common/qse_str_setlen | ||||||
|  |  * NAME | ||||||
|  |  *  qse_str_setlen - change length | ||||||
|  |  * RETURNS | ||||||
|  |  *  (qse_size_t)-1 on failure, new length on success  | ||||||
|  |  */ | ||||||
|  | qse_size_t qse_str_setlen ( | ||||||
|  | 	qse_str_t* str, | ||||||
|  | 	qse_size_t len | ||||||
|  | ); | ||||||
|  | /******/ | ||||||
|  |  | ||||||
|  | /****f* Common/qse_str_clear | ||||||
|  |  * NAME | ||||||
|  |  *  qse_str_clear - clear a string | ||||||
|  |  * DESCRIPTION | ||||||
|  |  *  The qse_str_clear() funtion deletes all characters in a string and sets | ||||||
|  |  *  the length to 0. It doesn't resize the internal buffer. | ||||||
|  |  */ | ||||||
| void qse_str_clear ( | void qse_str_clear ( | ||||||
| 	qse_str_t* str | 	qse_str_t* str | ||||||
| ); | ); | ||||||
|  | /******/ | ||||||
|  |  | ||||||
| void qse_str_swap ( | void qse_str_swap ( | ||||||
| 	qse_str_t* str, | 	qse_str_t* str, | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: str_dyn.c 109 2009-03-24 01:44:31Z hyunghwan.chung $ |  * $Id: str_dyn.c 110 2009-03-24 05:52:27Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|    Copyright 2006-2009 Chung, Hyung-Hwan. |    Copyright 2006-2009 Chung, Hyung-Hwan. | ||||||
|  |  | ||||||
| @ -159,6 +159,31 @@ qse_size_t qse_str_setcapa (qse_str_t* str, qse_size_t capa) | |||||||
| 	return str->capa; | 	return str->capa; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | qse_size_t qse_str_getlen (qse_str_t* str) | ||||||
|  | { | ||||||
|  | 	return QSE_STR_LEN (str); | ||||||
|  | } | ||||||
|  |  | ||||||
|  | qse_size_t qse_str_setlen (qse_str_t* str, qse_size_t len) | ||||||
|  | { | ||||||
|  | 	if (len == str->len) return len; | ||||||
|  | 	if (len < str->len)  | ||||||
|  | 	{ | ||||||
|  | 		str->len = len; | ||||||
|  | 		str->ptr[len] = QSE_T('\0');	 | ||||||
|  | 		return len; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if (len > str->capa) | ||||||
|  | 	{ | ||||||
|  | 		if (qse_str_setcapa (str, len) == (qse_size_t)-1)  | ||||||
|  | 			return (qse_size_t)-1; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	while (str->len < len) str->ptr[str->len++] = QSE_T(' '); | ||||||
|  | 	return str->len; | ||||||
|  | } | ||||||
|  |  | ||||||
| void qse_str_clear (qse_str_t* str) | void qse_str_clear (qse_str_t* str) | ||||||
| { | { | ||||||
| 	str->len = 0; | 	str->len = 0; | ||||||
|  | |||||||
| @ -580,11 +580,7 @@ static int get_file_name (qse_sed_t* sed, qse_sed_cmd_t* cmd) | |||||||
|  |  | ||||||
| 	if (trailing_spaces > 0) | 	if (trailing_spaces > 0) | ||||||
| 	{ | 	{ | ||||||
| 		qse_str_delete ( | 		qse_str_setlen (t, QSE_STR_LEN(t) - trailing_spaces); | ||||||
| 			t,  |  | ||||||
| 			QSE_STR_LEN(t) - trailing_spaces, |  | ||||||
| 			trailing_spaces |  | ||||||
| 		); |  | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	qse_str_yield (t, &cmd->u.filename, 0); | 	qse_str_yield (t, &cmd->u.filename, 0); | ||||||
|  | |||||||
| @ -29,6 +29,18 @@ static int test1 () | |||||||
| 		(unsigned)QSE_STR_LEN(s1), (unsigned)QSE_STR_CAPA(s1),  | 		(unsigned)QSE_STR_LEN(s1), (unsigned)QSE_STR_CAPA(s1),  | ||||||
| 		(int)QSE_STR_LEN(s1), QSE_STR_PTR(s1)); | 		(int)QSE_STR_LEN(s1), QSE_STR_PTR(s1)); | ||||||
|  |  | ||||||
|  | 	qse_printf (QSE_T("LEN=%u\n"), | ||||||
|  | 		(unsigned int)qse_str_setlen (s1, QSE_STR_LEN(s1)-1)); | ||||||
|  | 	qse_printf (QSE_T("LEN=%u CAPA=%u [%.*s]\n"),  | ||||||
|  | 		(unsigned)QSE_STR_LEN(s1), (unsigned)QSE_STR_CAPA(s1),  | ||||||
|  | 		(int)QSE_STR_LEN(s1), QSE_STR_PTR(s1)); | ||||||
|  |  | ||||||
|  | 	qse_printf (QSE_T("LEN=%u\n"), | ||||||
|  | 		(unsigned int)qse_str_setlen (s1, QSE_STR_CAPA(s1) + 5)); | ||||||
|  | 	qse_printf (QSE_T("LEN=%u CAPA=%u [%.*s]\n"),  | ||||||
|  | 		(unsigned)QSE_STR_LEN(s1), (unsigned)QSE_STR_CAPA(s1),  | ||||||
|  | 		(int)QSE_STR_LEN(s1), QSE_STR_PTR(s1)); | ||||||
|  |  | ||||||
| 	qse_str_close (s1); | 	qse_str_close (s1); | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
| @ -215,7 +227,11 @@ static int test6 (void) | |||||||
| 		qse_size_t wlen = QSE_COUNTOF(buf); | 		qse_size_t wlen = QSE_COUNTOF(buf); | ||||||
| 		n = qse_mbstowcs (x[i], buf, &wlen); | 		n = qse_mbstowcs (x[i], buf, &wlen); | ||||||
|  |  | ||||||
| 		qse_printf (QSE_T("[%S]=>"),x[i]); | 	#ifdef QSE_CHAR_IS_MCHAR | ||||||
|  | 		qse_printf (QSE_T("[%s]=>"), x[i]); | ||||||
|  | 	#else | ||||||
|  | 		qse_printf (QSE_T("[%S]=>"), x[i]); | ||||||
|  | 	#endif | ||||||
|  |  | ||||||
| 	#ifdef QSE_CHAR_IS_MCHAR | 	#ifdef QSE_CHAR_IS_MCHAR | ||||||
| 		qse_printf (QSE_T("[%S] %d chars %d bytes\n"), buf, (int)wlen, (int)n); | 		qse_printf (QSE_T("[%S] %d chars %d bytes\n"), buf, (int)wlen, (int)n); | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user