* changed the QSE_NWAD_LOCAL address format. it must be prefixed with @.
* fixed conversion error of a QSE_NWAD_LOCAL address to a string
This commit is contained in:
		| @ -229,6 +229,12 @@ static qse_sck_hnd_t open_server_socket (int proto, const qse_nwad_t* bindnwad) | |||||||
| 		goto oops; | 		goto oops; | ||||||
| 		 | 		 | ||||||
| 	} | 	} | ||||||
|  | 	else | ||||||
|  | 	{ | ||||||
|  | 		qse_char_t buf[512]; | ||||||
|  | 		qse_nwadtostr (bindnwad, buf, QSE_COUNTOF(buf), QSE_NWADTOSTR_ALL); | ||||||
|  | 		qse_printf (QSE_T("binding address: %s\n"), buf); | ||||||
|  | 	} | ||||||
|  |  | ||||||
| bind_ok: | bind_ok: | ||||||
| 	#if defined(IPPROTO_SCTP) | 	#if defined(IPPROTO_SCTP) | ||||||
|  | |||||||
| @ -36,6 +36,8 @@ typedef enum qse_nwad_type_t qse_nwad_type_t; | |||||||
|  |  | ||||||
| typedef struct qse_nwad_t qse_nwad_t; | typedef struct qse_nwad_t qse_nwad_t; | ||||||
|  |  | ||||||
|  | #define QSE_NWAD_LOCAL_MAX_PATH 128 | ||||||
|  |  | ||||||
| struct qse_nwad_t | struct qse_nwad_t | ||||||
| { | { | ||||||
| 	qse_nwad_type_t type; | 	qse_nwad_type_t type; | ||||||
| @ -61,7 +63,7 @@ struct qse_nwad_t | |||||||
| 			/* note: 128 is chosen based on common path length in existing | 			/* note: 128 is chosen based on common path length in existing | ||||||
| 			 *       systems. most systems have different sizes. some  | 			 *       systems. most systems have different sizes. some  | ||||||
| 			 *       trailers may get truncated, when itconverted to skad. */ | 			 *       trailers may get truncated, when itconverted to skad. */ | ||||||
| 			qse_char_t path[128];  | 			qse_char_t path[QSE_NWAD_LOCAL_MAX_PATH];  | ||||||
| 		} local; | 		} local; | ||||||
| 	} u;	 | 	} u;	 | ||||||
| }; | }; | ||||||
|  | |||||||
| @ -109,15 +109,15 @@ int qse_mbsntonwad (const qse_mchar_t* str, qse_size_t len, qse_nwad_t* nwad) | |||||||
|  |  | ||||||
| 	if (p >= end) return -1; | 	if (p >= end) return -1; | ||||||
|  |  | ||||||
| 	if (*p == QSE_MT('/')) | 	if (*p == QSE_MT('@') && len >= 2) | ||||||
| 	{ | 	{ | ||||||
| 		/* support the absolute path only */ | 		/* the string begins with @. it's a local name */ | ||||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | 	#if defined(QSE_CHAR_IS_MCHAR) | ||||||
| 		qse_mbsxncpy (tmpad.u.local.path, QSE_COUNTOF(tmpad.u.local.path), str, len); | 		qse_mbsxncpy (tmpad.u.local.path, QSE_COUNTOF(tmpad.u.local.path), p + 1, len - 1); | ||||||
| 	#else | 	#else | ||||||
| 		qse_size_t mbslen = len; | 		qse_size_t mbslen = len - 1; | ||||||
| 		qse_size_t wcslen = QSE_COUNTOF(tmpad.u.local.path) - 1; | 		qse_size_t wcslen = QSE_COUNTOF(tmpad.u.local.path) - 1; | ||||||
| 		if (qse_mbsntowcsn (str, &mbslen, tmpad.u.local.path, &wcslen) <= -1) return -1; | 		if (qse_mbsntowcsn (p + 1, &mbslen, tmpad.u.local.path, &wcslen) <= -1) return -1; | ||||||
| 		tmpad.u.local.path[wcslen] = QSE_WT('\0'); | 		tmpad.u.local.path[wcslen] = QSE_WT('\0'); | ||||||
| 	#endif | 	#endif | ||||||
|  |  | ||||||
| @ -291,20 +291,19 @@ int qse_wcsntonwad (const qse_wchar_t* str, qse_size_t len, qse_nwad_t* nwad) | |||||||
|  |  | ||||||
| 	if (p >= end) return -1; | 	if (p >= end) return -1; | ||||||
|  |  | ||||||
| 	if (*p == QSE_WT('/')) | 	if (*p == QSE_WT('@') && len >= 2) | ||||||
| 	{ | 	{ | ||||||
| 		/* support the absolute path only */ | 		/* the string begins with @. it's a local name */ | ||||||
| 	#if defined(QSE_CHAR_IS_MCHAR) | 	#if defined(QSE_CHAR_IS_MCHAR) | ||||||
| 		qse_size_t wcslen = len; | 		qse_size_t wcslen = len - 1; | ||||||
| 		qse_size_t mbslen = QSE_COUNTOF(tmpad.u.local.path) - 1; | 		qse_size_t mbslen = QSE_COUNTOF(tmpad.u.local.path) - 1; | ||||||
| 		if (qse_wcsntombsn (str, &wcslen, tmpad.u.local.path, &mbslen) <= -1) return -1; | 		if (qse_wcsntombsn (p + 1, &wcslen, tmpad.u.local.path, &mbslen) <= -1) return -1; | ||||||
| 		tmpad.u.local.path[mbslen] = QSE_MT('\0'); | 		tmpad.u.local.path[mbslen] = QSE_MT('\0'); | ||||||
| 	#else | 	#else | ||||||
| 		qse_wcsxncpy (tmpad.u.local.path, QSE_COUNTOF(tmpad.u.local.path), str, len); | 		qse_wcsxncpy (tmpad.u.local.path, QSE_COUNTOF(tmpad.u.local.path), p + 1, len - 1); | ||||||
| 	#endif | 	#endif | ||||||
|  |  | ||||||
| 		tmpad.type = QSE_NWAD_LOCAL; | 		tmpad.type = QSE_NWAD_LOCAL; | ||||||
| 		qse_wcsxncpy (tmpad.u.local.path, QSE_COUNTOF(tmpad.u.local.path), str, len); |  | ||||||
| 		goto done; | 		goto done; | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
| @ -558,13 +557,21 @@ qse_size_t qse_nwadtombs ( | |||||||
| 		case QSE_NWAD_LOCAL: | 		case QSE_NWAD_LOCAL: | ||||||
| 			if (flags & QSE_NWADTOMBS_ADDR) | 			if (flags & QSE_NWADTOMBS_ADDR) | ||||||
| 			{ | 			{ | ||||||
|  | 				if (xlen + 1 >= len) goto done; | ||||||
|  | 				buf[xlen++] = QSE_MT('@'); | ||||||
|  |  | ||||||
| 			#if defined(QSE_CHAR_IS_MCHAR) | 			#if defined(QSE_CHAR_IS_MCHAR) | ||||||
| 				xlen = qse_mbsxcpy (buf, len, nwad->u.local.path) | 				if (xlen + 1 >= len) goto done; | ||||||
|  | 				xlen += qse_mbsxcpy (&buf[xlen], len - xlen, nwad->u.local.path) | ||||||
| 			#else | 			#else | ||||||
| 				qse_size_t wcslen, mbslen = len; | 				if (xlen + 1 >= len) goto done; | ||||||
| 				qse_wcstombs (nwad->u.local.path, &wcslen, buf, &mbslen); | 				else | ||||||
|  | 				{ | ||||||
|  | 					qse_size_t wcslen, mbslen = len - xlen; | ||||||
|  | 					qse_wcstombs (nwad->u.local.path, &wcslen, &buf[xlen], &mbslen); | ||||||
| 					/* i don't care about conversion errors */ | 					/* i don't care about conversion errors */ | ||||||
| 				xlen = mbslen; | 					xlen += mbslen; | ||||||
|  | 				} | ||||||
| 			#endif | 			#endif | ||||||
| 			} | 			} | ||||||
|  |  | ||||||
| @ -679,13 +686,21 @@ qse_size_t qse_nwadtowcs ( | |||||||
| 		case QSE_NWAD_LOCAL: | 		case QSE_NWAD_LOCAL: | ||||||
| 			if (flags & QSE_NWADTOMBS_ADDR) | 			if (flags & QSE_NWADTOMBS_ADDR) | ||||||
| 			{ | 			{ | ||||||
|  | 				if (xlen + 1 >= len) goto done; | ||||||
|  | 				buf[xlen++] = QSE_WT('@'); | ||||||
|  |  | ||||||
| 			#if defined(QSE_CHAR_IS_MCHAR) | 			#if defined(QSE_CHAR_IS_MCHAR) | ||||||
| 				qse_size_t wcslen = len, mbslen; | 				if (xlen + 1 >= len) goto done; | ||||||
| 				qse_mbstowcs (nwad->u.local.path, &mbslen, buf, &wcslen); | 				else | ||||||
|  | 				{ | ||||||
|  | 					qse_size_t wcslen = len - xlen, mbslen; | ||||||
|  | 					qse_mbstowcs (nwad->u.local.path, &mbslen, &buf[xlen], &wcslen); | ||||||
| 					/* i don't care about conversion errors */ | 					/* i don't care about conversion errors */ | ||||||
| 				xlen = wcslen; | 					xlen += wcslen; | ||||||
|  | 				} | ||||||
| 			#else | 			#else | ||||||
| 				xlen = qse_wcsxcpy (buf, len, nwad->u.local.path); | 				if (xlen + 1 >= len) goto done; | ||||||
|  | 				xlen += qse_wcsxcpy (&buf[xlen], len - xlen, nwad->u.local.path); | ||||||
| 			#endif | 			#endif | ||||||
| 			} | 			} | ||||||
| 	} | 	} | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user