added qse_strjoin()/qse_strxjoin() and variants
This commit is contained in:
		| @ -914,6 +914,56 @@ QSE_EXPORT qse_size_t qse_wcsxncat ( | |||||||
| #	define qse_strxncat(buf,bsz,str,len) qse_wcsxncat(buf,bsz,str,len) | #	define qse_strxncat(buf,bsz,str,len) qse_wcsxncat(buf,bsz,str,len) | ||||||
| #endif | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | /* ---------------------------------------------------- */ | ||||||
|  |  | ||||||
|  | QSE_EXPORT qse_size_t qse_mbsjoin ( | ||||||
|  | 	qse_mchar_t* buf,  | ||||||
|  | 	... | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | QSE_EXPORT qse_size_t qse_mbsxjoin ( | ||||||
|  | 	qse_mchar_t* buf, | ||||||
|  | 	qse_size_t   size, | ||||||
|  | 	... | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | /* | ||||||
|  |  * The qse_wcsjoin() function joins a list of wide-charcter strings into  | ||||||
|  |  * a buffer. The list of strings is terminated by QSE_NULL. | ||||||
|  |  * | ||||||
|  |  * \code | ||||||
|  |  *  qse_wcsjoin (x, QSE_T("hello"), QSE_T("world"), QSE_NULL); | ||||||
|  |  * \endcode | ||||||
|  |  * | ||||||
|  |  * \return the number of character in the joined string excluding  | ||||||
|  |  *         the terminating null. | ||||||
|  |  */ | ||||||
|  | QSE_EXPORT qse_size_t qse_wcsjoin ( | ||||||
|  | 	qse_wchar_t* buf,  | ||||||
|  | 	... | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | QSE_EXPORT qse_size_t qse_wcsxjoin ( | ||||||
|  | 	qse_wchar_t* buf, | ||||||
|  | 	qse_size_t   size, | ||||||
|  | 	... | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | QSE_EXPORT qse_size_t qse_strjoin ( | ||||||
|  | 	qse_char_t* buf,  | ||||||
|  | 	... | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | QSE_EXPORT qse_size_t qse_strxjoin ( | ||||||
|  | 	qse_char_t* buf, | ||||||
|  | 	qse_size_t  size, | ||||||
|  | 	... | ||||||
|  | ); | ||||||
|  |  | ||||||
|  | /* ---------------------------------------------------- */ | ||||||
|  |  | ||||||
|  |  | ||||||
| QSE_EXPORT int qse_mbscmp ( | QSE_EXPORT int qse_mbscmp ( | ||||||
| 	const qse_mchar_t* s1, | 	const qse_mchar_t* s1, | ||||||
| 	const qse_mchar_t* s2 | 	const qse_mchar_t* s2 | ||||||
|  | |||||||
| @ -12,6 +12,7 @@ noinst_HEADERS = \ | |||||||
| 	fs.h \ | 	fs.h \ | ||||||
| 	mem.h \ | 	mem.h \ | ||||||
| 	printf.h \ | 	printf.h \ | ||||||
|  | 	str-join.h \ | ||||||
| 	str-subst.h \ | 	str-subst.h \ | ||||||
| 	syscall.h \ | 	syscall.h \ | ||||||
| 	syserr.h \ | 	syserr.h \ | ||||||
| @ -83,6 +84,7 @@ libqsecmn_la_SOURCES = \ | |||||||
| 	str-fcpy.c \ | 	str-fcpy.c \ | ||||||
| 	str-fnmat.c \ | 	str-fnmat.c \ | ||||||
| 	str-incl.c \ | 	str-incl.c \ | ||||||
|  | 	str-join.c \ | ||||||
| 	str-len.c \ | 	str-len.c \ | ||||||
| 	str-pac.c \ | 	str-pac.c \ | ||||||
| 	str-pbrk.c \ | 	str-pbrk.c \ | ||||||
|  | |||||||
| @ -94,12 +94,12 @@ am__libqsecmn_la_SOURCES_DIST = alg-base64.c alg-rand.c alg-search.c \ | |||||||
| 	slmb.c stdio.c str-beg.c str-cat.c str-chr.c str-cnv.c \ | 	slmb.c stdio.c str-beg.c str-cat.c str-chr.c str-cnv.c \ | ||||||
| 	str-cmp.c str-cpy.c str-del.c str-dup.c str-dynm.c str-dynw.c \ | 	str-cmp.c str-cpy.c str-del.c str-dup.c str-dynm.c str-dynw.c \ | ||||||
| 	str-end.c str-excl.c str-fcpy.c str-fnmat.c str-incl.c \ | 	str-end.c str-excl.c str-fcpy.c str-fnmat.c str-incl.c \ | ||||||
| 	str-len.c str-pac.c str-pbrk.c str-put.c str-rev.c str-rot.c \ | 	str-join.c str-len.c str-pac.c str-pbrk.c str-put.c str-rev.c \ | ||||||
| 	str-set.c str-spl.c str-spn.c str-str.c str-subst.c str-tok.c \ | 	str-rot.c str-set.c str-spl.c str-spn.c str-str.c str-subst.c \ | ||||||
| 	str-trm.c str-word.c task.c time.c tio.c tre.c tre-ast.c \ | 	str-tok.c str-trm.c str-word.c task.c time.c tio.c tre.c \ | ||||||
| 	tre-compile.c tre-match-backtrack.c tre-match-parallel.c \ | 	tre-ast.c tre-compile.c tre-match-backtrack.c \ | ||||||
| 	tre-parse.c tre-stack.c uri.c utf8.c xma.c uni.c cp949.c \ | 	tre-match-parallel.c tre-parse.c tre-stack.c uri.c utf8.c \ | ||||||
| 	cp950.c | 	xma.c uni.c cp949.c cp950.c | ||||||
| @ENABLE_BUNDLED_UNICODE_TRUE@am__objects_1 = uni.lo | @ENABLE_BUNDLED_UNICODE_TRUE@am__objects_1 = uni.lo | ||||||
| @ENABLE_XCMGRS_TRUE@am__objects_2 = cp949.lo cp950.lo | @ENABLE_XCMGRS_TRUE@am__objects_2 = cp949.lo cp950.lo | ||||||
| am_libqsecmn_la_OBJECTS = alg-base64.lo alg-rand.lo alg-search.lo \ | am_libqsecmn_la_OBJECTS = alg-base64.lo alg-rand.lo alg-search.lo \ | ||||||
| @ -112,12 +112,13 @@ am_libqsecmn_la_OBJECTS = alg-base64.lo alg-rand.lo alg-search.lo \ | |||||||
| 	str-beg.lo str-cat.lo str-chr.lo str-cnv.lo str-cmp.lo \ | 	str-beg.lo str-cat.lo str-chr.lo str-cnv.lo str-cmp.lo \ | ||||||
| 	str-cpy.lo str-del.lo str-dup.lo str-dynm.lo str-dynw.lo \ | 	str-cpy.lo str-del.lo str-dup.lo str-dynm.lo str-dynw.lo \ | ||||||
| 	str-end.lo str-excl.lo str-fcpy.lo str-fnmat.lo str-incl.lo \ | 	str-end.lo str-excl.lo str-fcpy.lo str-fnmat.lo str-incl.lo \ | ||||||
| 	str-len.lo str-pac.lo str-pbrk.lo str-put.lo str-rev.lo \ | 	str-join.lo str-len.lo str-pac.lo str-pbrk.lo str-put.lo \ | ||||||
| 	str-rot.lo str-set.lo str-spl.lo str-spn.lo str-str.lo \ | 	str-rev.lo str-rot.lo str-set.lo str-spl.lo str-spn.lo \ | ||||||
| 	str-subst.lo str-tok.lo str-trm.lo str-word.lo task.lo time.lo \ | 	str-str.lo str-subst.lo str-tok.lo str-trm.lo str-word.lo \ | ||||||
| 	tio.lo tre.lo tre-ast.lo tre-compile.lo tre-match-backtrack.lo \ | 	task.lo time.lo tio.lo tre.lo tre-ast.lo tre-compile.lo \ | ||||||
| 	tre-match-parallel.lo tre-parse.lo tre-stack.lo uri.lo utf8.lo \ | 	tre-match-backtrack.lo tre-match-parallel.lo tre-parse.lo \ | ||||||
| 	xma.lo $(am__objects_1) $(am__objects_2) | 	tre-stack.lo uri.lo utf8.lo xma.lo $(am__objects_1) \ | ||||||
|  | 	$(am__objects_2) | ||||||
| libqsecmn_la_OBJECTS = $(am_libqsecmn_la_OBJECTS) | libqsecmn_la_OBJECTS = $(am_libqsecmn_la_OBJECTS) | ||||||
| AM_V_lt = $(am__v_lt_@AM_V@) | AM_V_lt = $(am__v_lt_@AM_V@) | ||||||
| am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) | am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) | ||||||
| @ -369,6 +370,7 @@ noinst_HEADERS = \ | |||||||
| 	fs.h \ | 	fs.h \ | ||||||
| 	mem.h \ | 	mem.h \ | ||||||
| 	printf.h \ | 	printf.h \ | ||||||
|  | 	str-join.h \ | ||||||
| 	str-subst.h \ | 	str-subst.h \ | ||||||
| 	syscall.h \ | 	syscall.h \ | ||||||
| 	syserr.h \ | 	syserr.h \ | ||||||
| @ -387,10 +389,10 @@ libqsecmn_la_SOURCES = alg-base64.c alg-rand.c alg-search.c alg-sort.c \ | |||||||
| 	pio.c pma.c rbt.c rex.c printf.c sio.c sll.c slmb.c stdio.c \ | 	pio.c pma.c rbt.c rex.c printf.c sio.c sll.c slmb.c stdio.c \ | ||||||
| 	str-beg.c str-cat.c str-chr.c str-cnv.c str-cmp.c str-cpy.c \ | 	str-beg.c str-cat.c str-chr.c str-cnv.c str-cmp.c str-cpy.c \ | ||||||
| 	str-del.c str-dup.c str-dynm.c str-dynw.c str-end.c str-excl.c \ | 	str-del.c str-dup.c str-dynm.c str-dynw.c str-end.c str-excl.c \ | ||||||
| 	str-fcpy.c str-fnmat.c str-incl.c str-len.c str-pac.c \ | 	str-fcpy.c str-fnmat.c str-incl.c str-join.c str-len.c \ | ||||||
| 	str-pbrk.c str-put.c str-rev.c str-rot.c str-set.c str-spl.c \ | 	str-pac.c str-pbrk.c str-put.c str-rev.c str-rot.c str-set.c \ | ||||||
| 	str-spn.c str-str.c str-subst.c str-tok.c str-trm.c str-word.c \ | 	str-spl.c str-spn.c str-str.c str-subst.c str-tok.c str-trm.c \ | ||||||
| 	task.c time.c tio.c tre.c tre-ast.c tre-compile.c \ | 	str-word.c task.c time.c tio.c tre.c tre-ast.c tre-compile.c \ | ||||||
| 	tre-match-backtrack.c tre-match-parallel.c tre-parse.c \ | 	tre-match-backtrack.c tre-match-parallel.c tre-parse.c \ | ||||||
| 	tre-stack.c uri.c utf8.c xma.c $(am__append_1) $(am__append_2) | 	tre-stack.c uri.c utf8.c xma.c $(am__append_1) $(am__append_2) | ||||||
| libqsecmn_la_LDFLAGS = -version-info 1:0:0 -no-undefined | libqsecmn_la_LDFLAGS = -version-info 1:0:0 -no-undefined | ||||||
| @ -540,6 +542,7 @@ distclean-compile: | |||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-fcpy.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-fcpy.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-fnmat.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-fnmat.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-incl.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-incl.Plo@am__quote@ | ||||||
|  | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-join.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-len.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-len.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-pac.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-pac.Plo@am__quote@ | ||||||
| @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-pbrk.Plo@am__quote@ | @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-pbrk.Plo@am__quote@ | ||||||
|  | |||||||
							
								
								
									
										77
									
								
								qse/lib/cmn/str-join.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										77
									
								
								qse/lib/cmn/str-join.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,77 @@ | |||||||
|  | /* | ||||||
|  |  * $Id$ | ||||||
|  |  * | ||||||
|  |     Copyright 2006-2012 Chung, Hyung-Hwan. | ||||||
|  |     This file is part of QSE. | ||||||
|  |  | ||||||
|  |     QSE is free software: you can redistribute it and/or modify | ||||||
|  |     it under the terms of the GNU Lesser General Public License as | ||||||
|  |     published by the Free Software Foundation, either version 3 of | ||||||
|  |     the License, or (at your option) any later version. | ||||||
|  |  | ||||||
|  |     QSE is distributed in the hope that it will be useful, | ||||||
|  |     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |     GNU Lesser General Public License for more details. | ||||||
|  |  | ||||||
|  |     You should have received a copy of the GNU Lesser General Public | ||||||
|  |     License along with QSE. If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #include <qse/cmn/str.h> | ||||||
|  | #include <stdarg.h> | ||||||
|  |  | ||||||
|  | /* ----------------------------------- */ | ||||||
|  |  | ||||||
|  | #undef char_t | ||||||
|  | #undef strjoin | ||||||
|  | #undef strjoinv | ||||||
|  | #undef strxjoin | ||||||
|  | #undef strxjoinv | ||||||
|  | #undef strcpy | ||||||
|  | #undef strxcpy | ||||||
|  |  | ||||||
|  | #define char_t qse_mchar_t | ||||||
|  | #define strjoin qse_mbsjoin | ||||||
|  | #define strjoinv qse_mbsjoinv | ||||||
|  | #define strxjoin qse_mbsxjoin | ||||||
|  | #define strxjoinv qse_mbsxjoinv | ||||||
|  | #define strcpy qse_mbscpy | ||||||
|  | #define strxcpy qse_mbsxcpy | ||||||
|  | #include "str-join.h" | ||||||
|  |  | ||||||
|  | /* ----------------------------------- */ | ||||||
|  |  | ||||||
|  | #undef char_t | ||||||
|  | #undef strjoin | ||||||
|  | #undef strjoinv | ||||||
|  | #undef strxjoin | ||||||
|  | #undef strxjoinv | ||||||
|  | #undef strcpy | ||||||
|  | #undef strxcpy | ||||||
|  |  | ||||||
|  | #define char_t qse_wchar_t | ||||||
|  | #define strjoin qse_wcsjoin | ||||||
|  | #define strjoinv qse_wcsjoinv | ||||||
|  | #define strxjoin qse_wcsxjoin | ||||||
|  | #define strxjoinv qse_wcsxjoinv | ||||||
|  | #define strcpy qse_wcscpy | ||||||
|  | #define strxcpy qse_wcsxcpy | ||||||
|  | #include "str-join.h" | ||||||
|  |  | ||||||
|  | #undef char_t | ||||||
|  | #undef strjoin | ||||||
|  | #undef strjoinv | ||||||
|  | #undef strxjoin | ||||||
|  | #undef strxjoinv | ||||||
|  | #undef strcpy | ||||||
|  | #undef strxcpy | ||||||
|  |  | ||||||
|  | #define char_t qse_char_t | ||||||
|  | #define strjoin qse_strjoin | ||||||
|  | #define strjoinv qse_strjoinv | ||||||
|  | #define strxjoin qse_strxjoin | ||||||
|  | #define strxjoinv qse_strxjoinv | ||||||
|  | #define strcpy qse_strcpy | ||||||
|  | #define strxcpy qse_strxcpy | ||||||
|  | #include "str-join.h" | ||||||
							
								
								
									
										86
									
								
								qse/lib/cmn/str-join.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										86
									
								
								qse/lib/cmn/str-join.h
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,86 @@ | |||||||
|  | /* | ||||||
|  |  * $Id$ | ||||||
|  |  * | ||||||
|  |     Copyright 2006-2012 Chung, Hyung-Hwan. | ||||||
|  |     This file is part of QSE. | ||||||
|  |  | ||||||
|  |     QSE is free software: you can redistribute it and/or modify | ||||||
|  |     it under the terms of the GNU Lesser General Public License as | ||||||
|  |     published by the Free Software Foundation, either version 3 of | ||||||
|  |     the License, or (at your option) any later version. | ||||||
|  |  | ||||||
|  |     QSE is distributed in the hope that it will be useful, | ||||||
|  |     but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||||
|  |     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||||
|  |     GNU Lesser General Public License for more details. | ||||||
|  |  | ||||||
|  |     You should have received a copy of the GNU Lesser General Public | ||||||
|  |     License along with QSE. If not, see <http://www.gnu.org/licenses/>. | ||||||
|  |  */ | ||||||
|  |  | ||||||
|  | #if !defined(char_t) && !defined(strjoin) && !defined(strxjoin) | ||||||
|  | #	error Never include this file | ||||||
|  | #endif | ||||||
|  |  | ||||||
|  |  | ||||||
|  | qse_size_t strxjoinv (char_t* buf, qse_size_t size, va_list ap) | ||||||
|  | { | ||||||
|  | 	const char_t* p; | ||||||
|  | 	char_t* ptr = buf; | ||||||
|  | 	qse_size_t left = size, n; | ||||||
|  |  | ||||||
|  | 	while (left > 0)  | ||||||
|  | 	{ | ||||||
|  | 		p = va_arg (ap, const char_t*); | ||||||
|  | 		if (p == QSE_NULL) break; | ||||||
|  |  | ||||||
|  | 		n = strxcpy (ptr, left, p); | ||||||
|  | 		left -= n; ptr += n; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return size - left; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | qse_size_t strxjoin (char_t* buf, qse_size_t size, ...) | ||||||
|  | { | ||||||
|  | 	va_list ap; | ||||||
|  | 	qse_size_t n; | ||||||
|  |  | ||||||
|  | 	va_start (ap, size); | ||||||
|  | 	n = strxjoinv (buf, size, ap); | ||||||
|  | 	va_end (ap); | ||||||
|  |  | ||||||
|  | 	return n; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | qse_size_t strjoinv (char_t* buf, va_list ap) | ||||||
|  | { | ||||||
|  | 	const char_t* p; | ||||||
|  | 	char_t* ptr = buf; | ||||||
|  | 	qse_size_t n; | ||||||
|  |  | ||||||
|  | 	while (1) | ||||||
|  | 	{ | ||||||
|  | 		p = va_arg (ap, const char_t*); | ||||||
|  | 		if (p == QSE_NULL) break; | ||||||
|  |  | ||||||
|  | 		n = strcpy (ptr, p); | ||||||
|  | 		ptr += n; | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return ptr - buf; | ||||||
|  | } | ||||||
|  |  | ||||||
|  |  | ||||||
|  | qse_size_t strjoin (char_t* buf, ...) | ||||||
|  | { | ||||||
|  | 	va_list ap; | ||||||
|  | 	qse_size_t n; | ||||||
|  |  | ||||||
|  | 	va_start (ap, buf); | ||||||
|  | 	n = strjoinv (buf, ap); | ||||||
|  | 	va_end (ap); | ||||||
|  |  | ||||||
|  | 	return n; | ||||||
|  | } | ||||||
		Reference in New Issue
	
	Block a user