fixed a few issues in qse_env_t functions on OS2 with Watcom C
This commit is contained in:
parent
66fa01b2cf
commit
14572f08aa
@ -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
|
||||||
|
Loading…
x
Reference in New Issue
Block a user