removed special handling of $ in qse_strsubst() as literal $ can be denoted by 11789
This commit is contained in:
		| @ -950,6 +950,8 @@ QSE_EXPORT qse_size_t qse_wcsxvfmts ( | |||||||
|  *   return buf;  |  *   return buf;  | ||||||
|  * } |  * } | ||||||
|  * \endcode |  * \endcode | ||||||
|  |  * | ||||||
|  |  * Double dollars($$) translates a single literal dollar sign.  | ||||||
|  */ |  */ | ||||||
| QSE_EXPORT qse_size_t qse_mbsxsubst ( | QSE_EXPORT qse_size_t qse_mbsxsubst ( | ||||||
| 	qse_mchar_t*           buf, | 	qse_mchar_t*           buf, | ||||||
| @ -1023,6 +1025,8 @@ QSE_EXPORT qse_size_t qse_mbsxnsubst ( | |||||||
|  *   return buf;  |  *   return buf;  | ||||||
|  * } |  * } | ||||||
|  * \endcode |  * \endcode | ||||||
|  |  * | ||||||
|  |  * Double dollars($$) translates a single literal dollar sign.  | ||||||
|  */ |  */ | ||||||
| QSE_EXPORT qse_size_t qse_wcsxsubst ( | QSE_EXPORT qse_size_t qse_wcsxsubst ( | ||||||
| 	qse_wchar_t*           buf, | 	qse_wchar_t*           buf, | ||||||
|  | |||||||
| @ -132,14 +132,7 @@ qse_size_t strxnsubst ( | |||||||
|  |  | ||||||
| 	while (f < fend) | 	while (f < fend) | ||||||
| 	{ | 	{ | ||||||
| 		if (*f == T('\\')) | 		if (*f == T('$') && f < fend - 1) | ||||||
| 		{ |  | ||||||
| 			/* get the escaped character and treat it normally. |  | ||||||
| 			 * if the escaper is the last character, treat it  |  | ||||||
| 			 * normally also. */ |  | ||||||
| 			if (f < fend - 1) f++; |  | ||||||
| 		} |  | ||||||
| 		else if (*f == T('$') && f < fend - 1) |  | ||||||
| 		{ | 		{ | ||||||
| 			if (*(f + 1) == T('{')) | 			if (*(f + 1) == T('{')) | ||||||
| 			{ | 			{ | ||||||
| @ -167,7 +160,7 @@ qse_size_t strxnsubst ( | |||||||
| 			} | 			} | ||||||
| 			else if (*(f + 1) == T('$'))  | 			else if (*(f + 1) == T('$'))  | ||||||
| 			{ | 			{ | ||||||
| 				/* $$ -> $. \$ is also $. */ | 				/* $$ -> $. */ | ||||||
| 				f++; | 				f++; | ||||||
| 			} | 			} | ||||||
| 		} | 		} | ||||||
|  | |||||||
| @ -246,8 +246,8 @@ qse_char_t* subst (qse_char_t* buf, qse_size_t bsz, const qse_cstr_t* ident, voi | |||||||
| 		return buf + qse_strxput (buf, bsz, QSE_T("coders"));	 | 		return buf + qse_strxput (buf, bsz, QSE_T("coders"));	 | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| 	/* don't do anything */ | 	/*return buf; returning the buffer pointer will result in empty substitution and the default value won't be used */ | ||||||
| 	return buf; | 	return QSE_NULL; /* return NULL to take the default value if specified */ | ||||||
| } | } | ||||||
|  |  | ||||||
| static int test13 (void) | static int test13 (void) | ||||||
| @ -269,6 +269,39 @@ static int test13 (void) | |||||||
| 		} | 		} | ||||||
| 		qse_printf (QSE_T("]\n")); | 		qse_printf (QSE_T("]\n")); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | 	qse_char_t buf2[48]; | ||||||
|  |  | ||||||
|  | 	for (i = 0; i <= QSE_COUNTOF(buf2); i++) | ||||||
|  | 	{ | ||||||
|  | 		qse_strcpy (buf2, QSE_T("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")); | ||||||
|  | 		qse_strxsubst (buf2, i, QSE_T("user=${USER},group=${GROUP},xxx=${USERX:=${GROUP:=default value}}"), subst, QSE_NULL); | ||||||
|  | 		qse_printf (QSE_T("bufsize=%02d, buf2=[%-49s] "), i, buf2); | ||||||
|  |  | ||||||
|  | 		qse_printf (QSE_T("[")); | ||||||
|  | 		for (j = 0; j < QSE_COUNTOF(buf2); j++) | ||||||
|  | 		{ | ||||||
|  | 			if (buf2[j] == QSE_T('\0')) qse_printf (QSE_T("*")); | ||||||
|  | 			else qse_printf (QSE_T("%c"), buf2[j]); | ||||||
|  | 		} | ||||||
|  | 		qse_printf (QSE_T("]\n")); | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	for (i = 0; i <= QSE_COUNTOF(buf2); i++) | ||||||
|  | 	{ | ||||||
|  | 		qse_strcpy (buf2, QSE_T("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA")); | ||||||
|  | 		qse_strxsubst (buf2, i, QSE_T("user=${USER},group=${GROUP},xxx=${USERX:=${GROUPX:=default value}}"), subst, QSE_NULL); | ||||||
|  | 		qse_printf (QSE_T("bufsize=%02d, buf2=[%-49s] "), i, buf2); | ||||||
|  |  | ||||||
|  | 		qse_printf (QSE_T("[")); | ||||||
|  | 		for (j = 0; j < QSE_COUNTOF(buf2); j++) | ||||||
|  | 		{ | ||||||
|  | 			if (buf2[j] == QSE_T('\0')) qse_printf (QSE_T("*")); | ||||||
|  | 			else qse_printf (QSE_T("%c"), buf2[j]); | ||||||
|  | 		} | ||||||
|  | 		qse_printf (QSE_T("]\n")); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user