• R/O
  • SSH
  • HTTPS

ttssh2: Commit


Commit MetaInfo

Révision9465 (tree)
l'heure2021-10-14 23:51:28
Auteurzmatsuo

Message de Log

awcscat(), awcscats() を追加

- 動的確保したメモリーの文字列に文字列を追加する
- buffer.c から移動

Change Summary

Modification

--- trunk/teraterm/common/asprintf.cpp (revision 9464)
+++ trunk/teraterm/common/asprintf.cpp (revision 9465)
@@ -31,6 +31,8 @@
3131 #include <stdlib.h>
3232 #include <crtdbg.h>
3333 #include <assert.h>
34+#include <string.h>
35+#include <wchar.h>
3436
3537 #include "asprintf.h"
3638
@@ -138,3 +140,63 @@
138140 va_end(ap);
139141 return r;
140142 }
143+
144+/**
145+ * 文字列を連結する
146+ * @param[in] dest mallocされた領域,文字列
147+ * *dest == NULLの場合は新たな領域が確保される
148+ * 不要になったら free() すること
149+ * @param[in] add 連結される文字列
150+ * NULLの場合はなにも行わない
151+ */
152+void awcscat(wchar_t **dest, const wchar_t *add)
153+{
154+ if (*dest == NULL) {
155+ *dest = _wcsdup(add);
156+ return;
157+ }
158+ else if (add == NULL) {
159+ return;
160+ }
161+ else {
162+ size_t dest_len = wcslen(*dest);
163+ size_t add_len = wcslen(add);
164+ size_t new_len = dest_len + add_len + 1;
165+ wchar_t *new_dest = (wchar_t *)realloc(*dest, sizeof(wchar_t) * new_len);
166+ if (new_dest == NULL) {
167+ // メモリ不足, 何も行わない
168+ return;
169+ }
170+ wmemcpy(new_dest + dest_len, add, add_len + 1);
171+ *dest = new_dest;
172+ }
173+}
174+
175+/**
176+ * 文字列を連続して連結する
177+ * @param[in] dest mallocされた領域,文字列
178+ * *dest == NULLの場合は新たな領域が確保される
179+ * 不要になったら free() すること
180+ * @param[in] add 連結される文字列
181+ * NULLの場合はなにも行わない
182+ * NULL まで連続して連結される
183+ * 例
184+ * wchar_t *full_path = NULL;
185+ * awcscats(&full_path, dir, L"\\", filename, NULL);
186+ * CreateFileW(full_path, ...);
187+ * Free(full_path);
188+ */
189+void awcscats(wchar_t **dest, const wchar_t *add, ...)
190+{
191+ va_list ap;
192+ va_start(ap, add);
193+ awcscat(dest, add);
194+ for(;;) {
195+ const wchar_t *ap_add = va_arg(ap, wchar_t *);
196+ if (ap_add == NULL) {
197+ break;
198+ }
199+ awcscat(dest, ap_add);
200+ }
201+ va_end(ap);
202+}
--- trunk/teraterm/common/asprintf.h (revision 9464)
+++ trunk/teraterm/common/asprintf.h (revision 9465)
@@ -52,6 +52,9 @@
5252 int vasprintf(char **strp, const char *fmt, va_list ap);
5353 int vaswprintf(wchar_t **strp, const wchar_t *fmt, va_list ap);
5454
55+void awcscat(wchar_t **dest, const wchar_t *add);
56+void awcscats(wchar_t **dest, const wchar_t *add, ...);
57+
5558 #ifdef __cplusplus
5659 }
5760 #endif
--- trunk/teraterm/teraterm/buffer.c (revision 9464)
+++ trunk/teraterm/teraterm/buffer.c (revision 9465)
@@ -5392,29 +5392,6 @@
53925392 }
53935393
53945394 /**
5395- * 文字列を連結する
5396- * @param[in] dest mallocされた領域
5397- * *dest == NULLの場合は新たな領域が確保される
5398- * 不要になったら free() すること
5399- * @param[in] add 連結される文字列
5400- */
5401-static void awcscat(wchar_t **dest, const wchar_t *add)
5402-{
5403- if (*dest == NULL) {
5404- *dest = _wcsdup(add);
5405- return;
5406- }
5407- else {
5408- size_t dest_len = wcslen(*dest);
5409- size_t add_len = wcslen(add);
5410- size_t new_len = dest_len + add_len + 1;
5411- wchar_t *new_dest = realloc(*dest, sizeof(wchar_t ) * new_len);
5412- wcscat(new_dest, add);
5413- *dest = new_dest;
5414- }
5415-}
5416-
5417-/**
54185395 * 指定位置の文字情報を文字列で返す
54195396 * デバグ用途
54205397 *
Afficher sur ancien navigateur de dépôt.