[Ttssh2-commit] [5478] /F= コマンドラインパラメータで " を使ってスペースを含むファイル名を渡しても認識しない問題を修正

Back to archive index

svnno****@sourc***** svnno****@sourc*****
2014年 2月 18日 (火) 08:02:39 JST


Revision: 5478
          http://sourceforge.jp/projects/ttssh2/scm/svn/commits/5478
Author:   maya
Date:     2014-02-18 08:02:38 +0900 (Tue, 18 Feb 2014)
Log Message:
-----------
/F=コマンドラインパラメータで"を使ってスペースを含むファイル名を渡しても認識しない問題を修正
  解析処理を ttxssh.c よりコピー
  https://sourceforge.jp/ticket/browse.php?group_id=1412&tid=31971

Modified Paths:
--------------
    trunk/TTProxy/TTProxy.h
    trunk/doc/en/html/about/history.html
    trunk/doc/ja/html/about/history.html

-------------- next part --------------
Modified: trunk/TTProxy/TTProxy.h
===================================================================
--- trunk/TTProxy/TTProxy.h	2014-02-03 13:43:40 UTC (rev 5477)
+++ trunk/TTProxy/TTProxy.h	2014-02-17 23:02:38 UTC (rev 5478)
@@ -123,7 +123,122 @@
 		char* p = param;
 		bool inParam = false;
 		bool inQuotes = false;
+		bool inEqual = false;
+		int param_len = strlen(param);
 		char* option = NULL;
