Changeset 35519
- Timestamp:
- 10/07/09 23:18:57 (4 years ago)
- Location:
- lang/objective-cplusplus/i3/trunk
- Files:
-
- 1 added
- 10 modified
-
Makefile.am (modified) (2 diffs)
-
configure.ac (modified) (2 diffs)
-
src/Common.h (modified) (7 diffs)
-
src/Test2.cpp (modified) (2 diffs)
-
src/mil/include/mil/ModuleCommon.h (modified) (3 diffs)
-
src/mil/src/Test13.cpp (added)
-
src/os-windows/Pty.cpp (modified) (6 diffs)
-
windows/mil_test.vcproj (modified) (4 diffs)
-
windows/pty/compile.sh (modified) (1 diff)
-
windows/pty/pty.c (modified) (3 diffs)
-
windows/pty/test.sh (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
lang/objective-cplusplus/i3/trunk/Makefile.am
r35295 r35519 5 5 bin_PROGRAMS = i3 6 6 CLEANFILES = *.gcno po/stamp-po #XXXpo/stamp-po!? 7 DISTCLEANFILES = 7 DISTCLEANFILES = 8 8 BUILT_SOURCES = 9 DISTCHECK_CONFIGURE_FLAGS = --disable-nls9 DISTCHECK_CONFIGURE_FLAGS = 10 10 11 11 if ENABLE_DEBUG … … 69 69 # copy locale file for windows 70 70 windows-locale: 71 perl windows/locale.pl ${PACKAGE_NAME}71 perl windows/locale.pl i3 72 72 73 73 if WITH_OS_WINDOWS -
lang/objective-cplusplus/i3/trunk/configure.ac
r35492 r35519 3 3 4 4 AC_PREREQ(2.60) 5 6 #AC_INIT([i3], [0.1alpha], [dyob@lunaport.net])7 5 AC_INIT([i3], m4_esyscmd([./scripts/ac_init_version.sh | tr -d '\r\n']), [dyob@lunaport.net]) 8 6 … … 30 28 # enable_debug="no" 31 29 enable_debug="yes" 32 )30 ) 33 31 AM_CONDITIONAL(ENABLE_DEBUG, test "$enable_debug" = "yes") 34 32 if test "$enable_debug" = "yes"; then -
lang/objective-cplusplus/i3/trunk/src/Common.h
r35451 r35519 108 108 #endif 109 109 110 #define UTF8_TO_UTF16LE_ALLOCA(data8, data16) \111 wchar_t* data16 = NULL; \112 for (;;) { \113 const char* check = data8; check; \110 #define UTF8_TO_UTF16LE_ALLOCA(data8, data16) \ 111 wchar_t* data16 = NULL; \ 112 for (;;) { \ 113 const char* check = data8; check; \ 114 114 unsigned int num_elements = MultiByteToWideChar(CP_UTF8, 0, data8, -1, NULL, 0); \ 115 if (num_elements == 0) { \116 break; \117 } \118 const size_t data16_bytes = num_elements*sizeof(wchar_t); \119 if (data16_bytes > _ALLOCA_S_THRESHOLD) { \120 data16 = NULL; \121 break; \122 } \123 __try { \124 data16 = (wchar_t*)alloca(data16_bytes); \125 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? \126 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { \127 data16 = NULL; \128 break; \129 } \115 if (num_elements == 0) { \ 116 break; \ 117 } \ 118 const size_t data16_bytes = num_elements*sizeof(wchar_t); \ 119 if (data16_bytes > _ALLOCA_S_THRESHOLD) { \ 120 data16 = NULL; \ 121 break; \ 122 } \ 123 __try { \ 124 data16 = (wchar_t*)alloca(data16_bytes); \ 125 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? \ 126 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { \ 127 data16 = NULL; \ 128 break; \ 129 } \ 130 130 if (0 == MultiByteToWideChar(CP_UTF8, 0, data8, -1, data16, num_elements)) { \ 131 data16 = NULL; \132 break; \133 } \134 break; \135 } 136 137 #define UTF16LE_TO_UTF8_ALLOCA(data16, data8) \138 char* data8 = NULL; \139 for (;;) { \140 const wchar_t* check = data16; check; \131 data16 = NULL; \ 132 break; \ 133 } \ 134 break; \ 135 } 136 137 #define UTF16LE_TO_UTF8_ALLOCA(data16, data8) \ 138 char* data8 = NULL; \ 139 for (;;) { \ 140 const wchar_t* check = data16; check; \ 141 141 unsigned int num_elements = WideCharToMultiByte( CP_UTF8, 0, data16, -1, NULL, 0, 0, 0); \ 142 if (num_elements == 0 || num_elements > _ALLOCA_S_THRESHOLD) { \143 break; \144 } \145 __try { \146 data8 = (char*)alloca(num_elements*sizeof(char)); \147 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? \148 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { \149 data8 = NULL; \150 break; \151 } \142 if (num_elements == 0 || num_elements > _ALLOCA_S_THRESHOLD) { \ 143 break; \ 144 } \ 145 __try { \ 146 data8 = (char*)alloca(num_elements*sizeof(char)); \ 147 } __except (GetExceptionCode() == STATUS_STACK_OVERFLOW ? \ 148 EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) { \ 149 data8 = NULL; \ 150 break; \ 151 } \ 152 152 if (0 == WideCharToMultiByte(CP_UTF8, 0, data16, -1, data8, num_elements, 0, 0)) { \ 153 data8 = NULL; \154 break; \155 } \156 break; \153 data8 = NULL; \ 154 break; \ 155 } \ 156 break; \ 157 157 } 158 158 … … 163 163 #ifndef HAVE_POPT_H 164 164 namespace i3 { 165 template <typename FP_FUNC> 166 inline static exit_status execute_popt( 167 size_t argc, char** argv, FP_FUNC fp) { 165 template <typename FP_FUNCTER> 166 inline static exit_status execute_popt(int argc, char** argv, FP_FUNCTER fp) { 168 167 return 0; 169 168 } … … 172 171 namespace i3 { 173 172 174 template <typename FP_FUNC >175 int usage(poptContext optCon, int exitcode, const char *error, const char *addl, FP_FUNC fp) {173 template <typename FP_FUNCTER> 174 int usage(poptContext optCon, int exitcode, const char *error, const char *addl, FP_FUNCTER fp) { 176 175 poptPrintUsage(optCon, fp(), 0); 177 176 if (error) { … … 181 180 } 182 181 183 template <typename FP_FUNC >184 inline static exit_status execute_popt( size_t argc, char** argv, FP_FUNCfp) {182 template <typename FP_FUNCTER> 183 inline static exit_status execute_popt(int argc, char** argv, FP_FUNCTER fp) { 185 184 int c; /* used for argument parsing */ 186 185 int i = 0; /* used for tracking options */ … … 189 188 int version = 0; 190 189 int j; 191 char buf[BUFSIZ +1];190 char buf[BUFSIZ + 1]; 192 191 poptContext optCon; /* context for parsing command-line options */ 193 192 … … 203 202 { "swflow", 's', 0, 0, 's', "use software (XON/XOF) flow control" } , 204 203 POPT_AUTOHELP 205 { "aswflow", 'x', 0, 0, 'x', "XXXXXXXXXXXXXXXXXXXXXX" } ,204 { "aswflow", 'x', 0, 0, 'x', "XXXXXXXXXXXXXXXXXXXXXX" } , 206 205 { NULL, 0, 0, NULL, 0 } 207 206 }; 208 207 /* 209 $ a.out --help210 211 Usage: a.out [OPTIONS]*212 -b, --bps=BPS signaling rate in bits-per-second213 -c, --crnl expand cr characters to cr/lf sequences214 -h, --hwflow use hardware (RTS/CTS) flow control215 -n, --noflow use no flow control216 -r, --raw don't perform any character conversions217 -s, --swflow use software (XON/XOF) flow control218 219 Help options220 -?, --help Show this help message221 --usage Display brief usage message208 $ a.out --help 209 210 Usage: a.out [OPTIONS]* 211 -b, --bps=BPS signaling rate in bits-per-second 212 -c, --crnl expand cr characters to cr/lf sequences 213 -h, --hwflow use hardware (RTS/CTS) flow control 214 -n, --noflow use no flow control 215 -r, --raw don't perform any character conversions 216 -s, --swflow use software (XON/XOF) flow control 217 218 Help options 219 -?, --help Show this help message 220 --usage Display brief usage message 222 221 */ 223 222 224 223 const char** argv2 = const_cast<const char**>(argv); 225 226 224 optCon = poptGetContext(NULL, argc, argv2, optionsTable, 0); 227 225 poptSetOtherOptionHelp(optCon, "[OPTIONS]* <port>"); … … 290 288 291 289 /* 292 struct arg_lit *list = arg_lit0("lL",NULL, gettext("list files"));293 struct arg_lit *recurse = arg_lit0("R",NULL, gettext("recurse through subdirectories"));294 struct arg_int *repeat = arg_int0("k","scalar",NULL, gettext("define scalar value k (default is 3)"));295 struct arg_str *defines = arg_strn("D","define","MACRO",0,argc+2, gettext("macro definitions"));296 struct arg_file *outfile = arg_file0("o",NULL,"<output>", gettext("output file (default is \"-\")"));297 struct arg_lit *verbose = arg_lit0("v","verbose,debug", gettext("verbose messages"));298 struct arg_lit *help = arg_lit0(NULL,"help", gettext("print this help and exit"));299 struct arg_lit *version = arg_lit0(NULL,"version", gettext("print version information and exit"));300 //struct arg_file *infiles = arg_filen(NULL,NULL,NULL,1,argc+2, "input file(s)");301 struct arg_end *end = arg_end(20);302 //void* argtable[] = {list,recurse,repeat,defines,outfile,verbose,help,version,infiles,end};303 void* argtable[] = {list,recurse,repeat,defines,outfile,verbose,help,version,end};304 int nerrors = 0;305 306 307 // verify the argtable[] entries were allocated sucessfully308 if (arg_nullcheck(argtable) != 0)309 {310 // NULL entries were detected, some allocations must have failed311 fprintf(fp(), PACKAGE_NAME ": insufficient memory\n");312 goto error_exit;313 }314 315 // set any command line default values prior to parsing316 repeat->ival[0]=3;317 outfile->filename[0]="-";318 319 // Parse the command line as defined by argtable[]320 nerrors = arg_parse(argc,argv,argtable);321 322 // special case: '--help' takes precedence over error reporting323 if (help->count > 0)324 {325 arg_print_syntax(fp(),argtable,"\n");326 arg_print_glossary(fp(),argtable," %-25s %s\n");327 goto normal_exit;328 }329 330 // special case: '--version' takes precedence error reporting331 if (version->count > 0)332 {333 fprintf(fp(), PACKAGE_NAME " version " PACKAGE_VERSION "\n");334 goto normal_exit;335 }336 337 // If the parser returned any errors then display them and exit338 if (nerrors > 0)339 {340 // Display the error details contained in the arg_end struct.341 arg_print_errors(fp(), end, PACKAGE_NAME);342 goto error_exit;343 }344 345 // normal case: take the command line options at face value346 // exitcode = mymain(list->count, recurse->count, repeat->ival[0],347 // defines->sval, defines->count,348 // outfile->filename[0], verbose->count,349 // infiles->filename, infiles->count);350 351 352 arg_freetable(argtable, _countof(argtable));353 return 0;354 normal_exit:355 arg_freetable(argtable, _countof(argtable));356 return exit_status::exit_when_special_argument();357 error_exit:358 arg_freetable(argtable, _countof(argtable));290 struct arg_lit *list = arg_lit0("lL",NULL, gettext("list files")); 291 struct arg_lit *recurse = arg_lit0("R",NULL, gettext("recurse through subdirectories")); 292 struct arg_int *repeat = arg_int0("k","scalar",NULL, gettext("define scalar value k (default is 3)")); 293 struct arg_str *defines = arg_strn("D","define","MACRO",0,argc+2, gettext("macro definitions")); 294 struct arg_file *outfile = arg_file0("o",NULL,"<output>", gettext("output file (default is \"-\")")); 295 struct arg_lit *verbose = arg_lit0("v","verbose,debug", gettext("verbose messages")); 296 struct arg_lit *help = arg_lit0(NULL,"help", gettext("print this help and exit")); 297 struct arg_lit *version = arg_lit0(NULL,"version", gettext("print version information and exit")); 298 //struct arg_file *infiles = arg_filen(NULL,NULL,NULL,1,argc+2, "input file(s)"); 299 struct arg_end *end = arg_end(20); 300 //void* argtable[] = {list,recurse,repeat,defines,outfile,verbose,help,version,infiles,end}; 301 void* argtable[] = {list,recurse,repeat,defines,outfile,verbose,help,version,end}; 302 int nerrors = 0; 303 304 305 // verify the argtable[] entries were allocated sucessfully 306 if (arg_nullcheck(argtable) != 0) 307 { 308 // NULL entries were detected, some allocations must have failed 309 fprintf(fp(), PACKAGE_NAME ": insufficient memory\n"); 310 goto error_exit; 311 } 312 313 // set any command line default values prior to parsing 314 repeat->ival[0]=3; 315 outfile->filename[0]="-"; 316 317 // Parse the command line as defined by argtable[] 318 nerrors = arg_parse(argc,argv,argtable); 319 320 // special case: '--help' takes precedence over error reporting 321 if (help->count > 0) 322 { 323 arg_print_syntax(fp(),argtable,"\n"); 324 arg_print_glossary(fp(),argtable," %-25s %s\n"); 325 goto normal_exit; 326 } 327 328 // special case: '--version' takes precedence error reporting 329 if (version->count > 0) 330 { 331 fprintf(fp(), PACKAGE_NAME " version " PACKAGE_VERSION "\n"); 332 goto normal_exit; 333 } 334 335 // If the parser returned any errors then display them and exit 336 if (nerrors > 0) 337 { 338 // Display the error details contained in the arg_end struct. 339 arg_print_errors(fp(), end, PACKAGE_NAME); 340 goto error_exit; 341 } 342 343 // normal case: take the command line options at face value 344 // exitcode = mymain(list->count, recurse->count, repeat->ival[0], 345 // defines->sval, defines->count, 346 // outfile->filename[0], verbose->count, 347 // infiles->filename, infiles->count); 348 349 350 arg_freetable(argtable, _countof(argtable)); 351 return 0; 352 normal_exit: 353 arg_freetable(argtable, _countof(argtable)); 354 return exit_status::exit_when_special_argument(); 355 error_exit: 356 arg_freetable(argtable, _countof(argtable)); 359 357 */ 360 358 return 1; -
lang/objective-cplusplus/i3/trunk/src/Test2.cpp
r35492 r35519 8 8 using namespace mil; 9 9 using namespace i3; 10 11 12 QT_TEST(test_configboostpp) {13 //c.b = reinterpret_cast<decltype(c.b)>(&c);14 //QT_CHECK((Config*)(decltype(c.b))(&c) == &c);15 16 using namespace std;17 }18 19 20 QT_TEST(test_configboostasiodfj) {21 22 }23 10 24 11 QT_TEST(test_basic_tcscat_s) { … … 35 22 36 23 #ifdef MIL_OS_WINDOWS 37 i3::string cmd = i3::string() + _T("md \"") + os.config_dir + _T("\" 2> nul");24 i3::string cmd = i3::string() + _T("md \"") + os.config_dir + _T("\" 2> nul"); 38 25 #else 39 26 i3::string cmd = i3::string() + _T("mkdir -p ") + os.config_dir + _T(" 2> /dev/null"); -
lang/objective-cplusplus/i3/trunk/src/mil/include/mil/ModuleCommon.h
r35492 r35519 132 132 protected: 133 133 struct TMemory { 134 union { 135 mil::thread::id_t owner_id; 136 mil::thread::id_t size_if_msb_on; 137 }; 134 void setMalloced() { 135 owner_id_if_msb_off |= (1 << (sizeof(owner_id_if_msb_off) * 8 - 1)); 136 } 137 bool isMalloced() { 138 return owner_id_if_msb_off & (1 << (sizeof(owner_id_if_msb_off) * 8 - 1)); 139 } 140 private: 141 mil::thread::id_t owner_id_if_msb_off; 138 142 }; 139 143 void* tmalloc(size_t size) { … … 141 145 if ((size + sizeof(TMemory)) <= mil::pool::BLOCK_SIZE) { 142 146 tmemory = (TMemory*)tls.producer.malloc<mil::pool::BLOCK_SIZE>(); 143 tmemory->owner_id = this->thread_id;147 tmemory->owner_id_if_msb_off = this->thread_id; 144 148 } else { 145 149 tmemory = (TMemory*)malloc(size + sizeof(TMemory)); 146 tmemory->size_if_msb_on = size + sizeof(TMemory); 147 tmemory->size_if_msb_on |= 0x80000000; 150 tmemory->setMalloced(); 148 151 } 149 152 return (void*)(((TMemory*)tmemory) + 1); … … 151 154 void tfree(void* memory) { 152 155 TMemory* tmemory = (((TMemory*)memory) - 1); 153 if (tmemory-> size_if_msb_on & 0x80000000) {156 if (tmemory->isMalloced()) { 154 157 free(tmemory); 155 158 return; 156 159 } 157 if (tmemory->owner_id == this->thread_id) {160 if (tmemory->owner_id_if_msb_off == this->thread_id) { 158 161 tls.producer.free((void*)tmemory, 1); 159 162 return; -
lang/objective-cplusplus/i3/trunk/src/os-windows/Pty.cpp
r35492 r35519 42 42 Pty::~Pty() { 43 43 //interrupt(); 44 write("exit\r\n"); 45 write("\004" 46 "\004" 47 "\003" 48 "\003" 49 "\004" 50 "\004" 51 "\003" 52 "\003" 53 "\r\n"); 44 for (int i = 0; i < 3; i++) { 45 write( 46 "\r\n" 47 "\r\n" 48 "\004" 49 "\003" 50 "exit\r\n" 51 "logout\r\n" 52 "\r\n" 53 ); 54 } 55 TerminateProcess(pi.hProcess, 0); 54 56 } 55 57 … … 70 72 71 73 bool Pty::interrupt() { 74 // write("\003", 1); 72 75 BOOL result = GenerateConsoleCtrlEvent(CTRL_C_EVENT, pi.dwProcessId); 73 76 return (result != 0); 74 //return write("\003", 1);75 77 } 76 78 … … 99 101 CreatePipe(&hMyStdError , &hStdError , &sa, 0); 100 102 101 HANDLE cp = GetCurrentProcess(); 102 if (!DuplicateHandle(cp, hMyStdInput , cp, NULL, 0, FALSE, DUPLICATE_SAME_ACCESS) || 103 !DuplicateHandle(cp, hMyStdOutput, cp, NULL, 0, FALSE, DUPLICATE_SAME_ACCESS) || 104 !DuplicateHandle(cp, hMyStdError , cp, NULL, 0, FALSE, DUPLICATE_SAME_ACCESS)) { 105 106 return false; 107 } 103 //HANDLE cp = GetCurrentProcess(); 104 //if (!DuplicateHandle(cp, hMyStdInput , cp, NULL, 0, FALSE, DUPLICATE_SAME_ACCESS) || 105 // !DuplicateHandle(cp, hMyStdOutput, cp, NULL, 0, FALSE, DUPLICATE_SAME_ACCESS) || 106 // !DuplicateHandle(cp, hMyStdError , cp, NULL, 0, FALSE, DUPLICATE_SAME_ACCESS)) { 107 // return false; 108 //} 108 109 109 110 si.cb = sizeof(STARTUPINFO); … … 120 121 return false; 121 122 } 122 //if (_tcscat_s(arguments, _T(" /bin/sh --login -i")) != 0) {123 //if (_tcscat_s(arguments, _T(" /bin/sh -c echo foo")) != 0) {124 // return false;125 //}126 123 if (_tcscat_s(pty, _T(" /bin/sh -l")) != 0) { 127 124 return false; 128 125 } 129 //TCHAR arguments[] = _T("fakecygpty /bin/sh --login -i");130 126 DWORD dwCreationFlags = 0; 131 127 if (os.osversioninfo.dwPlatformId == VER_PLATFORM_WIN32_NT) { … … 134 130 BOOL result = CreateProcess(NULL, pty, NULL, NULL, TRUE, dwCreationFlags, NULL, cd, &si, &pi); 135 131 if (result == 0) { 136 //MessageBox(NULL, _T("createprocess"), _T("cp"), MB_OK);137 132 return false; 138 133 } … … 142 137 143 138 bool Pty::connect() { 144 return connectInterix(); 139 //return connectInterix(); 140 return connectCygwin(); 145 141 } 146 142 -
lang/objective-cplusplus/i3/trunk/windows/mil_test.vcproj
r35451 r35519 997 997 </File> 998 998 <File 999 RelativePath="..\src\mil\include\mil\Debug.h" 1000 > 1001 </File> 1002 <File 999 1003 RelativePath="..\src\mil\include\mil\os-windows\Debug.h" 1000 1004 > 1001 1005 </File> 1002 1006 <File 1003 RelativePath="..\src\mil\include\mil\Debug.h"1004 >1005 </File>1006 <File1007 1007 RelativePath="..\src\mil\include\mil\gui-windows\DummyMessageHandler-inl.h" 1008 1008 > … … 1017 1017 </File> 1018 1018 <File 1019 RelativePath="..\src\mil\include\mil\GuiModule.h" 1020 > 1021 </File> 1022 <File 1019 1023 RelativePath="..\src\mil\include\mil\gui-windows\GuiModule.h" 1020 1024 > 1021 1025 </File> 1022 1026 <File 1023 RelativePath="..\src\mil\include\mil\GuiModule.h"1024 >1025 </File>1026 <File1027 1027 RelativePath="..\src\mil\include\mil\Memory.h" 1028 1028 > … … 1053 1053 </File> 1054 1054 <File 1055 RelativePath="..\src\mil\include\mil\gui-windows\PrecompiledHeaders.h" 1056 > 1057 </File> 1058 <File 1059 RelativePath="..\src\mil\include\mil\os-windows\PrecompiledHeaders.h" 1060 > 1061 </File> 1062 <File 1055 1063 RelativePath="..\src\mil\include\mil\PrecompiledHeaders.h" 1056 1064 > 1057 1065 </File> 1058 1066 <File 1059 RelativePath="..\src\mil\include\mil\gui-windows\PrecompiledHeaders.h"1060 >1061 </File>1062 <File1063 RelativePath="..\src\mil\include\mil\os-windows\PrecompiledHeaders.h"1064 >1065 </File>1066 <File1067 1067 RelativePath="..\src\mil\include\quicktest\quicktest.h" 1068 1068 > … … 1085 1085 </File> 1086 1086 <File 1087 RelativePath="..\src\mil\include\mil\os-windows\Thread.h" 1088 > 1089 </File> 1090 <File 1087 1091 RelativePath="..\src\mil\include\mil\Thread.h" 1088 >1089 </File>1090 <File1091 RelativePath="..\src\mil\include\mil\os-windows\Thread.h"1092 1092 > 1093 1093 </File> -
lang/objective-cplusplus/i3/trunk/windows/pty/compile.sh
r35400 r35519 9 9 10 10 target=${host}.exe 11 rm -f ${target} ${target}. bz212 gcc -O3 -s -DNDEBUG -Wall -W -o ${target} pty.c11 rm -f ${target} ${target}.gz 12 gcc -O3 -s -DNDEBUG -Wall -Wextra -o ${target} pty.c 13 13 14 14 gzip --best --stdout ${target} > ${target}.gz -
lang/objective-cplusplus/i3/trunk/windows/pty/pty.c
r35451 r35519 314 314 int loop = 0; 315 315 for (loop = 0; 1; loop++) { 316 errno = 0; 316 317 char buf[BUFSIZE]; 317 errno = 0;318 318 int ret = read(0, buf, sizeof(buf)); 319 319 if (ret == 0) { … … 329 329 330 330 int ret2 = 0; 331 char log[sizeof(buf) ] = {0};331 char log[sizeof(buf) + 1] = {0}; 332 332 memcpy(log, buf, ret); 333 333 debug2("[#%d]%s", loop, log); … … 367 367 368 368 int ret2 = 0; 369 char log[sizeof(buf) ] = {0};369 char log[sizeof(buf) + 1] = {0}; 370 370 memcpy(log, buf, ret); 371 371 debug("%s", log); -
lang/objective-cplusplus/i3/trunk/windows/pty/test.sh
r35433 r35519 2 2 3 3 rm -f fakecygpty && \ 4 gcc pty.c - o fakecygpty && \4 gcc pty.c -Wall -Wextra -o fakecygpty && \ 5 5 PS1="$ " expect -f test.expect 6 6
![(please configure the [header_logo] section in trac.ini)](/share/chrome/site/your_project_logo.png)