fixed a few issues in qse_env_t functions on OS2 with Watcom C
This commit is contained in:
		| @ -29,7 +29,12 @@ | |||||||
|  * an environment block.  |  * an environment block.  | ||||||
|  */ |  */ | ||||||
|  |  | ||||||
|  | /*  | ||||||
|  |  * Note: | ||||||
|  |  * The wprintf function provided by Watcom C doesn't seem to be able to  | ||||||
|  |  * print multibyte-characters properly at least on OS2. You may have  | ||||||
|  |  * difficulty if you try to print the environment strings with Watcom C. | ||||||
|  |  */ | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | ||||||
| 	typedef qse_wchar_t qse_env_char_t; | 	typedef qse_wchar_t qse_env_char_t; | ||||||
| #	define QSE_ENV_CHAR_IS_WCHAR | #	define QSE_ENV_CHAR_IS_WCHAR | ||||||
| @ -123,7 +128,6 @@ int qse_env_deletem ( | |||||||
| 	const qse_mchar_t* name | 	const qse_mchar_t* name | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  |  | ||||||
| int qse_env_insertsysw ( | int qse_env_insertsysw ( | ||||||
| 	qse_env_t* env, | 	qse_env_t* env, | ||||||
| 	const qse_wchar_t* name | 	const qse_wchar_t* name | ||||||
| @ -134,7 +138,6 @@ int qse_env_insertsysm ( | |||||||
| 	const qse_mchar_t* name | 	const qse_mchar_t* name | ||||||
| ); | ); | ||||||
|  |  | ||||||
|  |  | ||||||
| #if defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_CHAR_IS_WCHAR) | ||||||
| #	define qse_env_insert(env,name,value) qse_env_insertw(env,name,value) | #	define qse_env_insert(env,name,value) qse_env_insertw(env,name,value) | ||||||
| #	define qse_env_delete(env,name) qse_env_deletew(env,name) | #	define qse_env_delete(env,name) qse_env_deletew(env,name) | ||||||
|  | |||||||
| @ -23,6 +23,8 @@ | |||||||
| #include <qse/cmn/str.h> | #include <qse/cmn/str.h> | ||||||
| #include "mem.h" | #include "mem.h" | ||||||
|  |  | ||||||
|  | #include <qse/cmn/stdio.h> | ||||||
|  |  | ||||||
| #if defined(_WIN32) | #if defined(_WIN32) | ||||||
| #    include <windows.h> | #    include <windows.h> | ||||||
| #endif | #endif | ||||||
| @ -85,7 +87,7 @@ void qse_env_clear (qse_env_t* env) | |||||||
| { | { | ||||||
| 	if (env->str.ptr)  | 	if (env->str.ptr)  | ||||||
| 	{ | 	{ | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| 		env->str.ptr[0] = QSE_WT('\0'); | 		env->str.ptr[0] = QSE_WT('\0'); | ||||||
| #else | #else | ||||||
| 		env->str.ptr[0] = QSE_MT('\0'); | 		env->str.ptr[0] = QSE_MT('\0'); | ||||||
| @ -166,7 +168,7 @@ static int expandstr (qse_env_t* env, qse_size_t inc) | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| static int insertw (qse_env_t* env, const qse_wchar_t* name, const qse_wchar_t* value) | static int insertw (qse_env_t* env, const qse_wchar_t* name, const qse_wchar_t* value) | ||||||
| { | { | ||||||
| 	qse_size_t nl, vl, tl; | 	qse_size_t nl, vl, tl; | ||||||
| @ -329,7 +331,7 @@ static int deletem (qse_env_t* env, const qse_mchar_t* name) | |||||||
| int qse_env_insertw ( | int qse_env_insertw ( | ||||||
| 	qse_env_t* env, const qse_wchar_t* name, const qse_wchar_t* value) | 	qse_env_t* env, const qse_wchar_t* name, const qse_wchar_t* value) | ||||||
| { | { | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| 	/* no conversion -> wchar */ | 	/* no conversion -> wchar */ | ||||||
| 	return insertw (env, name, value); | 	return insertw (env, name, value); | ||||||
| #else | #else | ||||||
| @ -356,7 +358,7 @@ int qse_env_insertw ( | |||||||
| int qse_env_insertm ( | int qse_env_insertm ( | ||||||
| 	qse_env_t* env, const qse_mchar_t* name, const qse_mchar_t* value) | 	qse_env_t* env, const qse_mchar_t* name, const qse_mchar_t* value) | ||||||
| { | { | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| 	/* convert mchar to wchar */ | 	/* convert mchar to wchar */ | ||||||
| 	qse_wchar_t* namedup, * valuedup; | 	qse_wchar_t* namedup, * valuedup; | ||||||
| 	int n; | 	int n; | ||||||
| @ -383,7 +385,7 @@ int qse_env_insertm ( | |||||||
|  |  | ||||||
| int qse_env_deletew (qse_env_t* env, const qse_wchar_t* name) | int qse_env_deletew (qse_env_t* env, const qse_wchar_t* name) | ||||||
| { | { | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| 	return deletew (env, name); | 	return deletew (env, name); | ||||||
| #else | #else | ||||||
| 	/* convert wchar to mchar */ | 	/* convert wchar to mchar */ | ||||||
| @ -402,7 +404,7 @@ int qse_env_deletew (qse_env_t* env, const qse_wchar_t* name) | |||||||
|  |  | ||||||
| int qse_env_deletem (qse_env_t* env, const qse_mchar_t* name) | int qse_env_deletem (qse_env_t* env, const qse_mchar_t* name) | ||||||
| { | { | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| 	/* convert mchar to wchar */ | 	/* convert mchar to wchar */ | ||||||
| 	qse_wchar_t* namedup; | 	qse_wchar_t* namedup; | ||||||
| 	int n; | 	int n; | ||||||
| @ -444,11 +446,61 @@ static qse_char_t* get_env (qse_env_t* env, const qse_char_t* name, int* free) | |||||||
| 	return QSE_NULL; | 	return QSE_NULL; | ||||||
| } | } | ||||||
|  |  | ||||||
|  | #elif defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
|  | static qse_wchar_t* get_env (qse_env_t* env, const qse_wchar_t* name, int* free) | ||||||
|  | { | ||||||
|  | 	/* | ||||||
|  | 	 * This dindn't work with WATCOM C on OS2 because  | ||||||
|  | 	 * _wenviron resolved to NULL. | ||||||
|  |  | ||||||
|  | 	extern qse_wchar_t** _wenviron; | ||||||
|  | 	qse_wchar_t** p = _wenviron; | ||||||
|  |  | ||||||
|  | 	while (*p) | ||||||
|  | 	{ | ||||||
|  | 		qse_wchar_t* eq; | ||||||
|  | 		eq = qse_wcsbeg (*p, name); | ||||||
|  | 		if (eq && *eq == QSE_WT('='))  | ||||||
|  | 		{ | ||||||
|  | 			*free = 0; | ||||||
|  | 			return eq + 1; | ||||||
|  | 		} | ||||||
|  | 		p++;	 | ||||||
|  | 	} | ||||||
|  | 	*/ | ||||||
|  |  | ||||||
|  | 	extern char** environ; | ||||||
|  | 	qse_mchar_t** p = environ; | ||||||
|  |  | ||||||
|  | 	while (*p) | ||||||
|  | 	{ | ||||||
|  | 		qse_wchar_t* dup; | ||||||
|  | 		qse_wchar_t* eq; | ||||||
|  |  | ||||||
|  | 		dup = qse_mbstowcsdup (*p, env->mmgr); | ||||||
|  | 		if (dup == QSE_NULL) return QSE_NULL; | ||||||
|  |  | ||||||
|  | 		eq = qse_wcsbeg (dup, name); | ||||||
|  | 		if (eq && *eq == QSE_WT('='))  | ||||||
|  | 		{ | ||||||
|  | 			*free = 1; | ||||||
|  | 			return eq + 1; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		QSE_MMGR_FREE (env->mmgr, dup); | ||||||
|  |  | ||||||
|  | 		p++;	 | ||||||
|  | 	} | ||||||
|  | 				 | ||||||
|  | 	return 0; | ||||||
|  | } | ||||||
|  |  | ||||||
| #else | #else | ||||||
|  |  | ||||||
| static qse_mchar_t* get_env (qse_env_t* env, const qse_mchar_t* name, int* free) | static qse_mchar_t* get_env (qse_env_t* env, const qse_mchar_t* name, int* free) | ||||||
| { | { | ||||||
| 	extern char** environ; | 	extern char** environ; | ||||||
| 	char** p = environ; | 	qse_mchar_t** p = environ; | ||||||
|  |  | ||||||
| 	while (*p) | 	while (*p) | ||||||
| 	{ | 	{ | ||||||
| @ -468,7 +520,7 @@ static qse_mchar_t* get_env (qse_env_t* env, const qse_mchar_t* name, int* free) | |||||||
|  |  | ||||||
| int qse_env_insertsysw (qse_env_t* env, const qse_wchar_t* name) | int qse_env_insertsysw (qse_env_t* env, const qse_wchar_t* name) | ||||||
| { | { | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| 	qse_wchar_t* v; | 	qse_wchar_t* v; | ||||||
| 	int free; | 	int free; | ||||||
| 	int ret = -1;  | 	int ret = -1;  | ||||||
| @ -498,7 +550,7 @@ int qse_env_insertsysw (qse_env_t* env, const qse_wchar_t* name) | |||||||
|  |  | ||||||
| int qse_env_insertsysm (qse_env_t* env, const qse_mchar_t* name) | int qse_env_insertsysm (qse_env_t* env, const qse_mchar_t* name) | ||||||
| { | { | ||||||
| #if defined(_WIN32) && defined(QSE_CHAR_IS_WCHAR) | #if defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
| 	/* convert mchar to wchar */ | 	/* convert mchar to wchar */ | ||||||
| 	qse_wchar_t* namedup; | 	qse_wchar_t* namedup; | ||||||
| 	int ret = -1; | 	int ret = -1; | ||||||
| @ -563,9 +615,44 @@ done: | |||||||
| 	FreeEnvironmentStrings (envstr); | 	FreeEnvironmentStrings (envstr); | ||||||
| 	return ret; | 	return ret; | ||||||
|  |  | ||||||
|  | #elif defined(QSE_ENV_CHAR_IS_WCHAR) | ||||||
|  | 	/* | ||||||
|  | 	 * This dindn't work with WATCOM C on OS2 because  | ||||||
|  | 	 * _wenviron resolved to NULL. | ||||||
|  | 	 * | ||||||
|  | 	extern qse_wchar_t** _wenviron; | ||||||
|  | 	qse_wchar_t** p = _wenviron; | ||||||
|  |  | ||||||
|  | 	while (*p) | ||||||
|  | 	{ | ||||||
|  | 		if (add_envstrw (env, *p) <= -1) return -1; | ||||||
|  | 		p++;	 | ||||||
|  | 	} | ||||||
|  | 	*/ | ||||||
|  |  | ||||||
|  | 	extern char** environ; | ||||||
|  | 	qse_mchar_t** p = environ; | ||||||
|  |  | ||||||
|  | 	while (*p) | ||||||
|  | 	{ | ||||||
|  | 		qse_wchar_t* dup; | ||||||
|  | 		int n; | ||||||
|  |  | ||||||
|  | 		dup = qse_mbstowcsdup (*p, env->mmgr); | ||||||
|  | 		if (dup == QSE_NULL) return -1; | ||||||
|  | 		n = add_envstrw (env, dup); | ||||||
|  | 		QSE_MMGR_FREE (env->mmgr, dup); | ||||||
|  | 		if (n <= -1) return -1; | ||||||
|  |  | ||||||
|  | 		p++;	 | ||||||
|  | 	} | ||||||
|  | 				 | ||||||
|  | 				 | ||||||
|  | 	return 0; | ||||||
|  |  | ||||||
| #else | #else | ||||||
| 	extern char** environ; | 	extern char** environ; | ||||||
| 	char** p = environ; | 	qse_mchar_t** p = environ; | ||||||
|  |  | ||||||
| 	while (*p) | 	while (*p) | ||||||
| 	{ | 	{ | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| /* | /* | ||||||
|  * $Id: pio.c 542 2011-08-12 14:39:18Z hyunghwan.chung $ |  * $Id: pio.c 543 2011-08-12 16:35:34Z hyunghwan.chung $ | ||||||
|  * |  * | ||||||
|     Copyright 2006-2011 Chung, Hyung-Hwan. |     Copyright 2006-2011 Chung, Hyung-Hwan. | ||||||
|     This file is part of QSE. |     This file is part of QSE. | ||||||
| @ -591,7 +591,7 @@ qse_pio_t* qse_pio_init ( | |||||||
| 		QSE_SIZEOF(load_error),  | 		QSE_SIZEOF(load_error),  | ||||||
| 		EXEC_ASYNCRESULT, | 		EXEC_ASYNCRESULT, | ||||||
| 		cmd_line, | 		cmd_line, | ||||||
| 		NULL, | 		(env? qse_env_getstr(env): QSE_NULL), | ||||||
| 		&child_rc, | 		&child_rc, | ||||||
| 		cmd_file | 		cmd_file | ||||||
| 	); | 	); | ||||||
|  | |||||||
| @ -1,4 +1,5 @@ | |||||||
| #include <qse/cmn/pio.h> | #include <qse/cmn/pio.h> | ||||||
|  | #include <qse/cmn/env.h> | ||||||
| #include <qse/cmn/stdio.h> | #include <qse/cmn/stdio.h> | ||||||
|  |  | ||||||
| #include <string.h> | #include <string.h> | ||||||
| @ -9,6 +10,7 @@ | |||||||
| #elif defined(__OS2__) | #elif defined(__OS2__) | ||||||
| #	define INCL_DOSPROCESS | #	define INCL_DOSPROCESS | ||||||
| #	define INCL_DOSERRORS | #	define INCL_DOSERRORS | ||||||
|  | #	define INCL_DOSDATETIME | ||||||
| #	include <os2.h> | #	include <os2.h> | ||||||
| #else | #else | ||||||
| #	include <unistd.h> | #	include <unistd.h> | ||||||
| @ -21,7 +23,7 @@ | |||||||
| 		if (f() == -1) return -1; \ | 		if (f() == -1) return -1; \ | ||||||
| 	} while (0) | 	} while (0) | ||||||
|  |  | ||||||
| static int pio1 (const qse_char_t* cmd, int oflags, qse_pio_hid_t rhid) | static int pio1 (const qse_char_t* cmd, qse_env_t* env, int oflags, qse_pio_hid_t rhid) | ||||||
| { | { | ||||||
| 	qse_pio_t* pio; | 	qse_pio_t* pio; | ||||||
| 	int x; | 	int x; | ||||||
| @ -30,7 +32,7 @@ static int pio1 (const qse_char_t* cmd, int oflags, qse_pio_hid_t rhid) | |||||||
| 		QSE_NULL, | 		QSE_NULL, | ||||||
| 		0, | 		0, | ||||||
| 		cmd, | 		cmd, | ||||||
| 		QSE_NULL, | 		env, | ||||||
| 		oflags | 		oflags | ||||||
| 	); | 	); | ||||||
| 	if (pio == QSE_NULL) | 	if (pio == QSE_NULL) | ||||||
| @ -81,7 +83,7 @@ static int pio1 (const qse_char_t* cmd, int oflags, qse_pio_hid_t rhid) | |||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  |  | ||||||
| static int pio2 (const qse_char_t* cmd, int oflags, qse_pio_hid_t rhid) | static int pio2 (const qse_char_t* cmd, qse_env_t* env, int oflags, qse_pio_hid_t rhid) | ||||||
| { | { | ||||||
| 	qse_pio_t* pio; | 	qse_pio_t* pio; | ||||||
| 	int x; | 	int x; | ||||||
| @ -90,7 +92,7 @@ static int pio2 (const qse_char_t* cmd, int oflags, qse_pio_hid_t rhid) | |||||||
| 		QSE_NULL, | 		QSE_NULL, | ||||||
| 		0, | 		0, | ||||||
| 		cmd, | 		cmd, | ||||||
| 		QSE_NULL, | 		env, | ||||||
| 		oflags | QSE_PIO_TEXT | 		oflags | QSE_PIO_TEXT | ||||||
| 	); | 	); | ||||||
| 	if (pio == QSE_NULL) | 	if (pio == QSE_NULL) | ||||||
| @ -141,11 +143,12 @@ static int test1 (void) | |||||||
| { | { | ||||||
|  |  | ||||||
| 	return pio1 ( | 	return pio1 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T("dir /a"),  | 		QSE_T("dir /a"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("ls -laF"), | 		QSE_T("ls -laF"), | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | 		QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | ||||||
| 		QSE_PIO_OUT | 		QSE_PIO_OUT | ||||||
| 	); | 	); | ||||||
| @ -154,11 +157,12 @@ static int test1 (void) | |||||||
| static int test2 (void) | static int test2 (void) | ||||||
| { | { | ||||||
| 	return pio1 ( | 	return pio1 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T("dir /a"),  | 		QSE_T("dir /a"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("ls -laF"), | 		QSE_T("ls -laF"), | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | ||||||
| 		QSE_PIO_ERR | 		QSE_PIO_ERR | ||||||
| 	); | 	); | ||||||
| @ -167,11 +171,12 @@ static int test2 (void) | |||||||
| static int test3 (void) | static int test3 (void) | ||||||
| { | { | ||||||
| 	return pio1 ( | 	return pio1 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T(".\\sll.exe"),  | 		QSE_T("tree.com"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("/bin/ls -laF"),  | 		QSE_T("/bin/ls -laF"),  | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN, | 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN, | ||||||
| 		QSE_PIO_ERR | 		QSE_PIO_ERR | ||||||
| 	); | 	); | ||||||
| @ -180,11 +185,12 @@ static int test3 (void) | |||||||
| static int test4 (void) | static int test4 (void) | ||||||
| { | { | ||||||
| 	return pio2 ( | 	return pio2 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T("dir /a"),  | 		QSE_T("dir /a"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("ls -laF"), | 		QSE_T("ls -laF"), | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL,  | 		QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL,  | ||||||
| 		QSE_PIO_OUT | 		QSE_PIO_OUT | ||||||
| 	); | 	); | ||||||
| @ -193,11 +199,12 @@ static int test4 (void) | |||||||
| static int test5 (void) | static int test5 (void) | ||||||
| { | { | ||||||
| 	return pio2 ( | 	return pio2 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T("dir /a"),  | 		QSE_T("dir /a"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("ls -laF"),  | 		QSE_T("ls -laF"),  | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | ||||||
| 		QSE_PIO_ERR | 		QSE_PIO_ERR | ||||||
| 	); | 	); | ||||||
| @ -206,11 +213,12 @@ static int test5 (void) | |||||||
| static int test6 (void) | static int test6 (void) | ||||||
| { | { | ||||||
| 	return pio2 ( | 	return pio2 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T(".\\sll.exe"),  | 		QSE_T("tree.com"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("/bin/ls -laF"), | 		QSE_T("/bin/ls -laF"), | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN, | 		QSE_PIO_READERR|QSE_PIO_OUTTOERR|QSE_PIO_WRITEIN, | ||||||
| 		QSE_PIO_ERR | 		QSE_PIO_ERR | ||||||
| 	); | 	); | ||||||
| @ -219,11 +227,12 @@ static int test6 (void) | |||||||
| static int test7 (void) | static int test7 (void) | ||||||
| { | { | ||||||
| 	return pio1 ( | 	return pio1 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T(".\\sll.exe"),  | 		QSE_T("tree.com"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("/bin/ls -laF"),  | 		QSE_T("/bin/ls -laF"),  | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READOUT|QSE_PIO_ERRTOOUT|QSE_PIO_WRITEIN, | 		QSE_PIO_READOUT|QSE_PIO_ERRTOOUT|QSE_PIO_WRITEIN, | ||||||
| 		QSE_PIO_OUT | 		QSE_PIO_OUT | ||||||
| 	); | 	); | ||||||
| @ -232,11 +241,12 @@ static int test7 (void) | |||||||
| static int test8 (void) | static int test8 (void) | ||||||
| { | { | ||||||
| 	return pio1 ( | 	return pio1 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T(".\\sll.exe"),  | 		QSE_T("tree.com"),  | ||||||
| #else | #else | ||||||
| 		QSE_T("/bin/ls -laF"),  | 		QSE_T("/bin/ls -laF"),  | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_READOUT|QSE_PIO_WRITEIN| | 		QSE_PIO_READOUT|QSE_PIO_WRITEIN| | ||||||
| 		QSE_PIO_OUTTONUL|QSE_PIO_ERRTONUL|QSE_PIO_INTONUL, | 		QSE_PIO_OUTTONUL|QSE_PIO_ERRTONUL|QSE_PIO_INTONUL, | ||||||
| 		QSE_PIO_OUT | 		QSE_PIO_OUT | ||||||
| @ -246,11 +256,12 @@ static int test8 (void) | |||||||
| static int test9 (void) | static int test9 (void) | ||||||
| { | { | ||||||
| 	return pio1 ( | 	return pio1 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		(const qse_char_t*)".\\sll.exe",  | 		(const qse_char_t*)"tree.com",  | ||||||
| #else | #else | ||||||
| 		(const qse_char_t*)"/bin/ls -laF",  | 		(const qse_char_t*)"/bin/ls -laF",  | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_MBSCMD|QSE_PIO_READOUT|QSE_PIO_WRITEIN, | 		QSE_PIO_MBSCMD|QSE_PIO_READOUT|QSE_PIO_WRITEIN, | ||||||
| 		QSE_PIO_OUT | 		QSE_PIO_OUT | ||||||
| 	); | 	); | ||||||
| @ -259,17 +270,44 @@ static int test9 (void) | |||||||
| static int test10 (void) | static int test10 (void) | ||||||
| { | { | ||||||
| 	return pio1 ( | 	return pio1 ( | ||||||
| #ifdef _WIN32 | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		(const qse_char_t*)"dir /a", | 		(const qse_char_t*)"dir /a", | ||||||
| #else | #else | ||||||
| 		(const qse_char_t*)"/bin/ls -laF",  | 		(const qse_char_t*)"ls -laF",  | ||||||
| #endif | #endif | ||||||
|  | 		QSE_NULL, | ||||||
| 		QSE_PIO_MBSCMD|QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | 		QSE_PIO_MBSCMD|QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | ||||||
| 		QSE_PIO_OUT | 		QSE_PIO_OUT | ||||||
| 	); | 	); | ||||||
| } | } | ||||||
|  |  | ||||||
| static int test11 (void) | static int test11 (void) | ||||||
|  | { | ||||||
|  | 	qse_env_t* env; | ||||||
|  | 	int n; | ||||||
|  | 	 | ||||||
|  | 	env = qse_env_open (QSE_NULL, 0, 0); | ||||||
|  | 	if (env == QSE_NULL) return -1; | ||||||
|  |  | ||||||
|  | 	qse_env_insertsys (env, QSE_T("PATH")); | ||||||
|  | 	qse_env_insert (env, QSE_T("HELLO"), QSE_T("WORLD")); | ||||||
|  |  | ||||||
|  | 	n = pio1 ( | ||||||
|  | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
|  | 		QSE_T("set"), | ||||||
|  | #else | ||||||
|  | 		QSE_T("printenv"), | ||||||
|  | #endif | ||||||
|  | 		env, | ||||||
|  | 		QSE_PIO_READOUT|QSE_PIO_WRITEIN|QSE_PIO_SHELL, | ||||||
|  | 		QSE_PIO_OUT | ||||||
|  | 	); | ||||||
|  |  | ||||||
|  | 	qse_env_close (env); | ||||||
|  | 	return n; | ||||||
|  | } | ||||||
|  |  | ||||||
|  | static int test12 (void) | ||||||
| { | { | ||||||
| 	qse_pio_t* pio; | 	qse_pio_t* pio; | ||||||
| 	int x; | 	int x; | ||||||
| @ -277,8 +315,8 @@ static int test11 (void) | |||||||
| 	pio = qse_pio_open ( | 	pio = qse_pio_open ( | ||||||
| 		QSE_NULL, | 		QSE_NULL, | ||||||
| 		0, | 		0, | ||||||
| #if defined(_WIN32) || defined(__OS2__) | #if defined(_WIN32) || defined(__OS2__) || defined(__DOS__) | ||||||
| 		QSE_T(".\\sll.exe"), | 		QSE_T("tree.com"), | ||||||
| #else | #else | ||||||
| 		QSE_T("/bin/ls -laF"), | 		QSE_T("/bin/ls -laF"), | ||||||
| #endif | #endif | ||||||
| @ -303,14 +341,29 @@ static int test11 (void) | |||||||
| #elif defined(__OS2__) | #elif defined(__OS2__) | ||||||
| 	{ | 	{ | ||||||
| 		int n = 5; | 		int n = 5; | ||||||
|  | 		RESULTCODES result; | ||||||
|  | 		PID pid; | ||||||
|  |  | ||||||
| 		#error NO IMPLEMENTED YET. |  | ||||||
| 		qse_printf (QSE_T("sleeping for %d seconds\n"), n); | 		qse_printf (QSE_T("sleeping for %d seconds\n"), n); | ||||||
| 		DosSleep (n * 1000); | 		DosSleep (n * 1000); | ||||||
| 		qse_printf (QSE_T("WaitForSingleObject....%d\n"), |  | ||||||
| 			(int)WaitForSingleObject (pio->child, 0)); | 		/* it doesn't seem to proceed if the pipe is not read out. | ||||||
| 		DosWaitChild (DCWA_PROCESS, DCWW_WAIT,..); | 		 * maybe the OS2 pipe buffer is too smally?? */ | ||||||
|  | 		while (1) | ||||||
|  | 		{ | ||||||
|  | 			qse_mchar_t buf[100]; | ||||||
|  | 			qse_ssize_t x = qse_pio_read (pio, buf, QSE_SIZEOF(buf), QSE_PIO_OUT); | ||||||
|  | 			if (x <= 0) break; | ||||||
|  | 		} | ||||||
|  |  | ||||||
|  | 		qse_printf (QSE_T("DosWaitChild....%d\n"), | ||||||
|  | 			(int)DosWaitChild (DCWA_PROCESS, DCWW_WAIT, &result, &pid, pio->child)); | ||||||
| 	} | 	} | ||||||
|  |  | ||||||
|  | #elif defined(__DOS__) | ||||||
|  |  | ||||||
|  | 	#error NOT SUPPORTED | ||||||
|  |  | ||||||
| #else | #else | ||||||
| 	{ | 	{ | ||||||
| 		int status; | 		int status; | ||||||
| @ -352,6 +405,7 @@ int main () | |||||||
| 	R (test9); | 	R (test9); | ||||||
| 	R (test10); | 	R (test10); | ||||||
| 	R (test11); | 	R (test11); | ||||||
|  | 	R (test12); | ||||||
|  |  | ||||||
| 	return 0; | 	return 0; | ||||||
| } | } | ||||||
|  | |||||||
| @ -124,8 +124,8 @@ release/os2/cmd/sed/qsesed.tgt | |||||||
| VComponent | VComponent | ||||||
| 29 | 29 | ||||||
| WRect | WRect | ||||||
| 2490 | 2470 | ||||||
| 120 | 93 | ||||||
| 5700 | 5700 | ||||||
| 4240 | 4240 | ||||||
| 1 | 1 | ||||||
| @ -135,7 +135,7 @@ WFileName | |||||||
| 28 | 28 | ||||||
| debug/os2/lib/cmn/qsecmn.tgt | debug/os2/lib/cmn/qsecmn.tgt | ||||||
| 0 | 0 | ||||||
| 7 | 0 | ||||||
| 31 | 31 | ||||||
| VComponent | VComponent | ||||||
| 32 | 32 | ||||||
| @ -280,4 +280,4 @@ WFileName | |||||||
| debug/win32/cmd/awk/qseawk.tgt | debug/win32/cmd/awk/qseawk.tgt | ||||||
| 0 | 0 | ||||||
| 1 | 1 | ||||||
| 40 | 28 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user