+		char *buf;
+		int buflen = 0;
+		int i;
+		char* start = NULL;
+
+#if 1
+		// \x89\xF0\x90͏\x88\x97\x9D\x82\xCD ttxssh.c \x82\xE6\x82\xE8\x83R\x83s\x81[
+		buf = new char[param_len+1];
+		memset(buf, 0, buflen);
+		for (i=0; i<param_len; i++) {
+			if (inQuotes) {
+				// \x8C\xBB\x8D݈ʒu\x82\xAA"\x82̒\x86
+				if (param[i] == '"') {
+					if (param[i+1] == '"') {
+						buf[buflen] = param[i];
+						buflen++;
+						i++;
+					}
+					else {
+						// \x83N\x83H\x81[\x83g\x82\xB5\x82Ă\xA2\x82\xE9\x82Ƃ\xAB\x82͂\xB1\x82\xB1\x82ŏI\x82\xED\x82\xE8
+						// "\x82\xF0buf\x82ɓ\xFC\x82ꂸ\x82ɉ\xF0\x90͂ɓn\x82\xB7
+						switch (parse_option(buf)) {
+							case 1:
+								memset(start, ' ', (param + i) - start + 1);
+								break;
+							case 2:
+								memset(start, ' ', (param + i) - start + 1);
+								buflen = strlen(buf);
+								memcpy(start, buf, buflen);
+								break;
+						}
+						inParam = false;
+						inEqual = false;
+						start = NULL;
+						memset(buf, 0, buflen);
+						buflen = 0;
+						inQuotes = false;
+					}
+				}
+				else {
+					buf[buflen] = param[i];
+					buflen++;
+				}
+			}
+			else {
+				if (!inParam) {
+					// \x82܂\xBE\x83p\x83\x89\x83\x81\x81[\x83^\x82̒\x86\x82ɂ\xA2\x82Ȃ\xA2
+					if (param[i] == '"') {
+						// " \x82Ŏn\x82܂\xE9
+						start = param + i;
+						inParam = true;
+						inQuotes = true;
+					}
+					else if (param[i] != ' ' && param[i] != '\t') {
+						// \x95\x81\x92ʂɎn\x82܂\xE9
+						buf[buflen] = param[i];
+						buflen++;
+						start = param + i;
+						inParam = true;
+					}
+				}
+				else {
+					// \x8C\xBB\x8D݈ʒu\x82\xAA\x83p\x83\x89\x83\x81\x81[\x83^\x82̒\x86
+					if (param[i] == ' ' || param[i] == '\t') {
+						// \x83N\x83H\x81[\x83g\x82\xB5\x82Ă\xA2\x82Ȃ\xA2\x82Ƃ\xAB\x82͂\xB1\x82\xB1\x82ŏI\x82\xED\x82\xE8
+						switch (parse_option(buf)) {
+							case 1:
+								memset(start, ' ', (param + i) - start + 1);
+								break;
+							case 2:
+								memset(start, ' ', (param + i) - start + 1);
+								buflen = strlen(buf);
+								memcpy(start, buf, buflen);
+								break;
+						}
+						inParam = false;
+						inEqual = false;
+						start = NULL;
+						memset(buf, 0, buflen);
+						buflen = 0;
+					}
+					else {
+						buf[buflen] = param[i];
+						buflen++;
+						if (!inEqual && param[i] == '=') {
+							inEqual = true;
+							if (param[i+1] == '"') {
+								inQuotes = true;
+								i++;
+							}
+						}
+					}
+				}
+			}
+		}
+		
+		// buf \x82Ɏc\x82肪\x82\xA0\x82\xEA\x82Ή\xF0\x90͂ɓn\x82\xB7
+		//   +1\x82\xB7\x82\xE9\x82ƍŌ\xE3\x82\xCC'\0'\x82\xE0\x8F\xC1\x82\xB5\x82Ă\xB5\x82܂\xA4\x82̂ŁA\x8F\xE3\x82Ɠ\xAF\x82\xB6\x82ł͂\xA2\x82\xAF\x82Ȃ\xA2
+		if (strlen(buf) > 0) {
+			switch (parse_option(buf)) {
+				case 1:
+					memset(start, ' ', (param + i) - start);
+					break;
+				case 2:
+					memset(start, ' ', (param + i) - start);
+					buflen = strlen(buf);
+					memcpy(start, buf, buflen);
+					break;
+			}
+		}
+
+		delete[] buf;
+#else
 		while (*p != '\0') {
 			if (inQuotes ? *p == '"' : (*p == ' ' || *p == '\t')) {
 				if (option != NULL) {
@@ -156,6 +271,8 @@
 				*option = '\0';
 			}
 		}
+#endif
+
 		getInstance().ORIG_ParseParam(param, ts, DDETopic);
 		if (getInstance().ts->HostName[0] == '\0' && getInstance().realhost != NULL) {
 			strcpy_s(getInstance().ts->HostName, sizeof getInstance().ts->HostName, getInstance().realhost);

Modified: trunk/doc/en/html/about/history.html
===================================================================
--- trunk/doc/en/html/about/history.html	2014-02-03 13:43:40 UTC (rev 5477)
+++ trunk/doc/en/html/about/history.html	2014-02-17 23:02:38 UTC (rev 5478)
@@ -3479,6 +3479,11 @@
 
 <h2><a name="ttproxy">TTProxy</a></h2>
 
+<h3><a name="ttproxy_1.0.0.19">2014.x.x (Ver 1.0.0.19)</a></h3>
+<ul class="history">
+      <!--li>\x83X\x83y\x81[\x83X\x82\xF0\x8A܂ރR\x83}\x83\x93\x83h\x83\x89\x83C\x83\x93\x83p\x83\x89\x83\x81\x81[\x83^\x82̉\xF0\x90͂Ɏ\xB8\x94s\x82\xB7\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li-->
+</ul>
+
 <h3><a name="ttproxy_1.0.0.18">2011.3.5 (Ver 1.0.0.18)</a></h3>
 <ul class="history">
       <li>added support for IPv6.<ul>

Modified: trunk/doc/ja/html/about/history.html
===================================================================
--- trunk/doc/ja/html/about/history.html	2014-02-03 13:43:40 UTC (rev 5477)
+++ trunk/doc/ja/html/about/history.html	2014-02-17 23:02:38 UTC (rev 5478)
@@ -3484,6 +3484,11 @@
 
 <h2><a name="ttproxy">TTProxy</a></h2>
 
+<h3><a name="ttproxy_1.0.0.19">2014.x.x (Ver 1.0.0.19)</a></h3>
+<ul class="history">
+      <li>\x83X\x83y\x81[\x83X\x82\xF0\x8A܂ރR\x83}\x83\x93\x83h\x83\x89\x83C\x83\x93\x83p\x83\x89\x83\x81\x81[\x83^\x82̉\xF0\x90͂Ɏ\xB8\x94s\x82\xB7\x82\xE9\x96\xE2\x91\xE8\x82\xF0\x8FC\x90\xB3\x82\xB5\x82\xBD\x81B</li>
+</ul>
+
 <h3><a name="ttproxy_1.0.0.18">2011.3.5 (Ver 1.0.0.18)</a></h3>
 <ul class="history">
       <li>IPv6 \x82ɑΉ\x9E\x82\xB5\x82\xBD\x81B<ul>



Ttssh2-commit メーリングリストの案内
Back to archive index