added aio files. some file restructuring in progress

This commit is contained in:
hyung-hwan 2016-04-27 14:57:50 +00:00
parent 632a4d7181
commit 61a6cf281f
68 changed files with 7385 additions and 143 deletions

View File

@ -34,8 +34,8 @@
#include <qse/cmn/mbwc.h>
#include <qse/cmn/xma.h>
#include <qse/cmn/glob.h>
#include <qse/cmn/sio.h>
#include <qse/cmn/fmt.h>
#include <qse/io/sio.h>
#include <qse/sys/intr.h>
#include <string.h>

View File

@ -11,8 +11,8 @@ qsecfg_DATA = httpd.conf httpd-mime.conf
bin_PROGRAMS = qsehttpd qseursd
qsehttpd_SOURCES = httpd.c
qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/sys -L../../lib/cmn
qsehttpd_LDADD = -lqsexli -lqsehttp -lqsesys -lqsecmn
qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/sys -L../../lib/io -L../../lib/cmn
qsehttpd_LDADD = -lqsexli -lqsehttp -lqseio -lqsesys -lqsecmn
if WIN32
if WCHAR
@ -21,7 +21,7 @@ endif
endif
qseursd_SOURCES = ursd.c
qseursd_LDFLAGS = -L../../lib/sys -L../../lib/cmn
qseursd_LDADD = -lqsesys -lqsecmn
qseursd_LDFLAGS = -L../../lib/sys -L../../lib/io -L../../lib/cmn
qseursd_LDADD = -lqseio -lqsesys -lqsecmn
EXTRA_DIST = $(qsecfg_DATA)

View File

@ -391,11 +391,12 @@ AM_CPPFLAGS = \
qsecfgdir = $(sysconfdir)/qse
qsecfg_DATA = httpd.conf httpd-mime.conf
qsehttpd_SOURCES = httpd.c
qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/sys -L../../lib/cmn
qsehttpd_LDADD = -lqsexli -lqsehttp -lqsesys -lqsecmn $(am__append_1)
qsehttpd_LDFLAGS = -L../../lib/xli -L../../lib/http -L../../lib/sys -L../../lib/io -L../../lib/cmn
qsehttpd_LDADD = -lqsexli -lqsehttp -lqseio -lqsesys -lqsecmn \
$(am__append_1)
qseursd_SOURCES = ursd.c
qseursd_LDFLAGS = -L../../lib/sys -L../../lib/cmn
qseursd_LDADD = -lqsesys -lqsecmn
qseursd_LDFLAGS = -L../../lib/sys -L../../lib/io -L../../lib/cmn
qseursd_LDADD = -lqseio -lqsesys -lqsecmn
EXTRA_DIST = $(qsecfg_DATA)
all: all-am

View File

@ -9,10 +9,11 @@
#include <qse/cmn/htb.h>
#include <qse/cmn/fmt.h>
#include <qse/cmn/hton.h>
#include <qse/cmn/pio.h>
#include <qse/cmn/sck.h>
#include <qse/cmn/nwad.h>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
#include <qse/io/pio.h>
#include <qse/sys/mux.h>
#include <signal.h>

View File

@ -29,7 +29,6 @@
#include <qse/cmn/mem.h>
#include <qse/cmn/chr.h>
#include <qse/cmn/opt.h>
#include <qse/cmn/sio.h>
#include <qse/cmn/xma.h>
#include <qse/cmn/path.h>
#include <qse/cmn/fs.h>
@ -37,8 +36,10 @@
#include <qse/cmn/mbwc.h>
#include <qse/cmn/glob.h>
#include <qse/cmn/fmt.h>
#include <qse/io/sio.h>
#include <qse/sys/intr.h>
#include <locale.h>
#include <stdio.h>

View File

@ -29,7 +29,6 @@
#include <qse/cmn/mem.h>
#include <qse/cmn/chr.h>
#include <qse/cmn/opt.h>
#include <qse/cmn/sio.h>
#include <qse/cmn/xma.h>
#include <qse/cmn/path.h>
#include <qse/cmn/fs.h>
@ -37,6 +36,7 @@
#include <qse/cmn/mbwc.h>
#include <qse/cmn/glob.h>
#include <qse/cmn/fmt.h>
#include <qse/io/sio.h>
#include <locale.h>

160
qse/configure vendored
View File

@ -21156,6 +21156,79 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of struct sockaddr_ll" >&5
$as_echo_n "checking size of struct sockaddr_ll... " >&6; }
if ${ac_cv_sizeof_struct_sockaddr_ll+:} false; then :
$as_echo_n "(cached) " >&6
else
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (struct sockaddr_ll))" "ac_cv_sizeof_struct_sockaddr_ll" "
#include <winsock2.h>
#include <ws2tcpip.h>
"; then :
else
if test "$ac_cv_type_struct_sockaddr_ll" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (struct sockaddr_ll)
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_struct_sockaddr_ll=0
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_struct_sockaddr_ll" >&5
$as_echo "$ac_cv_sizeof_struct_sockaddr_ll" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_STRUCT_SOCKADDR_LL $ac_cv_sizeof_struct_sockaddr_ll
_ACEOF
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of struct sockaddr_dl" >&5
$as_echo_n "checking size of struct sockaddr_dl... " >&6; }
if ${ac_cv_sizeof_struct_sockaddr_dl+:} false; then :
$as_echo_n "(cached) " >&6
else
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (struct sockaddr_dl))" "ac_cv_sizeof_struct_sockaddr_dl" "
#include <winsock2.h>
#include <ws2tcpip.h>
"; then :
else
if test "$ac_cv_type_struct_sockaddr_dl" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (struct sockaddr_dl)
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_struct_sockaddr_dl=0
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_struct_sockaddr_dl" >&5
$as_echo "$ac_cv_sizeof_struct_sockaddr_dl" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_STRUCT_SOCKADDR_DL $ac_cv_sizeof_struct_sockaddr_dl
_ACEOF
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
@ -21344,6 +21417,79 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of struct sockaddr_ll" >&5
$as_echo_n "checking size of struct sockaddr_ll... " >&6; }
if ${ac_cv_sizeof_struct_sockaddr_ll+:} false; then :
$as_echo_n "(cached) " >&6
else
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (struct sockaddr_ll))" "ac_cv_sizeof_struct_sockaddr_ll" "
#include <sys/socket.h>
#include <netpacket/packet.h>
"; then :
else
if test "$ac_cv_type_struct_sockaddr_ll" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (struct sockaddr_ll)
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_struct_sockaddr_ll=0
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_struct_sockaddr_ll" >&5
$as_echo "$ac_cv_sizeof_struct_sockaddr_ll" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_STRUCT_SOCKADDR_LL $ac_cv_sizeof_struct_sockaddr_ll
_ACEOF
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
# This bug is HP SR number 8606223364.
{ $as_echo "$as_me:${as_lineno-$LINENO}: checking size of struct sockaddr_dl" >&5
$as_echo_n "checking size of struct sockaddr_dl... " >&6; }
if ${ac_cv_sizeof_struct_sockaddr_dl+:} false; then :
$as_echo_n "(cached) " >&6
else
if ac_fn_c_compute_int "$LINENO" "(long int) (sizeof (struct sockaddr_dl))" "ac_cv_sizeof_struct_sockaddr_dl" "
#include <sys/socket.h>
#include <sys/types.h>
#include <net/if_dl.h>
"; then :
else
if test "$ac_cv_type_struct_sockaddr_dl" = yes; then
{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
as_fn_error 77 "cannot compute sizeof (struct sockaddr_dl)
See \`config.log' for more details" "$LINENO" 5; }
else
ac_cv_sizeof_struct_sockaddr_dl=0
fi
fi
fi
{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sizeof_struct_sockaddr_dl" >&5
$as_echo "$ac_cv_sizeof_struct_sockaddr_dl" >&6; }
cat >>confdefs.h <<_ACEOF
#define SIZEOF_STRUCT_SOCKADDR_DL $ac_cv_sizeof_struct_sockaddr_dl
_ACEOF
# The cast to long int works around a bug in the HP C Compiler
# version HP92453-01 B.11.11.23709.GP, which incorrectly rejects
# declarations like `int a3[[(sizeof (unsigned char)) >= 0]];'.
@ -21971,6 +22117,16 @@ cat >>confdefs.h <<_ACEOF
_ACEOF
cat >>confdefs.h <<_ACEOF
#define QSE_SIZEOF_STRUCT_SOCKADDR_LL ${ac_cv_sizeof_struct_sockaddr_ll}
_ACEOF
cat >>confdefs.h <<_ACEOF
#define QSE_SIZEOF_STRUCT_SOCKADDR_DL ${ac_cv_sizeof_struct_sockaddr_dl}
_ACEOF
cat >>confdefs.h <<_ACEOF
#define QSE_SIZEOF_SOCKLEN_T ${ac_cv_sizeof_socklen_t}
_ACEOF
@ -22902,7 +23058,7 @@ QSE_PROJECT_AUTHOR="${PACKAGE_BUGREPORT}"
QSE_PROJECT_URL="${PACKAGE_URL}"
ac_config_files="$ac_config_files Makefile README include/Makefile include/qse/Makefile include/qse/cmn/Makefile include/qse/sys/Makefile include/qse/awk/Makefile include/qse/sed/Makefile include/qse/xli/Makefile include/qse/http/Makefile lib/Makefile lib/cmn/Makefile lib/sys/Makefile lib/awk/Makefile lib/sed/Makefile lib/xli/Makefile lib/http/Makefile lib/qsecmn.pc lib/qseawk.pc lib/qsesed.pc lib/qsexli.pc lib/qsehttp.pc cmd/Makefile cmd/awk/Makefile cmd/sed/Makefile cmd/xli/Makefile cmd/http/Makefile samples/Makefile samples/cmn/Makefile samples/sys/Makefile samples/awk/Makefile samples/sed/Makefile samples/http/Makefile regress/Makefile regress/awk/Makefile regress/awk/regress.sh regress/sed/Makefile regress/sed/regress.sh doc/Makefile doc/Doxyfile tools/Makefile"
ac_config_files="$ac_config_files Makefile README include/Makefile include/qse/Makefile include/qse/cmn/Makefile include/qse/sys/Makefile include/qse/io/Makefile include/qse/awk/Makefile include/qse/sed/Makefile include/qse/xli/Makefile include/qse/http/Makefile lib/Makefile lib/cmn/Makefile lib/sys/Makefile lib/io/Makefile lib/awk/Makefile lib/sed/Makefile lib/xli/Makefile lib/http/Makefile lib/qsecmn.pc lib/qseawk.pc lib/qsesed.pc lib/qsexli.pc lib/qsehttp.pc cmd/Makefile cmd/awk/Makefile cmd/sed/Makefile cmd/xli/Makefile cmd/http/Makefile samples/Makefile samples/cmn/Makefile samples/sys/Makefile samples/awk/Makefile samples/sed/Makefile samples/http/Makefile regress/Makefile regress/awk/Makefile regress/awk/regress.sh regress/sed/Makefile regress/sed/regress.sh doc/Makefile doc/Doxyfile tools/Makefile"
cat >confcache <<\_ACEOF
# This file is a shell script that caches the results of configure
@ -24080,6 +24236,7 @@ do
"include/qse/Makefile") CONFIG_FILES="$CONFIG_FILES include/qse/Makefile" ;;
"include/qse/cmn/Makefile") CONFIG_FILES="$CONFIG_FILES include/qse/cmn/Makefile" ;;
"include/qse/sys/Makefile") CONFIG_FILES="$CONFIG_FILES include/qse/sys/Makefile" ;;
"include/qse/io/Makefile") CONFIG_FILES="$CONFIG_FILES include/qse/io/Makefile" ;;
"include/qse/awk/Makefile") CONFIG_FILES="$CONFIG_FILES include/qse/awk/Makefile" ;;
"include/qse/sed/Makefile") CONFIG_FILES="$CONFIG_FILES include/qse/sed/Makefile" ;;
"include/qse/xli/Makefile") CONFIG_FILES="$CONFIG_FILES include/qse/xli/Makefile" ;;
@ -24087,6 +24244,7 @@ do
"lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
"lib/cmn/Makefile") CONFIG_FILES="$CONFIG_FILES lib/cmn/Makefile" ;;
"lib/sys/Makefile") CONFIG_FILES="$CONFIG_FILES lib/sys/Makefile" ;;
"lib/io/Makefile") CONFIG_FILES="$CONFIG_FILES lib/io/Makefile" ;;
"lib/awk/Makefile") CONFIG_FILES="$CONFIG_FILES lib/awk/Makefile" ;;
"lib/sed/Makefile") CONFIG_FILES="$CONFIG_FILES lib/sed/Makefile" ;;
"lib/xli/Makefile") CONFIG_FILES="$CONFIG_FILES lib/xli/Makefile" ;;

View File

@ -410,6 +410,13 @@ then
AC_CHECK_SIZEOF(struct sockaddr_un,,[
#include <winsock2.h>
#include <ws2tcpip.h>])
AC_CHECK_SIZEOF(struct sockaddr_ll,,[
#include <winsock2.h>
#include <ws2tcpip.h>])
AC_CHECK_SIZEOF(struct sockaddr_dl,,[
#include <winsock2.h>
#include <ws2tcpip.h>])
AC_CHECK_SIZEOF(socklen_t,, [
#include <winsock2.h>
#include <ws2tcpip.h>])
@ -432,6 +439,13 @@ else
AC_CHECK_SIZEOF(struct sockaddr_un,,[
#include <sys/socket.h>
#include <sys/un.h>])
AC_CHECK_SIZEOF(struct sockaddr_ll,,[
#include <sys/socket.h>
#include <netpacket/packet.h>])
AC_CHECK_SIZEOF(struct sockaddr_dl,,[
#include <sys/socket.h>
#include <sys/types.h>
#include <net/if_dl.h>])
AC_CHECK_SIZEOF(socklen_t,, [
#include <sys/socket.h>
#include <netinet/in.h>])
@ -601,6 +615,8 @@ AC_DEFINE_UNQUOTED(QSE_MBLEN_MAX, ${ax_cv_numvalof_MB_LEN_MAX}, [MB_LEN_MAX])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_STRUCT_SOCKADDR_IN, ${ac_cv_sizeof_struct_sockaddr_in}, [sizeof(struct sockaddr_in)])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_STRUCT_SOCKADDR_IN6, ${ac_cv_sizeof_struct_sockaddr_in6}, [sizeof(struct sockaddr_in6)])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_STRUCT_SOCKADDR_UN, ${ac_cv_sizeof_struct_sockaddr_un}, [sizeof(struct sockaddr_un)])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_STRUCT_SOCKADDR_LL, ${ac_cv_sizeof_struct_sockaddr_ll}, [sizeof(struct sockaddr_ll)])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_STRUCT_SOCKADDR_DL, ${ac_cv_sizeof_struct_sockaddr_dl}, [sizeof(struct sockaddr_dl)])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_SOCKLEN_T, ${ac_cv_sizeof_socklen_t}, [sizeof(socklen_t)])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_PTHREAD_T, ${ac_cv_sizeof_pthread_t}, [sizeof(pthread_t)])
AC_DEFINE_UNQUOTED(QSE_SIZEOF_PTHREAD_MUTEX_T, ${ac_cv_sizeof_pthread_mutex_t}, [sizeof(pthread_mutex_t)])
@ -768,6 +784,7 @@ AC_CONFIG_FILES([
include/qse/Makefile
include/qse/cmn/Makefile
include/qse/sys/Makefile
include/qse/io/Makefile
include/qse/awk/Makefile
include/qse/sed/Makefile
include/qse/xli/Makefile
@ -775,6 +792,7 @@ AC_CONFIG_FILES([
lib/Makefile
lib/cmn/Makefile
lib/sys/Makefile
lib/io/Makefile
lib/awk/Makefile
lib/sed/Makefile
lib/xli/Makefile

View File

@ -1,4 +1,4 @@
SUBDIRS = cmn sys awk sed xli http
SUBDIRS = cmn sys io awk sed xli http
pkgincludedir = $(includedir)/qse

View File

@ -390,7 +390,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = cmn sys awk sed xli http
SUBDIRS = cmn sys io awk sed xli http
pkginclude_HEADERS = conf-msw.h conf-os2.h conf-dos.h conf-vms.h \
conf-mac.h conf-inf.h types.h macros.h pack1.h unpack.h \
$(am__append_1)

View File

@ -8,7 +8,6 @@ pkginclude_HEADERS = \
dir.h \
dll.h \
env.h \
fio.h \
fma.h \
fmt.h \
fs.h \
@ -25,22 +24,17 @@ pkginclude_HEADERS = \
mem.h \
nwad.h \
nwif.h \
nwio.h \
oht.h \
opt.h \
path.h \
pio.h \
pma.h \
rbt.h \
rex.h \
sck.h \
sio.h \
sll.h \
slmb.h \
str.h \
task.h \
time.h \
tio.h \
tmr.h \
tre.h \
uni.h \

View File

@ -123,14 +123,14 @@ am__can_run_installinfo = \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__pkginclude_HEADERS_DIST = alg.h chr.h cp949.h cp950.h dir.h dll.h \
env.h fio.h fma.h fmt.h fs.h gdl.h glob.h htb.h hton.h ipad.h \
lda.h main.h map.h mb8.h mbwc.h mem.h nwad.h nwif.h nwio.h \
oht.h opt.h path.h pio.h pma.h rbt.h rex.h sck.h sio.h sll.h \
slmb.h str.h task.h time.h tio.h tmr.h tre.h uni.h uri.h \
utf8.h xma.h Mmgr.hpp StdMmgr.hpp HeapMmgr.hpp Mmged.hpp \
ScopedPtr.hpp SharedPtr.hpp StrBase.hpp String.hpp Mpool.hpp \
Association.hpp LinkedList.hpp HashList.hpp HashTable.hpp \
RedBlackTree.hpp RedBlackTable.hpp Array.hpp BinaryHeap.hpp
env.h fma.h fmt.h fs.h gdl.h glob.h htb.h hton.h ipad.h lda.h \
main.h map.h mb8.h mbwc.h mem.h nwad.h nwif.h oht.h opt.h \
path.h pma.h rbt.h rex.h sck.h sll.h slmb.h str.h time.h tmr.h \
tre.h uni.h uri.h utf8.h xma.h Mmgr.hpp StdMmgr.hpp \
HeapMmgr.hpp Mmged.hpp ScopedPtr.hpp SharedPtr.hpp StrBase.hpp \
String.hpp Mpool.hpp Association.hpp LinkedList.hpp \
HashList.hpp HashTable.hpp RedBlackTree.hpp RedBlackTable.hpp \
Array.hpp BinaryHeap.hpp
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@ -357,11 +357,10 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkginclude_HEADERS = alg.h chr.h cp949.h cp950.h dir.h dll.h env.h \
fio.h fma.h fmt.h fs.h gdl.h glob.h htb.h hton.h ipad.h lda.h \
main.h map.h mb8.h mbwc.h mem.h nwad.h nwif.h nwio.h oht.h \
opt.h path.h pio.h pma.h rbt.h rex.h sck.h sio.h sll.h slmb.h \
str.h task.h time.h tio.h tmr.h tre.h uni.h uri.h utf8.h xma.h \
$(am__append_1)
fma.h fmt.h fs.h gdl.h glob.h htb.h hton.h ipad.h lda.h main.h \
map.h mb8.h mbwc.h mem.h nwad.h nwif.h oht.h opt.h path.h \
pma.h rbt.h rex.h sck.h sll.h slmb.h str.h time.h tmr.h tre.h \
uni.h uri.h utf8.h xma.h $(am__append_1)
all: all-am
.SUFFIXES:

View File

@ -30,6 +30,30 @@
#include <qse/types.h>
#include <qse/macros.h>
#define QSE_CONST_SWAP16(x) \
((qse_uint16_t)((((qse_uint16_t)(x) & (qse_uint16_t)0x00ffU) << 8) | \
(((qse_uint16_t)(x) & (qse_uint16_t)0xff00U) >> 8) ))
#define QSE_CONST_SWAP32(x) \
((qse_uint32_t)((((qse_uint32_t)(x) & (qse_uint32_t)0x000000ffUL) << 24) | \
(((qse_uint32_t)(x) & (qse_uint32_t)0x0000ff00UL) << 8) | \
(((qse_uint32_t)(x) & (qse_uint32_t)0x00ff0000UL) >> 8) | \
(((qse_uint32_t)(x) & (qse_uint32_t)0xff000000UL) >> 24) ))
#if defined(QSE_ENDIAN_LITTLE)
# define QSE_CONST_NTOH16(x) QSE_CONST_SWAP16(x)
# define QSE_CONST_HTON16(x) QSE_CONST_SWAP16(x)
# define QSE_CONST_NTOH32(x) QSE_CONST_SWAP32(x)
# define QSE_CONST_HTON32(x) QSE_CONST_SWAP32(x)
#elif defined(QSE_ENDIAN_BIG)
# define QSE_CONST_NTOH16(x) (x)
# define QSE_CONST_HTON16(x) (x)
# define QSE_CONST_NTOH32(x) (x)
# define QSE_CONST_HTON32(x) (x)
#else
# error UNKNOWN ENDIAN
#endif
#if defined(__cplusplus)
extern "C" {
#endif

View File

@ -121,11 +121,17 @@ struct qse_btime_t
#define qse_inittime(x,s,ns) (((x)->sec = (s)), ((x)->nsec = (ns)))
#define qse_cleartime(x) qse_inittime(x,0,0)
/*#define qse_cleartime(x) ((x)->sec = (x)->nsec = 0)*/
#define qse_cmptime(x,y) \
(((x)->sec == (y)->sec)? ((x)->nsec - (y)->nsec): \
((x)->sec - (y)->sec))
/* if time has been normalized properly, nsec must be equal to or
* greater than 0. */
#define qse_isnegtime(x) ((x)->sec < 0)
#define qse_ispostime(x) ((x)->sec > 0 || ((x)->sec == 0 && (x)->nsec > 0))
#define qse_iszerotime(x) ((x)->sec == 0 && (x)->nsec == 0)
#if defined(__cplusplus)
extern "C" {
#endif

View File

@ -946,12 +946,18 @@
/* sizeof(socklen_t) */
#undef QSE_SIZEOF_SOCKLEN_T
/* sizeof(struct sockaddr_dl) */
#undef QSE_SIZEOF_STRUCT_SOCKADDR_DL
/* sizeof(struct sockaddr_in) */
#undef QSE_SIZEOF_STRUCT_SOCKADDR_IN
/* sizeof(struct sockaddr_in6) */
#undef QSE_SIZEOF_STRUCT_SOCKADDR_IN6
/* sizeof(struct sockaddr_ll) */
#undef QSE_SIZEOF_STRUCT_SOCKADDR_LL
/* sizeof(struct sockaddr_un) */
#undef QSE_SIZEOF_STRUCT_SOCKADDR_UN
@ -1039,12 +1045,18 @@
/* The size of `socklen_t', as computed by sizeof. */
#undef SIZEOF_SOCKLEN_T
/* The size of `struct sockaddr_dl', as computed by sizeof. */
#undef SIZEOF_STRUCT_SOCKADDR_DL
/* The size of `struct sockaddr_in', as computed by sizeof. */
#undef SIZEOF_STRUCT_SOCKADDR_IN
/* The size of `struct sockaddr_in6', as computed by sizeof. */
#undef SIZEOF_STRUCT_SOCKADDR_IN6
/* The size of `struct sockaddr_ll', as computed by sizeof. */
#undef SIZEOF_STRUCT_SOCKADDR_LL
/* The size of `struct sockaddr_un', as computed by sizeof. */
#undef SIZEOF_STRUCT_SOCKADDR_UN

View File

@ -0,0 +1,11 @@
pkgincludedir = $(includedir)/qse/io
pkginclude_HEADERS = \
aio.h \
aio-pro.h \
aio-sck.h
fio.h \
nwio.h \
pio.h \
sio.h \
tio.h

View File

@ -0,0 +1,617 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = include/qse/io
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(pkginclude_HEADERS)
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/argz.m4 \
$(top_srcdir)/m4/ax_check_sign.m4 \
$(top_srcdir)/m4/ax_cxx_namespace.m4 \
$(top_srcdir)/m4/ax_numval.m4 $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltdl.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/lx_find_mpi.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/qse/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
SOURCES =
DIST_SOURCES =
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(pkgincludedir)"
HEADERS = $(pkginclude_HEADERS)
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
pkgincludedir = $(includedir)/qse/io
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ARGZ_H = @ARGZ_H@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_MODE = @BUILD_MODE@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHAR_MODE = @CHAR_MODE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_CXX = @HAVE_CXX@
INCLTDL = @INCLTDL@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBADD_DL = @LIBADD_DL@
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
LIBADD_DLOPEN = @LIBADD_DLOPEN@
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
LIBLTDL = @LIBLTDL@
LIBM = @LIBM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTDLDEPS = @LTDLDEPS@
LTDLINCL = @LTDLINCL@
LTDLOPEN = @LTDLOPEN@
LTLIBOBJS = @LTLIBOBJS@
LT_CONFIG_H = @LT_CONFIG_H@
LT_DLLOADERS = @LT_DLLOADERS@
LT_DLPREOPEN = @LT_DLPREOPEN@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPICC = @MPICC@
MPI_CFLAGS = @MPI_CFLAGS@
MPI_CLDFLAGS = @MPI_CLDFLAGS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
PACKAGE_VERSION_PATCH = @PACKAGE_VERSION_PATCH@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
QSE_PROJECT_AUTHOR = @QSE_PROJECT_AUTHOR@
QSE_PROJECT_URL = @QSE_PROJECT_URL@
QSE_SIZEOF_CHAR = @QSE_SIZEOF_CHAR@
QSE_SIZEOF_DOUBLE = @QSE_SIZEOF_DOUBLE@
QSE_SIZEOF_FLOAT = @QSE_SIZEOF_FLOAT@
QSE_SIZEOF_INT = @QSE_SIZEOF_INT@
QSE_SIZEOF_LONG = @QSE_SIZEOF_LONG@
QSE_SIZEOF_LONG_DOUBLE = @QSE_SIZEOF_LONG_DOUBLE@
QSE_SIZEOF_LONG_LONG = @QSE_SIZEOF_LONG_LONG@
QSE_SIZEOF_OFF64_T = @QSE_SIZEOF_OFF64_T@
QSE_SIZEOF_OFF_T = @QSE_SIZEOF_OFF_T@
QSE_SIZEOF_SHORT = @QSE_SIZEOF_SHORT@
QSE_SIZEOF_VOID_P = @QSE_SIZEOF_VOID_P@
QSE_SIZEOF_WCHAR_T = @QSE_SIZEOF_WCHAR_T@
QUADMATH_LIBS = @QUADMATH_LIBS@
RANLIB = @RANLIB@
RM = @RM@
RMDIR = @RMDIR@
SED = @SED@
SENDFILE_LIBS = @SENDFILE_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SOCKET_LIBS = @SOCKET_LIBS@
SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
TRUE = @TRUE@
UCI_LIBS = @UCI_LIBS@
UNICOWS_LIBS = @UNICOWS_LIBS@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
ltdl_LIBOBJS = @ltdl_LIBOBJS@
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sys_symbol_underscore = @sys_symbol_underscore@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkginclude_HEADERS = \
aio.h \
aio-pro.h \
aio-sck.h
all: all-am
.SUFFIXES:
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign include/qse/io/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign include/qse/io/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
install-pkgincludeHEADERS: $(pkginclude_HEADERS)
@$(NORMAL_INSTALL)
@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
if test -n "$$list"; then \
echo " $(MKDIR_P) '$(DESTDIR)$(pkgincludedir)'"; \
$(MKDIR_P) "$(DESTDIR)$(pkgincludedir)" || exit 1; \
fi; \
for p in $$list; do \
if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
echo "$$d$$p"; \
done | $(am__base_list) | \
while read files; do \
echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(pkgincludedir)'"; \
$(INSTALL_HEADER) $$files "$(DESTDIR)$(pkgincludedir)" || exit $$?; \
done
uninstall-pkgincludeHEADERS:
@$(NORMAL_UNINSTALL)
@list='$(pkginclude_HEADERS)'; test -n "$(pkgincludedir)" || list=; \
files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
dir='$(DESTDIR)$(pkgincludedir)'; $(am__uninstall_files_from_dir)
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(HEADERS)
installdirs:
for dir in "$(DESTDIR)$(pkgincludedir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libtool mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am: install-pkgincludeHEADERS
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am:
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-pkgincludeHEADERS
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libtool cscopelist-am ctags ctags-am distclean \
distclean-generic distclean-libtool distclean-tags distdir dvi \
dvi-am html html-am info info-am install install-am \
install-data install-data-am install-dvi install-dvi-am \
install-exec install-exec-am install-html install-html-am \
install-info install-info-am install-man install-pdf \
install-pdf-am install-pkgincludeHEADERS install-ps \
install-ps-am install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \
ps ps-am tags tags-am uninstall uninstall-am \
uninstall-pkgincludeHEADERS
fio.h \
nwio.h \
pio.h \
sio.h \
tio.h
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

View File

@ -0,0 +1,164 @@
/*
* $Id$
*
Copyright (c) 2006-2016 Chung, Hyung-Hwan. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAfRRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_IO_AIO_PRO_H_
#define _QSE_IO_AIO_PRO_H_
#include <qse/io/aio.h>
enum qse_aio_dev_pro_sid_t
{
QSE_AIO_DEV_PRO_MASTER = -1,
QSE_AIO_DEV_PRO_IN = 0,
QSE_AIO_DEV_PRO_OUT = 1,
QSE_AIO_DEV_PRO_ERR = 2
};
typedef enum qse_aio_dev_pro_sid_t qse_aio_dev_pro_sid_t;
typedef struct qse_aio_dev_pro_t qse_aio_dev_pro_t;
typedef struct qse_aio_dev_pro_slave_t qse_aio_dev_pro_slave_t;
typedef int (*qse_aio_dev_pro_on_read_t) (qse_aio_dev_pro_t* dev, const void* data, qse_aio_iolen_t len, qse_aio_dev_pro_sid_t sid);
typedef int (*qse_aio_dev_pro_on_write_t) (qse_aio_dev_pro_t* dev, qse_aio_iolen_t wrlen, void* wrctx);
typedef void (*qse_aio_dev_pro_on_close_t) (qse_aio_dev_pro_t* dev, qse_aio_dev_pro_sid_t sid);
struct qse_aio_dev_pro_t
{
QSE_AIO_DEV_HEADERS;
int flags;
qse_intptr_t child_pid; /* defined to qse_intptr_t to hide pid_t */
qse_aio_dev_pro_slave_t* slave[3];
int slave_count;
qse_aio_dev_pro_on_read_t on_read;
qse_aio_dev_pro_on_write_t on_write;
qse_aio_dev_pro_on_close_t on_close;
qse_mchar_t* mcmd;
};
struct qse_aio_dev_pro_slave_t
{
QSE_AIO_DEV_HEADERS;
qse_aio_dev_pro_sid_t id;
qse_aio_syshnd_t pfd;
qse_aio_dev_pro_t* master; /* parent device */
};
enum qse_aio_dev_pro_make_flag_t
{
QSE_AIO_DEV_PRO_WRITEIN = (1 << 0),
QSE_AIO_DEV_PRO_READOUT = (1 << 1),
QSE_AIO_DEV_PRO_READERR = (1 << 2),
QSE_AIO_DEV_PRO_ERRTOOUT = (1 << 3),
QSE_AIO_DEV_PRO_OUTTOERR = (1 << 4),
QSE_AIO_DEV_PRO_INTONUL = (1 << 5),
QSE_AIO_DEV_PRO_OUTTONUL = (1 << 6),
QSE_AIO_DEV_PRO_ERRTONUL = (1 << 7),
STUO_DEV_PRO_DROPIN = (1 << 8),
STUO_DEV_PRO_DROPOUT = (1 << 9),
STUO_DEV_PRO_DROPERR = (1 << 10),
QSE_AIO_DEV_PRO_SHELL = (1 << 13),
/* perform no waitpid() on a child process upon device destruction.
* you should set this flag if your application has automatic child
* process reaping enabled. for instance, SIGCHLD is set to SIG_IGN
* on POSIX.1-2001 compliant systems */
QSE_AIO_DEV_PRO_FORGET_CHILD = (1 << 14),
QSE_AIO_DEV_PRO_FORGET_DIEHARD_CHILD = (1 << 15)
};
typedef enum qse_aio_dev_pro_make_flag_t qse_aio_dev_pro_make_flag_t;
typedef struct qse_aio_dev_pro_make_t qse_aio_dev_pro_make_t;
struct qse_aio_dev_pro_make_t
{
int flags; /**< bitwise-ORed of qse_aio_dev_pro_make_flag_t enumerators */
const void* cmd;
qse_aio_dev_pro_on_write_t on_write; /* mandatory */
qse_aio_dev_pro_on_read_t on_read; /* mandatory */
qse_aio_dev_pro_on_close_t on_close; /* optional */
};
enum qse_aio_dev_pro_ioctl_cmd_t
{
QSE_AIO_DEV_PRO_CLOSE,
QSE_AIO_DEV_PRO_KILL_CHILD
};
typedef enum qse_aio_dev_pro_ioctl_cmd_t qse_aio_dev_pro_ioctl_cmd_t;
#ifdef __cplusplus
extern "C" {
#endif
QSE_EXPORT qse_aio_dev_pro_t* qse_aio_dev_pro_make (
qse_aio_t* aio,
qse_size_t xtnsize,
const qse_aio_dev_pro_make_t* data
);
QSE_EXPORT void qse_aio_dev_pro_kill (
qse_aio_dev_pro_t* pro
);
QSE_EXPORT int qse_aio_dev_pro_write (
qse_aio_dev_pro_t* pro,
const void* data,
qse_aio_iolen_t len,
void* wrctx
);
QSE_EXPORT int qse_aio_dev_pro_timedwrite (
qse_aio_dev_pro_t* pro,
const void* data,
qse_aio_iolen_t len,
const qse_ntime_t* tmout,
void* wrctx
);
QSE_EXPORT int qse_aio_dev_pro_close (
qse_aio_dev_pro_t* pro,
qse_aio_dev_pro_sid_t sid
);
QSE_EXPORT int qse_aio_dev_pro_killchild (
qse_aio_dev_pro_t* pro
);
#ifdef __cplusplus
}
#endif
#endif

View File

@ -0,0 +1,598 @@
/*
* $Id$
*
Copyright (c) 2006-2016 Chung, Hyung-Hwan. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAfRRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_IO_AIO_SCK_H_
#define _QSE_IO_AIO_SCK_H_
#include <qse/io/aio.h>
/* ========================================================================= */
/* TOOD: move these to a separte file */
#define QSE_AIO_ETHHDR_PROTO_IP4 0x0800
#define QSE_AIO_ETHHDR_PROTO_ARP 0x0806
#define QSE_AIO_ETHHDR_PROTO_8021Q 0x8100 /* 802.1Q VLAN */
#define QSE_AIO_ETHHDR_PROTO_IP6 0x86DD
#define QSE_AIO_ARPHDR_OPCODE_REQUEST 1
#define QSE_AIO_ARPHDR_OPCODE_REPLY 2
#define QSE_AIO_ARPHDR_HTYPE_ETH 0x0001
#define QSE_AIO_ARPHDR_PTYPE_IP4 0x0800
#define QSE_AIO_ETHADDR_LEN 6
#define QSE_AIO_IP4ADDR_LEN 4
#define QSE_AIO_IP6ADDR_LEN 16
#if defined(__GNUC__)
# define QSE_AIO_PACKED __attribute__((__packed__))
#else
# define QSE_AIO_PACKED
# QSE_AIO_PACK_PUSH pack(push)
# QSE_AIO_PACK_PUSH pack(push)
# QSE_AIO_PACK(x) pack(x)
#endif
#if defined(__GNUC__)
/* nothing */
#else
#pragma pack(push)
#pragma pack(1)
#endif
struct QSE_AIO_PACKED qse_aio_ethaddr_t
{
qse_uint8_t v[QSE_AIO_ETHADDR_LEN];
};
typedef struct qse_aio_ethaddr_t qse_aio_ethaddr_t;
struct QSE_AIO_PACKED qse_aio_ip4addr_t
{
qse_uint8_t v[QSE_AIO_IP4ADDR_LEN];
};
typedef struct qse_aio_ip4addr_t qse_aio_ip4addr_t;
struct QSE_AIO_PACKED qse_aio_ip6addr_t
{
qse_uint8_t v[QSE_AIO_IP6ADDR_LEN];
};
typedef struct qse_aio_ip6addr_t qse_aio_ip6addr_t;
struct QSE_AIO_PACKED qse_aio_ethhdr_t
{
qse_uint8_t dest[QSE_AIO_ETHADDR_LEN];
qse_uint8_t source[QSE_AIO_ETHADDR_LEN];
qse_uint16_t proto;
};
typedef struct qse_aio_ethhdr_t qse_aio_ethhdr_t;
struct QSE_AIO_PACKED qse_aio_arphdr_t
{
qse_uint16_t htype; /* hardware type (ethernet: 0x0001) */
qse_uint16_t ptype; /* protocol type (ipv4: 0x0800) */
qse_uint8_t hlen; /* hardware address length (ethernet: 6) */
qse_uint8_t plen; /* protocol address length (ipv4 :4) */
qse_uint16_t opcode; /* operation code */
};
typedef struct qse_aio_arphdr_t qse_aio_arphdr_t;
/* arp payload for ipv4 over ethernet */
struct QSE_AIO_PACKED qse_aio_etharp_t
{
qse_uint8_t sha[QSE_AIO_ETHADDR_LEN]; /* source hardware address */
qse_uint8_t spa[QSE_AIO_IP4ADDR_LEN]; /* source protocol address */
qse_uint8_t tha[QSE_AIO_ETHADDR_LEN]; /* target hardware address */
qse_uint8_t tpa[QSE_AIO_IP4ADDR_LEN]; /* target protocol address */
};
typedef struct qse_aio_etharp_t qse_aio_etharp_t;
struct QSE_AIO_PACKED qse_aio_etharp_pkt_t
{
qse_aio_ethhdr_t ethhdr;
qse_aio_arphdr_t arphdr;
qse_aio_etharp_t arppld;
};
typedef struct qse_aio_etharp_pkt_t qse_aio_etharp_pkt_t;
struct qse_aio_iphdr_t
{
#if defined(QSE_ENDIAN_LITTLE)
qse_uint8_t ihl:4;
qse_uint8_t version:4;
#elif defined(QSE_ENDIAN_BIG)
qse_uint8_t version:4;
qse_uint8_t ihl:4;
#else
# UNSUPPORTED ENDIAN
#endif
qse_int8_t tos;
qse_int16_t tot_len;
qse_int16_t id;
qse_int16_t frag_off;
qse_int8_t ttl;
qse_int8_t protocol;
qse_int16_t check;
qse_int32_t saddr;
qse_int32_t daddr;
/*The options start here. */
};
typedef struct qse_aio_iphdr_t qse_aio_iphdr_t;
struct QSE_AIO_PACKED qse_aio_icmphdr_t
{
qse_uint8_t type; /* message type */
qse_uint8_t code; /* subcode */
qse_uint16_t checksum;
union
{
struct
{
qse_uint16_t id;
qse_uint16_t seq;
} echo;
qse_uint32_t gateway;
struct
{
qse_uint16_t frag_unused;
qse_uint16_t mtu;
} frag; /* path mut discovery */
} u;
};
typedef struct qse_aio_icmphdr_t qse_aio_icmphdr_t;
#if defined(__GNUC__)
/* nothing */
#else
#pragma pack(pop)
#endif
/* ICMP types */
#define QSE_AIO_ICMP_ECHO_REPLY 0
#define QSE_AIO_ICMP_UNREACH 3 /* destination unreachable */
#define QSE_AIO_ICMP_SOURCE_QUENCE 4
#define QSE_AIO_ICMP_REDIRECT 5
#define QSE_AIO_ICMP_ECHO_REQUEST 8
#define QSE_AIO_ICMP_TIME_EXCEEDED 11
#define QSE_AIO_ICMP_PARAM_PROBLEM 12
#define QSE_AIO_ICMP_TIMESTAMP_REQUEST 13
#define QSE_AIO_ICMP_TIMESTAMP_REPLY 14
#define QSE_AIO_ICMP_INFO_REQUEST 15
#define QSE_AIO_ICMP_INFO_REPLY 16
#define QSE_AIO_ICMP_ADDR_MASK_REQUEST 17
#define QSE_AIO_ICMP_ADDR_MASK_REPLY 18
/* Subcode for QSE_AIO_ICMP_UNREACH */
#define QSE_AIO_ICMP_UNREACH_NET 0
#define QSE_AIO_ICMP_UNREACH_HOST 1
#define QSE_AIO_ICMP_UNREACH_PROTOCOL 2
#define QSE_AIO_ICMP_UNREACH_PORT 3
#define QSE_AIO_ICMP_UNREACH_FRAG_NEEDED 4
/* Subcode for QSE_AIO_ICMP_REDIRECT */
#define QSE_AIO_ICMP_REDIRECT_NET 0
#define QSE_AIO_ICMP_REDIRECT_HOST 1
#define QSE_AIO_ICMP_REDIRECT_NETTOS 2
#define QSE_AIO_ICMP_REDIRECT_HOSTTOS 3
/* Subcode for QSE_AIO_ICMP_TIME_EXCEEDED */
#define QSE_AIO_ICMP_TIME_EXCEEDED_TTL 0
#define QSE_AIO_ICMP_TIME_EXCEEDED_FRAGTIME 1
/* ========================================================================= */
typedef int qse_aio_sckfam_t;
struct qse_aio_sckaddr_t
{
qse_aio_sckfam_t family;
qse_uint8_t data[128]; /* TODO: use the actual sockaddr size */
};
typedef struct qse_aio_sckaddr_t qse_aio_sckaddr_t;
#if (QSE_SIZEOF_SOCKLEN_T == QSE_SIZEOF_INT)
#if defined(QSE_AIO_SOCKLEN_T_IS_SIGNED)
typedef int qse_aio_scklen_t;
#else
typedef unsigned int qse_aio_scklen_t;
#endif
#elif (QSE_SIZEOF_SOCKLEN_T == QSE_SIZEOF_LONG)
#if defined(QSE_AIO_SOCKLEN_T_IS_SIGNED)
typedef long qse_aio_scklen_t;
#else
typedef unsigned long qse_aio_scklen_t;
#endif
#else
typedef int qse_aio_scklen_t;
#endif
#if defined(_WIN32)
# define QSE_AIO_IOCP_KEY 1
/*
typedef HANDLE qse_aio_syshnd_t;
typedef SOCKET qse_aio_sckhnd_t;
# define QSE_AIO_SCKHND_INVALID (INVALID_SOCKET)
*/
typedef qse_uintptr_t qse_aio_sckhnd_t;
# define QSE_AIO_SCKHND_INVALID (~(qse_aio_sck_hnd_t)0)
#else
typedef int qse_aio_sckhnd_t;
# define QSE_AIO_SCKHND_INVALID (-1)
#endif
/* ========================================================================= */
enum qse_aio_dev_sck_ioctl_cmd_t
{
QSE_AIO_DEV_SCK_BIND,
QSE_AIO_DEV_SCK_CONNECT,
QSE_AIO_DEV_SCK_LISTEN
};
typedef enum qse_aio_dev_sck_ioctl_cmd_t qse_aio_dev_sck_ioctl_cmd_t;
#define QSE_AIO_DEV_SCK_SET_PROGRESS(dev,bit) do { \
(dev)->state &= ~QSE_AIO_DEV_SCK_ALL_PROGRESS_BITS; \
(dev)->state |= (bit); \
} while(0)
#define QSE_AIO_DEV_SCK_GET_PROGRESS(dev) ((dev)->state & QSE_AIO_DEV_SCK_ALL_PROGRESS_BITS)
enum qse_aio_dev_sck_state_t
{
/* the following items(progress bits) are mutually exclusive */
QSE_AIO_DEV_SCK_CONNECTING = (1 << 0),
QSE_AIO_DEV_SCK_CONNECTING_SSL = (1 << 1),
QSE_AIO_DEV_SCK_CONNECTED = (1 << 2),
QSE_AIO_DEV_SCK_LISTENING = (1 << 3),
QSE_AIO_DEV_SCK_ACCEPTING_SSL = (1 << 4),
QSE_AIO_DEV_SCK_ACCEPTED = (1 << 5),
/* the following items can be bitwise-ORed with an exclusive item above */
QSE_AIO_DEV_SCK_INTERCEPTED = (1 << 15),
/* convenience bit masks */
QSE_AIO_DEV_SCK_ALL_PROGRESS_BITS = (QSE_AIO_DEV_SCK_CONNECTING |
QSE_AIO_DEV_SCK_CONNECTING_SSL |
QSE_AIO_DEV_SCK_CONNECTED |
QSE_AIO_DEV_SCK_LISTENING |
QSE_AIO_DEV_SCK_ACCEPTING_SSL |
QSE_AIO_DEV_SCK_ACCEPTED)
};
typedef enum qse_aio_dev_sck_state_t qse_aio_dev_sck_state_t;
typedef struct qse_aio_dev_sck_t qse_aio_dev_sck_t;
typedef int (*qse_aio_dev_sck_on_read_t) (
qse_aio_dev_sck_t* dev,
const void* data,
qse_aio_iolen_t dlen,
const qse_aio_sckaddr_t* srcaddr
);
typedef int (*qse_aio_dev_sck_on_write_t) (
qse_aio_dev_sck_t* dev,
qse_aio_iolen_t wrlen,
void* wrctx,
const qse_aio_sckaddr_t* dstaddr
);
typedef void (*qse_aio_dev_sck_on_disconnect_t) (
qse_aio_dev_sck_t* dev
);
typedef int (*qse_aio_dev_sck_on_connect_t) (
qse_aio_dev_sck_t* dev
);
enum qse_aio_dev_sck_type_t
{
QSE_AIO_DEV_SCK_TCP4,
QSE_AIO_DEV_SCK_TCP6,
QSE_AIO_DEV_SCK_UPD4,
QSE_AIO_DEV_SCK_UDP6,
/* ARP at the ethernet layer */
QSE_AIO_DEV_SCK_ARP,
QSE_AIO_DEV_SCK_ARP_DGRAM,
/* ICMP at the IPv4 layer */
QSE_AIO_DEV_SCK_ICMP4,
/* ICMP at the IPv6 layer */
QSE_AIO_DEV_SCK_ICMP6
#if 0
QSE_AIO_DEV_SCK_RAW, /* raw L2-level packet */
#endif
};
typedef enum qse_aio_dev_sck_type_t qse_aio_dev_sck_type_t;
typedef struct qse_aio_dev_sck_make_t qse_aio_dev_sck_make_t;
struct qse_aio_dev_sck_make_t
{
qse_aio_dev_sck_type_t type;
qse_aio_dev_sck_on_write_t on_write;
qse_aio_dev_sck_on_read_t on_read;
qse_aio_dev_sck_on_disconnect_t on_disconnect;
};
enum qse_aio_dev_sck_bind_option_t
{
QSE_AIO_DEV_SCK_BIND_BROADCAST = (1 << 0),
QSE_AIO_DEV_SCK_BIND_REUSEADDR = (1 << 1),
QSE_AIO_DEV_SCK_BIND_REUSEPORT = (1 << 2),
QSE_AIO_DEV_SCK_BIND_TRANSPARENT = (1 << 3),
/* TODO: more options --- SO_RCVBUF, SO_SNDBUF, SO_RCVTIMEO, SO_SNDTIMEO, SO_KEEPALIVE */
/* BINDTODEVICE??? */
QSE_AIO_DEV_SCK_BIND_SSL = (1 << 15)
};
typedef enum qse_aio_dev_sck_bind_option_t qse_aio_dev_sck_bind_option_t;
typedef struct qse_aio_dev_sck_bind_t qse_aio_dev_sck_bind_t;
struct qse_aio_dev_sck_bind_t
{
int options;
qse_aio_sckaddr_t localaddr;
/* TODO: add device name for BIND_TO_DEVICE */
const qse_mchar_t* ssl_certfile;
const qse_mchar_t* ssl_keyfile;
qse_ntime_t accept_tmout;
};
enum qse_aio_def_sck_connect_option_t
{
QSE_AIO_DEV_SCK_CONNECT_SSL = (1 << 15)
};
typedef enum qse_aio_dev_sck_connect_option_t qse_aio_dev_sck_connect_option_t;
typedef struct qse_aio_dev_sck_connect_t qse_aio_dev_sck_connect_t;
struct qse_aio_dev_sck_connect_t
{
int options;
qse_aio_sckaddr_t remoteaddr;
qse_ntime_t connect_tmout;
qse_aio_dev_sck_on_connect_t on_connect;
};
typedef struct qse_aio_dev_sck_listen_t qse_aio_dev_sck_listen_t;
struct qse_aio_dev_sck_listen_t
{
int backlogs;
qse_aio_dev_sck_on_connect_t on_connect; /* optional, but new connections are dropped immediately without this */
};
typedef struct qse_aio_dev_sck_accept_t qse_aio_dev_sck_accept_t;
struct qse_aio_dev_sck_accept_t
{
qse_aio_syshnd_t sck;
/* TODO: add timeout */
qse_aio_sckaddr_t remoteaddr;
};
struct qse_aio_dev_sck_t
{
QSE_AIO_DEV_HEADERS;
qse_aio_dev_sck_type_t type;
qse_aio_sckhnd_t sck;
int state;
/* remote peer address for a stateful stream socket. valid if one of the
* followings is set in state:
* QSE_AIO_DEV_TCP_ACCEPTING_SSL
* QSE_AIO_DEV_TCP_ACCEPTED
* QSE_AIO_DEV_TCP_CONNECTED
* QSE_AIO_DEV_TCP_CONNECTING
* QSE_AIO_DEV_TCP_CONNECTING_SSL
*
* also used as a placeholder to store source address for
* a stateless socket */
qse_aio_sckaddr_t remoteaddr;
/* local socket address */
qse_aio_sckaddr_t localaddr;
/* original destination address */
qse_aio_sckaddr_t orgdstaddr;
qse_aio_dev_sck_on_write_t on_write;
qse_aio_dev_sck_on_read_t on_read;
/* return 0 on succes, -1 on failure.
* called on a new tcp device for an accepted client or
* on a tcp device conntected to a remote server */
qse_aio_dev_sck_on_connect_t on_connect;
qse_aio_dev_sck_on_disconnect_t on_disconnect;
/* timer job index for handling
* - connect() timeout for a connecting socket.
* - SSL_accept() timeout for a socket accepting SSL */
qse_aio_tmridx_t tmrjob_index;
/* connect timeout, ssl-connect timeout, ssl-accept timeout.
* it denotes timeout duration under some circumstances
* or an absolute expiry time under some other circumstances. */
qse_ntime_t tmout;
void* ssl_ctx;
void* ssl;
};
#ifdef __cplusplus
extern "C" {
#endif
QSE_EXPORT qse_aio_sckhnd_t qse_aio_openasyncsck (
qse_aio_t* aio,
int domain,
int type,
int proto
);
QSE_EXPORT void qse_aio_closeasyncsck (
qse_aio_t* aio,
qse_aio_sckhnd_t sck
);
QSE_EXPORT int qse_aio_makesckasync (
qse_aio_t* aio,
qse_aio_sckhnd_t sck
);
QSE_EXPORT int qse_aio_getsckaddrinfo (
qse_aio_t* aio,
const qse_aio_sckaddr_t* addr,
qse_aio_scklen_t* len,
qse_aio_sckfam_t* family
);
/*
* The qse_aio_getsckaddrport() function returns the port number of a socket
* address in the host byte order. If the address doesn't support the port
* number, it returns 0.
*/
QSE_EXPORT qse_uint16_t qse_aio_getsckaddrport (
const qse_aio_sckaddr_t* addr
);
/*
* The qse_aio_getsckaddrifindex() function returns an interface number.
* If the address doesn't support the interface number, it returns 0. */
QSE_EXPORT int qse_aio_getsckaddrifindex (
const qse_aio_sckaddr_t* addr
);
QSE_EXPORT void qse_aio_sckaddr_initforip4 (
qse_aio_sckaddr_t* sckaddr,
qse_uint16_t port,
qse_aio_ip4addr_t* ip4addr
);
QSE_EXPORT void qse_aio_sckaddr_initforip6 (
qse_aio_sckaddr_t* sckaddr,
qse_uint16_t port,
qse_aio_ip6addr_t* ip6addr
);
QSE_EXPORT void qse_aio_sckaddr_initforeth (
qse_aio_sckaddr_t* sckaddr,
int ifindex,
qse_aio_ethaddr_t* ethaddr
);
/* ========================================================================= */
QSE_EXPORT qse_aio_dev_sck_t* qse_aio_dev_sck_make (
qse_aio_t* aio,
qse_size_t xtnsize,
const qse_aio_dev_sck_make_t* info
);
QSE_EXPORT int qse_aio_dev_sck_bind (
qse_aio_dev_sck_t* dev,
qse_aio_dev_sck_bind_t* info
);
QSE_EXPORT int qse_aio_dev_sck_connect (
qse_aio_dev_sck_t* dev,
qse_aio_dev_sck_connect_t* info
);
QSE_EXPORT int qse_aio_dev_sck_listen (
qse_aio_dev_sck_t* dev,
qse_aio_dev_sck_listen_t* info
);
QSE_EXPORT int qse_aio_dev_sck_write (
qse_aio_dev_sck_t* dev,
const void* data,
qse_aio_iolen_t len,
void* wrctx,
const qse_aio_sckaddr_t* dstaddr
);
QSE_EXPORT int qse_aio_dev_sck_timedwrite (
qse_aio_dev_sck_t* dev,
const void* data,
qse_aio_iolen_t len,
const qse_ntime_t* tmout,
void* wrctx,
const qse_aio_sckaddr_t* dstaddr
);
#if defined(QSE_AIO_HAVE_INLINE)
static QSE_INLINE void qse_aio_dev_sck_halt (qse_aio_dev_sck_t* sck)
{
qse_aio_dev_halt ((qse_aio_dev_t*)sck);
}
static QSE_INLINE int qse_aio_dev_sck_read (qse_aio_dev_sck_t* sck, int enabled)
{
return qse_aio_dev_read ((qse_aio_dev_t*)sck, enabled);
}
#else
#define qse_aio_dev_sck_halt(sck) qse_aio_dev_halt((qse_aio_dev_t*)sck)
#define qse_aio_dev_sck_read(sck,enabled) qse_aio_dev_read((qse_aio_dev_t*)sck, enabled)
#endif
QSE_EXPORT qse_uint16_t qse_aio_checksumip (
const void* hdr,
qse_size_t len
);
#ifdef __cplusplus
}
#endif
#endif

438
qse/include/qse/io/aio.h Normal file
View File

@ -0,0 +1,438 @@
/*
* $Id$
*
Copyright (c) 2006-2016 Chung, Hyung-Hwan. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAfRRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_IO_AIO_H_
#define _QSE_IO_AIO_H_
#include <qse/types.h>
#include <qse/macros.h>
#include <qse/cmn/time.h>
#if defined(_WIN32)
typedef qse_uintptr_t qse_aio_syshnd_t;
#define QSE_AIO_SYSHND_INVALID (~(qse_uintptr_t)0)
#else
typedef int qse_aio_syshnd_t;
#define QSE_AIO_SYSHND_INVALID (-1)
#endif
typedef struct qse_aio_devaddr_t qse_aio_devaddr_t;
struct qse_aio_devaddr_t
{
int len;
void* ptr;
};
/* ========================================================================= */
typedef struct qse_aio_t qse_aio_t;
typedef struct qse_aio_dev_t qse_aio_dev_t;
typedef struct qse_aio_dev_mth_t qse_aio_dev_mth_t;
typedef struct qse_aio_dev_evcb_t qse_aio_dev_evcb_t;
typedef struct qse_aio_wq_t qse_aio_wq_t;
typedef qse_intptr_t qse_aio_iolen_t; /* NOTE: this is a signed type */
enum qse_aio_errnum_t
{
QSE_AIO_ENOERR,
QSE_AIO_ENOIMPL,
QSE_AIO_ESYSERR,
QSE_AIO_EINTERN,
QSE_AIO_ENOMEM,
QSE_AIO_EINVAL,
QSE_AIO_EEXIST,
QSE_AIO_ENOENT,
QSE_AIO_ENOSUP, /* not supported */
QSE_AIO_EMFILE, /* too many open files */
QSE_AIO_ENFILE,
QSE_AIO_EAGAIN,
QSE_AIO_ECONRF, /* connection refused */
QSE_AIO_ECONRS, /* connection reset */
QSE_AIO_ENOCAPA, /* no capability */
QSE_AIO_ETMOUT, /* timed out */
QSE_AIO_EPERM, /* operation not permitted */
QSE_AIO_EDEVMAKE,
QSE_AIO_EDEVERR,
QSE_AIO_EDEVHUP
};
typedef enum qse_aio_errnum_t qse_aio_errnum_t;
enum qse_aio_stopreq_t
{
QSE_AIO_STOPREQ_NONE = 0,
QSE_AIO_STOPREQ_TERMINATION,
QSE_AIO_STOPREQ_WATCHER_ERROR
};
typedef enum qse_aio_stopreq_t qse_aio_stopreq_t;
/* ========================================================================= */
#define QSE_AIO_TMRIDX_INVALID ((qse_aio_tmridx_t)-1)
typedef qse_size_t qse_aio_tmridx_t;
typedef struct qse_aio_tmrjob_t qse_aio_tmrjob_t;
typedef void (*qse_aio_tmrjob_handler_t) (
qse_aio_t* aio,
const qse_ntime_t* now,
qse_aio_tmrjob_t* tmrjob
);
struct qse_aio_tmrjob_t
{
void* ctx;
qse_ntime_t when;
qse_aio_tmrjob_handler_t handler;
qse_aio_tmridx_t* idxptr; /* pointer to the index holder */
};
/* ========================================================================= */
struct qse_aio_dev_mth_t
{
/* ------------------------------------------------------------------ */
/* mandatory. called in qse_aio_makedev() */
int (*make) (qse_aio_dev_t* dev, void* ctx);
/* ------------------------------------------------------------------ */
/* mandatory. called in qse_aio_killdev(). also called in qse_aio_makedev() upon
* failure after make() success.
*
* when 'force' is 0, the return value of -1 causes the device to be a
* zombie. the kill method is called periodically on a zombie device
* until the method returns 0.
*
* when 'force' is 1, the called should not return -1. If it does, the
* method is called once more only with the 'force' value of 2.
*
* when 'force' is 2, the device is destroyed regardless of the return value.
*/
int (*kill) (qse_aio_dev_t* dev, int force);
/* ------------------------------------------------------------------ */
qse_aio_syshnd_t (*getsyshnd) (qse_aio_dev_t* dev); /* mandatory. called in qse_aio_makedev() after successful make() */
/* ------------------------------------------------------------------ */
/* return -1 on failure, 0 if no data is availble, 1 otherwise.
* when returning 1, *len must be sent to the length of data read.
* if *len is set to 0, it's treated as EOF. */
int (*read) (qse_aio_dev_t* dev, void* data, qse_aio_iolen_t* len, qse_aio_devaddr_t* srcaddr);
/* ------------------------------------------------------------------ */
int (*write) (qse_aio_dev_t* dev, const void* data, qse_aio_iolen_t* len, const qse_aio_devaddr_t* dstaddr);
/* ------------------------------------------------------------------ */
int (*ioctl) (qse_aio_dev_t* dev, int cmd, void* arg);
};
struct qse_aio_dev_evcb_t
{
/* return -1 on failure. 0 or 1 on success.
* when 0 is returned, it doesn't attempt to perform actual I/O.
* when 1 is returned, it attempts to perform actual I/O. */
int (*ready) (qse_aio_dev_t* dev, int events);
/* return -1 on failure, 0 or 1 on success.
* when 0 is returned, the main loop stops the attempt to read more data.
* when 1 is returned, the main loop attempts to read more data without*/
int (*on_read) (qse_aio_dev_t* dev, const void* data, qse_aio_iolen_t len, const qse_aio_devaddr_t* srcaddr);
/* return -1 on failure, 0 on success.
* wrlen is the length of data written. it is the length of the originally
* posted writing request for a stream device. For a non stream device, it
* may be shorter than the originally posted length. */
int (*on_write) (qse_aio_dev_t* dev, qse_aio_iolen_t wrlen, void* wrctx, const qse_aio_devaddr_t* dstaddr);
};
struct qse_aio_wq_t
{
qse_aio_wq_t* next;
qse_aio_wq_t* prev;
qse_aio_iolen_t olen; /* original data length */
qse_uint8_t* ptr; /* pointer to data */
qse_aio_iolen_t len; /* remaining data length */
void* ctx;
qse_aio_dev_t* dev; /* back-pointer to the device */
qse_aio_tmridx_t tmridx;
qse_aio_devaddr_t dstaddr;
};
#define QSE_AIO_WQ_INIT(wq) ((wq)->next = (wq)->prev = (wq))
#define QSE_AIO_WQ_TAIL(wq) ((wq)->prev)
#define QSE_AIO_WQ_HEAD(wq) ((wq)->next)
#define QSE_AIO_WQ_ISEMPTY(wq) (QSE_AIO_WQ_HEAD(wq) == (wq))
#define QSE_AIO_WQ_ISNODE(wq,x) ((wq) != (x))
#define QSE_AIO_WQ_ISHEAD(wq,x) (QSE_AIO_WQ_HEAD(wq) == (x))
#define QSE_AIO_WQ_ISTAIL(wq,x) (QSE_AIO_WQ_TAIL(wq) == (x))
#define QSE_AIO_WQ_NEXT(x) ((x)->next)
#define QSE_AIO_WQ_PREV(x) ((x)->prev)
#define QSE_AIO_WQ_LINK(p,x,n) do { \
qse_aio_wq_t* pp = (p), * nn = (n); \
(x)->prev = (p); \
(x)->next = (n); \
nn->prev = (x); \
pp->next = (x); \
} while (0)
#define QSE_AIO_WQ_UNLINK(x) do { \
qse_aio_wq_t* pp = (x)->prev, * nn = (x)->next; \
nn->prev = pp; pp->next = nn; \
} while (0)
#define QSE_AIO_WQ_REPL(o,n) do { \
qse_aio_wq_t* oo = (o), * nn = (n); \
nn->next = oo->next; \
nn->next->prev = nn; \
nn->prev = oo->prev; \
nn->prev->next = nn; \
} while (0)
/* insert an item at the back of the queue */
/*#define QSE_AIO_WQ_ENQ(wq,x) QSE_AIO_WQ_LINK(QSE_AIO_WQ_TAIL(wq), x, QSE_AIO_WQ_TAIL(wq)->next)*/
#define QSE_AIO_WQ_ENQ(wq,x) QSE_AIO_WQ_LINK(QSE_AIO_WQ_TAIL(wq), x, wq)
/* remove an item in the front from the queue */
#define QSE_AIO_WQ_DEQ(wq) QSE_AIO_WQ_UNLINK(QSE_AIO_WQ_HEAD(wq))
#define QSE_AIO_DEV_HEADERS \
qse_aio_t* aio; \
qse_size_t dev_size; \
int dev_capa; \
qse_aio_dev_mth_t* dev_mth; \
qse_aio_dev_evcb_t* dev_evcb; \
qse_aio_wq_t wq; \
qse_aio_dev_t* dev_prev; \
qse_aio_dev_t* dev_next
struct qse_aio_dev_t
{
QSE_AIO_DEV_HEADERS;
};
enum qse_aio_dev_capa_t
{
QSE_AIO_DEV_CAPA_VIRTUAL = (1 << 0),
QSE_AIO_DEV_CAPA_IN = (1 << 1),
QSE_AIO_DEV_CAPA_OUT = (1 << 2),
/* #QSE_AIO_DEV_CAPA_PRI is meaningful only if #QSE_AIO_DEV_CAPA_IN is set */
QSE_AIO_DEV_CAPA_PRI = (1 << 3),
QSE_AIO_DEV_CAPA_STREAM = (1 << 4),
QSE_AIO_DEV_CAPA_OUT_QUEUED = (1 << 5),
/* internal use only. never set this bit to the dev_capa field */
QSE_AIO_DEV_CAPA_IN_DISABLED = (1 << 9),
QSE_AIO_DEV_CAPA_IN_CLOSED = (1 << 10),
QSE_AIO_DEV_CAPA_OUT_CLOSED = (1 << 11),
QSE_AIO_DEV_CAPA_IN_WATCHED = (1 << 12),
QSE_AIO_DEV_CAPA_OUT_WATCHED = (1 << 13),
QSE_AIO_DEV_CAPA_PRI_WATCHED = (1 << 14), /**< can be set only if QSE_AIO_DEV_CAPA_IN_WATCHED is set */
QSE_AIO_DEV_CAPA_ACTIVE = (1 << 15),
QSE_AIO_DEV_CAPA_HALTED = (1 << 16),
QSE_AIO_DEV_CAPA_ZOMBIE = (1 << 17)
};
typedef enum qse_aio_dev_capa_t qse_aio_dev_capa_t;
enum qse_aio_dev_watch_cmd_t
{
QSE_AIO_DEV_WATCH_START,
QSE_AIO_DEV_WATCH_UPDATE,
QSE_AIO_DEV_WATCH_RENEW, /* automatic update */
QSE_AIO_DEV_WATCH_STOP
};
typedef enum qse_aio_dev_watch_cmd_t qse_aio_dev_watch_cmd_t;
enum qse_aio_dev_event_t
{
QSE_AIO_DEV_EVENT_IN = (1 << 0),
QSE_AIO_DEV_EVENT_OUT = (1 << 1),
QSE_AIO_DEV_EVENT_PRI = (1 << 2),
QSE_AIO_DEV_EVENT_HUP = (1 << 3),
QSE_AIO_DEV_EVENT_ERR = (1 << 4)
};
typedef enum qse_aio_dev_event_t qse_aio_dev_event_t;
/* ========================================================================= */
#ifdef __cplusplus
extern "C" {
#endif
QSE_EXPORT qse_aio_t* qse_aio_open (
qse_mmgr_t* mmgr,
qse_size_t xtnsize,
qse_size_t tmrcapa, /**< initial timer capacity */
qse_aio_errnum_t* errnum
);
QSE_EXPORT void qse_aio_close (
qse_aio_t* aio
);
QSE_EXPORT int qse_aio_init (
qse_aio_t* aio,
qse_mmgr_t* mmgr,
qse_size_t tmrcapa
);
QSE_EXPORT void qse_aio_fini (
qse_aio_t* aio
);
QSE_EXPORT int qse_aio_exec (
qse_aio_t* aio
);
QSE_EXPORT int qse_aio_loop (
qse_aio_t* aio
);
QSE_EXPORT void qse_aio_stop (
qse_aio_t* aio,
qse_aio_stopreq_t stopreq
);
QSE_EXPORT qse_aio_dev_t* qse_aio_makedev (
qse_aio_t* aio,
qse_size_t dev_size,
qse_aio_dev_mth_t* dev_mth,
qse_aio_dev_evcb_t* dev_evcb,
void* make_ctx
);
QSE_EXPORT void qse_aio_killdev (
qse_aio_t* aio,
qse_aio_dev_t* dev
);
QSE_EXPORT int qse_aio_dev_ioctl (
qse_aio_dev_t* dev,
int cmd,
void* arg
);
QSE_EXPORT int qse_aio_dev_watch (
qse_aio_dev_t* dev,
qse_aio_dev_watch_cmd_t cmd,
/** 0 or bitwise-ORed of #QSE_AIO_DEV_EVENT_IN and #QSE_AIO_DEV_EVENT_OUT */
int events
);
QSE_EXPORT int qse_aio_dev_read (
qse_aio_dev_t* dev,
int enabled
);
/**
* The qse_aio_dev_write() function posts a writing request.
* It attempts to write data immediately if there is no pending requests.
* If writing fails, it returns -1. If writing succeeds, it calls the
* on_write callback. If the callback fails, it returns -1. If the callback
* succeeds, it returns 1. If no immediate writing is possible, the request
* is enqueued to a pending request list. If enqueing gets successful,
* it returns 0. otherwise it returns -1.
*/
QSE_EXPORT int qse_aio_dev_write (
qse_aio_dev_t* dev,
const void* data,
qse_aio_iolen_t len,
void* wrctx,
const qse_aio_devaddr_t* dstaddr
);
QSE_EXPORT int qse_aio_dev_timedwrite (
qse_aio_dev_t* dev,
const void* data,
qse_aio_iolen_t len,
const qse_ntime_t* tmout,
void* wrctx,
const qse_aio_devaddr_t* dstaddr
);
QSE_EXPORT void qse_aio_dev_halt (
qse_aio_dev_t* dev
);
/**
* The qse_aio_instmrjob() function schedules a new event.
*
* \return #QSE_AIO_TMRIDX_INVALID on failure, valid index on success.
*/
QSE_EXPORT qse_aio_tmridx_t qse_aio_instmrjob (
qse_aio_t* aio,
const qse_aio_tmrjob_t* job
);
QSE_EXPORT qse_aio_tmridx_t qse_aio_updtmrjob (
qse_aio_t* aio,
qse_aio_tmridx_t index,
const qse_aio_tmrjob_t* job
);
QSE_EXPORT void qse_aio_deltmrjob (
qse_aio_t* aio,
qse_aio_tmridx_t index
);
/**
* The qse_aio_gettmrjob() function returns the
* pointer to the registered event at the given index.
*/
QSE_EXPORT qse_aio_tmrjob_t* qse_aio_gettmrjob (
qse_aio_t* aio,
qse_aio_tmridx_t index
);
QSE_EXPORT int qse_aio_gettmrjobdeadline (
qse_aio_t* aio,
qse_aio_tmridx_t index,
qse_ntime_t* deadline
);
/* ========================================================================= */
#ifdef __cplusplus
}
#endif
#endif

View File

@ -33,7 +33,7 @@
#include <qse/types.h>
#include <qse/macros.h>
#include <qse/cmn/tio.h>
#include <qse/io/tio.h>
#include <qse/cmn/nwad.h>
#include <qse/cmn/time.h>
#include <qse/cmn/sck.h>

View File

@ -29,7 +29,7 @@
#include <qse/types.h>
#include <qse/macros.h>
#include <qse/cmn/tio.h>
#include <qse/io/tio.h>
#include <qse/cmn/env.h>
/** \file

View File

@ -33,8 +33,8 @@
#include <qse/types.h>
#include <qse/macros.h>
#include <qse/cmn/fio.h>
#include <qse/cmn/tio.h>
#include <qse/io/fio.h>
#include <qse/io/tio.h>
#include <stdarg.h>
enum qse_sio_flag_t

View File

@ -28,7 +28,7 @@
#define _QSE_SED_STDSED_H_
#include <qse/sed/sed.h>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
/** \file
* This file defines easier-to-use helper interface for a stream editor.

View File

@ -6,6 +6,7 @@ pkginclude_HEADERS = \
mtx.h \
mux.h \
rwl.h \
task.h \
thr.h
if ENABLE_CXX

View File

@ -118,8 +118,8 @@ am__can_run_installinfo = \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__pkginclude_HEADERS_DIST = cnd.h intr.h mtx.h mux.h rwl.h thr.h \
SocketAddress.hpp Socket.hpp
am__pkginclude_HEADERS_DIST = cnd.h intr.h mtx.h mux.h rwl.h task.h \
thr.h SocketAddress.hpp Socket.hpp
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
@ -345,7 +345,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
pkginclude_HEADERS = cnd.h intr.h mtx.h mux.h rwl.h thr.h \
pkginclude_HEADERS = cnd.h intr.h mtx.h mux.h rwl.h task.h thr.h \
$(am__append_1)
all: all-am

View File

@ -28,7 +28,7 @@
#define _QSE_XLI_STDXLI_H_
#include <qse/xli/xli.h>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
/** \file
* This file provides easier interface to a qse_xli_t object.

View File

@ -1,4 +1,4 @@
SUBDIRS = cmn sys sed awk xli http
SUBDIRS = cmn sys io sed awk xli http
DIST_SUBDIRS = $(SUBDIRS)
pkgconfigdir = $(libdir)/pkgconfig

View File

@ -383,7 +383,7 @@ target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
SUBDIRS = cmn sys sed awk xli http
SUBDIRS = cmn sys io sed awk xli http
DIST_SUBDIRS = $(SUBDIRS)
pkgconfigdir = $(libdir)/pkgconfig
pkgconfig_DATA = qsecmn.pc qseawk.pc qsesed.pc qsexli.pc qsehttp.pc

View File

@ -4,7 +4,7 @@ CPPFLAGS_ALL_COMMON = \
-I$(top_builddir)/include \
-I$(top_srcdir)/include
LDFLAGS_ALL_COMMON = -L. -L../cmn -version-info 1:0:0 -no-undefined
LDFLAGS_ALL_COMMON = -L. -L../cmn -L../io -version-info 1:0:0 -no-undefined
##################################################
# MAIN LIBRARY
@ -12,7 +12,7 @@ LDFLAGS_ALL_COMMON = -L. -L../cmn -version-info 1:0:0 -no-undefined
CPPFLAGS_LIB_COMMON = $(CPPFLAGS_ALL_COMMON) $(LTDLINCL)
LDFLAGS_LIB_COMMON = $(LDFLAGS_ALL_COMMON)
LIBADD_LIB_COMMON = -lqsecmn $(LIBM) $(LIBLTDL)
LIBADD_LIB_COMMON = -lqsecmn -lqseio $(LIBM) $(LIBLTDL)
if WIN32
# you must adjust the value of DEFAULT_MODPOSTFIX according

View File

@ -544,7 +544,7 @@ CPPFLAGS_ALL_COMMON = \
-I$(top_builddir)/include \
-I$(top_srcdir)/include
LDFLAGS_ALL_COMMON = -L. -L../cmn -version-info 1:0:0 -no-undefined
LDFLAGS_ALL_COMMON = -L. -L../cmn -L../io -version-info 1:0:0 -no-undefined
##################################################
# MAIN LIBRARY
@ -552,7 +552,7 @@ LDFLAGS_ALL_COMMON = -L. -L../cmn -version-info 1:0:0 -no-undefined
CPPFLAGS_LIB_COMMON = $(CPPFLAGS_ALL_COMMON) $(LTDLINCL) \
$(am__append_1) $(am__append_2)
LDFLAGS_LIB_COMMON = $(LDFLAGS_ALL_COMMON)
LIBADD_LIB_COMMON = -lqsecmn $(LIBM) $(LIBLTDL)
LIBADD_LIB_COMMON = -lqsecmn -lqseio $(LIBM) $(LIBLTDL)
lib_LTLIBRARIES = libqseawk.la $(am__append_3)
libqseawk_la_SOURCES = awk.c err.c tree.c parse.c run.c rec.c val.c \
fnc.c misc.c rio.c std.c awk.h err.h rio.h val.h fnc.h misc.h \

View File

@ -28,10 +28,11 @@
#include <qse/cmn/str.h>
#include <qse/cmn/mbwc.h>
#include <qse/cmn/time.h>
#include <qse/cmn/pio.h>
#include <qse/cmn/sio.h>
#include <qse/cmn/nwio.h>
#include <qse/cmn/path.h>
#include <qse/io/pio.h>
#include <qse/io/sio.h>
#include <qse/io/nwio.h>
#include "awk.h"
#include "std.h"

View File

@ -26,15 +26,15 @@
#include "std.h"
#include <qse/awk/stdawk.h>
#include <qse/cmn/sio.h>
#include <qse/cmn/pio.h>
#include <qse/cmn/nwio.h>
#include <qse/cmn/str.h>
#include <qse/cmn/mbwc.h>
#include <qse/cmn/time.h>
#include <qse/cmn/path.h>
#include <qse/cmn/htb.h>
#include <qse/cmn/env.h>
#include <qse/io/sio.h>
#include <qse/io/pio.h>
#include <qse/io/nwio.h>
#include "../cmn/mem.h"
#include <stdarg.h>

View File

@ -44,7 +44,6 @@ libqsecmn_la_SOURCES = \
env.c \
gdl.c \
htb.c \
fio.c \
fma.c \
fmt-intmax.c \
fmt-out.c \
@ -68,19 +67,16 @@ libqsecmn_la_SOURCES = \
nwad-skad.c \
nwif.c \
nwif-cfg.c \
nwio.c \
oht.c \
opt.c \
path-base.c \
path-canon.c \
path-core.c \
path-merge.c \
pio.c \
pma.c \
rbt.c \
rex.c \
sck.c \
sio.c \
sll.c \
slmb.c \
str-beg.c \
@ -113,9 +109,7 @@ libqsecmn_la_SOURCES = \
str-tok.c \
str-trm.c \
str-word.c \
task.c \
time.c \
tio.c \
tmr.c \
tre.c \
tre-ast.c \

View File

@ -133,37 +133,37 @@ am__DEPENDENCIES_1 =
libqsecmn_la_DEPENDENCIES = $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am__libqsecmn_la_SOURCES_DIST = alg-base64.c alg-rand.c alg-search.c \
alg-sort.c assert.c chr.c dir.c dll.c env.c gdl.c htb.c fio.c \
fma.c fmt-intmax.c fmt-out.c fs.c fs-attr.c fs-copy.c \
fs-delete.c fs-err.c fs-make.c fs-move.c glob.c hton.c ipad.c \
lda.c main.c mb8.c mbwc.c mbwc-str.c mem.c nwad.c nwad-skad.c \
nwif.c nwif-cfg.c nwio.c oht.c opt.c path-base.c path-canon.c \
path-core.c path-merge.c pio.c pma.c rbt.c rex.c sck.c sio.c \
sll.c slmb.c str-beg.c str-cat.c str-chr.c str-cnv.c str-cmp.c \
str-cpy.c str-del.c str-dup.c str-dyn.c str-end.c str-excl.c \
str-fcpy.c str-fmt.c str-fnmat.c str-incl.c str-join.c \
str-len.c str-pac.c str-pbrk.c str-put.c str-rev.c str-rot.c \
str-set.c str-spl.c str-spn.c str-str.c str-subst.c str-tok.c \
str-trm.c str-word.c task.c time.c tio.c tmr.c tre.c tre-ast.c \
tre-compile.c tre-match-bt.c tre-match-pa.c tre-parse.c \
tre-stack.c uri.c utf8.c xma.c uni.c cp949.c cp950.c
alg-sort.c assert.c chr.c dir.c dll.c env.c gdl.c htb.c fma.c \
fmt-intmax.c fmt-out.c fs.c fs-attr.c fs-copy.c fs-delete.c \
fs-err.c fs-make.c fs-move.c glob.c hton.c ipad.c lda.c main.c \
mb8.c mbwc.c mbwc-str.c mem.c nwad.c nwad-skad.c nwif.c \
nwif-cfg.c oht.c opt.c path-base.c path-canon.c path-core.c \
path-merge.c pma.c rbt.c rex.c sck.c sll.c slmb.c str-beg.c \
str-cat.c str-chr.c str-cnv.c str-cmp.c str-cpy.c str-del.c \
str-dup.c str-dyn.c str-end.c str-excl.c str-fcpy.c str-fmt.c \
str-fnmat.c str-incl.c str-join.c str-len.c str-pac.c \
str-pbrk.c str-put.c str-rev.c str-rot.c str-set.c str-spl.c \
str-spn.c str-str.c str-subst.c str-tok.c str-trm.c str-word.c \
time.c tmr.c tre.c tre-ast.c tre-compile.c tre-match-bt.c \
tre-match-pa.c tre-parse.c tre-stack.c uri.c utf8.c xma.c \
uni.c cp949.c cp950.c
@ENABLE_BUNDLED_UNICODE_TRUE@am__objects_1 = uni.lo
@ENABLE_XCMGRS_TRUE@am__objects_2 = cp949.lo cp950.lo
am_libqsecmn_la_OBJECTS = alg-base64.lo alg-rand.lo alg-search.lo \
alg-sort.lo assert.lo chr.lo dir.lo dll.lo env.lo gdl.lo \
htb.lo fio.lo fma.lo fmt-intmax.lo fmt-out.lo fs.lo fs-attr.lo \
htb.lo fma.lo fmt-intmax.lo fmt-out.lo fs.lo fs-attr.lo \
fs-copy.lo fs-delete.lo fs-err.lo fs-make.lo fs-move.lo \
glob.lo hton.lo ipad.lo lda.lo main.lo mb8.lo mbwc.lo \
mbwc-str.lo mem.lo nwad.lo nwad-skad.lo nwif.lo nwif-cfg.lo \
nwio.lo oht.lo opt.lo path-base.lo path-canon.lo path-core.lo \
path-merge.lo pio.lo pma.lo rbt.lo rex.lo sck.lo sio.lo sll.lo \
slmb.lo str-beg.lo str-cat.lo str-chr.lo str-cnv.lo str-cmp.lo \
oht.lo opt.lo path-base.lo path-canon.lo path-core.lo \
path-merge.lo pma.lo rbt.lo rex.lo sck.lo sll.lo slmb.lo \
str-beg.lo str-cat.lo str-chr.lo str-cnv.lo str-cmp.lo \
str-cpy.lo str-del.lo str-dup.lo str-dyn.lo str-end.lo \
str-excl.lo str-fcpy.lo str-fmt.lo str-fnmat.lo str-incl.lo \
str-join.lo str-len.lo str-pac.lo str-pbrk.lo str-put.lo \
str-rev.lo str-rot.lo str-set.lo str-spl.lo str-spn.lo \
str-str.lo str-subst.lo str-tok.lo str-trm.lo str-word.lo \
task.lo time.lo tio.lo tmr.lo tre.lo tre-ast.lo tre-compile.lo \
time.lo tmr.lo tre.lo tre-ast.lo tre-compile.lo \
tre-match-bt.lo tre-match-pa.lo tre-parse.lo tre-stack.lo \
uri.lo utf8.lo xma.lo $(am__objects_1) $(am__objects_2)
libqsecmn_la_OBJECTS = $(am_libqsecmn_la_OBJECTS)
@ -474,20 +474,20 @@ noinst_HEADERS = \
uni-trait.h
libqsecmn_la_SOURCES = alg-base64.c alg-rand.c alg-search.c alg-sort.c \
assert.c chr.c dir.c dll.c env.c gdl.c htb.c fio.c fma.c \
assert.c chr.c dir.c dll.c env.c gdl.c htb.c fma.c \
fmt-intmax.c fmt-out.c fs.c fs-attr.c fs-copy.c fs-delete.c \
fs-err.c fs-make.c fs-move.c glob.c hton.c ipad.c lda.c main.c \
mb8.c mbwc.c mbwc-str.c mem.c nwad.c nwad-skad.c nwif.c \
nwif-cfg.c nwio.c oht.c opt.c path-base.c path-canon.c \
path-core.c path-merge.c pio.c pma.c rbt.c rex.c sck.c sio.c \
sll.c slmb.c str-beg.c str-cat.c str-chr.c str-cnv.c str-cmp.c \
str-cpy.c str-del.c str-dup.c str-dyn.c str-end.c str-excl.c \
str-fcpy.c str-fmt.c str-fnmat.c str-incl.c str-join.c \
str-len.c str-pac.c str-pbrk.c str-put.c str-rev.c str-rot.c \
str-set.c str-spl.c str-spn.c str-str.c str-subst.c str-tok.c \
str-trm.c str-word.c task.c time.c tio.c tmr.c tre.c tre-ast.c \
tre-compile.c tre-match-bt.c tre-match-pa.c tre-parse.c \
tre-stack.c uri.c utf8.c xma.c $(am__append_1) $(am__append_2)
nwif-cfg.c oht.c opt.c path-base.c path-canon.c path-core.c \
path-merge.c pma.c rbt.c rex.c sck.c sll.c slmb.c str-beg.c \
str-cat.c str-chr.c str-cnv.c str-cmp.c str-cpy.c str-del.c \
str-dup.c str-dyn.c str-end.c str-excl.c str-fcpy.c str-fmt.c \
str-fnmat.c str-incl.c str-join.c str-len.c str-pac.c \
str-pbrk.c str-put.c str-rev.c str-rot.c str-set.c str-spl.c \
str-spn.c str-str.c str-subst.c str-tok.c str-trm.c str-word.c \
time.c tmr.c tre.c tre-ast.c tre-compile.c tre-match-bt.c \
tre-match-pa.c tre-parse.c tre-stack.c uri.c utf8.c xma.c \
$(am__append_1) $(am__append_2)
libqsecmn_la_LDFLAGS = -version-info 1:0:0 -no-undefined
libqsecmn_la_LIBADD = $(SOCKET_LIBS) $(QUADMATH_LIBS)
@ENABLE_CXX_TRUE@libqsecmnxx_la_SOURCES = \
@ -594,7 +594,6 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dir.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dll.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/env.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fma.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmt-intmax.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fmt-out.Plo@am__quote@
@ -620,19 +619,16 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nwad.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nwif-cfg.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nwif.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nwio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oht.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/opt.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path-base.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path-canon.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path-core.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/path-merge.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pma.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rbt.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rex.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sck.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sll.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/slmb.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-beg.Plo@am__quote@
@ -665,9 +661,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-tok.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-trm.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str-word.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/task.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/time.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tmr.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tre-ast.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tre-compile.Plo@am__quote@

View File

@ -26,7 +26,7 @@
#include <qse/types.h>
#include <qse/macros.h>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
#include "mem.h"
#if defined(HAVE_EXECINFO_H)

View File

@ -27,7 +27,7 @@
#include <qse/cmn/nwif.h>
#include <qse/cmn/str.h>
#include <qse/cmn/mbwc.h>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
#include "mem.h"
#if defined(_WIN32)

View File

@ -33,6 +33,6 @@ libqsehttp_la_SOURCES = \
upxd.c
libqsehttp_la_CPPFLAGS = $(CPPFLAGS_ALL_COMMON) $(CPPFLAGS_HTTPD_MOD) $(LTDLINCL)
libqsehttp_la_LDFLAGS = -L../sys -L../cmn -version-info 1:0:0 -no-undefined
libqsehttp_la_LIBADD = -lqsesys -lqsecmn $(SOCKET_LIBS) $(SENDFILE_LIBS) $(SSL_LIBS) $(LIBLTDL)
libqsehttp_la_LDFLAGS = -L../sys -L../cmn -L../io -version-info 1:0:0 -no-undefined
libqsehttp_la_LIBADD = -lqsesys -lqsecmn -lqseio $(SOCKET_LIBS) $(SENDFILE_LIBS) $(SSL_LIBS) $(LIBLTDL)

View File

@ -410,8 +410,8 @@ libqsehttp_la_SOURCES = \
upxd.c
libqsehttp_la_CPPFLAGS = $(CPPFLAGS_ALL_COMMON) $(CPPFLAGS_HTTPD_MOD) $(LTDLINCL)
libqsehttp_la_LDFLAGS = -L../sys -L../cmn -version-info 1:0:0 -no-undefined
libqsehttp_la_LIBADD = -lqsesys -lqsecmn $(SOCKET_LIBS) $(SENDFILE_LIBS) $(SSL_LIBS) $(LIBLTDL)
libqsehttp_la_LDFLAGS = -L../sys -L../cmn -L../io -version-info 1:0:0 -no-undefined
libqsehttp_la_LIBADD = -lqsesys -lqsecmn -lqseio $(SOCKET_LIBS) $(SENDFILE_LIBS) $(SSL_LIBS) $(LIBLTDL)
all: all-am
.SUFFIXES:

View File

@ -27,7 +27,7 @@
#include "httpd.h"
#include "../cmn/mem.h"
#include <qse/cmn/str.h>
#include <qse/cmn/pio.h>
#include <qse/io/pio.h>
#include <qse/cmn/fmt.h>
#include <qse/cmn/path.h>

View File

@ -36,8 +36,8 @@
#include <qse/cmn/fmt.h>
#include <qse/cmn/path.h>
#include <qse/cmn/dir.h>
#include <qse/cmn/fio.h>
#include <qse/cmn/sio.h>
#include <qse/io/fio.h>
#include <qse/io/sio.h>
#include <qse/cmn/sck.h>
#include <qse/sys/mux.h>

View File

@ -29,7 +29,7 @@
#include <qse/cmn/chr.h>
#include <qse/cmn/str.h>
#include <qse/cmn/mbwc.h>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
#if !defined(QSE_HTTPD_DEFAULT_MODPREFIX)

View File

@ -41,7 +41,7 @@
#endif
#if defined(QSE_HTTPD_DEBUG)
# include <qse/cmn/sio.h>
# include <qse/io/sio.h>
# include <qse/cmn/path.h>
# define HTTPD_DBGOUT0(fmt) qse_putmbsf("%06d %-20hs " fmt, (int)__LINE__, qse_mbsbasename(__FILE__))
# define HTTPD_DBGOUT1(fmt,a1) qse_putmbsf("%06d %-20hs " fmt, (int)__LINE__, qse_mbsbasename(__FILE__), (a1))

31
qse/lib/io/Makefile.am Normal file
View File

@ -0,0 +1,31 @@
AUTOMAKE_OPTIONS = nostdinc
CPPFLAGS_ALL_COMMON = \
-I$(top_builddir)/include \
-I$(top_srcdir)/include
LDFLAGS_ALL_COMMON = -L. -L../cmn -version-info 1:0:0 -no-undefined
##################################################
# MAIN LIBRARY
##################################################
CPPFLAGS_LIB_COMMON = $(CPPFLAGS_ALL_COMMON)
LDFLAGS_LIB_COMMON = $(LDFLAGS_ALL_COMMON)
LIBADD_LIB_COMMON = -lqsecmn
lib_LTLIBRARIES = libqseio.la
libqseio_la_SOURCES = \
aio-prv.h \
aio.c \
aio-pro.c \
aio-sck.c \
aio-tmr.c \
fio.c \
nwio.c \
pio.c \
sio.c \
tio.c
libqseio_la_CPPFLAGS = $(CPPFLAGS_LIB_COMMON)
libqseio_la_LDFLAGS = $(LDFLAGS_LIB_COMMON)
libqseio_la_LIBADD = $(LIBADD_LIB_COMMON) $(SOCKET_LIBS) $(SSL_LIBS)

796
qse/lib/io/Makefile.in Normal file
View File

@ -0,0 +1,796 @@
# Makefile.in generated by automake 1.14.1 from Makefile.am.
# @configure_input@
# Copyright (C) 1994-2013 Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
# with or without modifications, as long as this notice is preserved.
# This program is distributed in the hope that it will be useful,
# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
# PARTICULAR PURPOSE.
@SET_MAKE@
VPATH = @srcdir@
am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
am__make_running_with_option = \
case $${target_option-} in \
?) ;; \
*) echo "am__make_running_with_option: internal error: invalid" \
"target option '$${target_option-}' specified" >&2; \
exit 1;; \
esac; \
has_opt=no; \
sane_makeflags=$$MAKEFLAGS; \
if $(am__is_gnu_make); then \
sane_makeflags=$$MFLAGS; \
else \
case $$MAKEFLAGS in \
*\\[\ \ ]*) \
bs=\\; \
sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
| sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \
esac; \
fi; \
skip_next=no; \
strip_trailopt () \
{ \
flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
}; \
for flg in $$sane_makeflags; do \
test $$skip_next = yes && { skip_next=no; continue; }; \
case $$flg in \
*=*|--*) continue;; \
-*I) strip_trailopt 'I'; skip_next=yes;; \
-*I?*) strip_trailopt 'I';; \
-*O) strip_trailopt 'O'; skip_next=yes;; \
-*O?*) strip_trailopt 'O';; \
-*l) strip_trailopt 'l'; skip_next=yes;; \
-*l?*) strip_trailopt 'l';; \
-[dEDm]) skip_next=yes;; \
-[JT]) skip_next=yes;; \
esac; \
case $$flg in \
*$$target_option*) has_opt=yes; break;; \
esac; \
done; \
test $$has_opt = yes
am__make_dryrun = (target_option=n; $(am__make_running_with_option))
am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
pkgdatadir = $(datadir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkglibexecdir = $(libexecdir)/@PACKAGE@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_HEADER = $(INSTALL_DATA)
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
build_triplet = @build@
host_triplet = @host@
subdir = lib/io
DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
$(top_srcdir)/ac/depcomp
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
am__aclocal_m4_deps = $(top_srcdir)/m4/argz.m4 \
$(top_srcdir)/m4/ax_check_sign.m4 \
$(top_srcdir)/m4/ax_cxx_namespace.m4 \
$(top_srcdir)/m4/ax_numval.m4 $(top_srcdir)/m4/ax_pthread.m4 \
$(top_srcdir)/m4/libtool.m4 $(top_srcdir)/m4/ltdl.m4 \
$(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \
$(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \
$(top_srcdir)/m4/lx_find_mpi.m4 $(top_srcdir)/configure.ac
am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
$(ACLOCAL_M4)
mkinstalldirs = $(install_sh) -d
CONFIG_HEADER = $(top_builddir)/include/qse/config.h
CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
am__vpath_adj = case $$p in \
$(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
*) f=$$p;; \
esac;
am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
am__install_max = 40
am__nobase_strip_setup = \
srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
am__nobase_strip = \
for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
am__nobase_list = $(am__nobase_strip_setup); \
for p in $$list; do echo "$$p $$p"; done | \
sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
$(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
if (++n[$$2] == $(am__install_max)) \
{ print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
END { for (dir in files) print dir, files[dir] }'
am__base_list = \
sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
am__uninstall_files_from_dir = { \
test -z "$$files" \
|| { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
|| { echo " ( cd '$$dir' && rm -f" $$files ")"; \
$(am__cd) "$$dir" && rm -f $$files; }; \
}
am__installdirs = "$(DESTDIR)$(libdir)"
LTLIBRARIES = $(lib_LTLIBRARIES)
am__DEPENDENCIES_1 =
libqseio_la_DEPENDENCIES = $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
$(am__DEPENDENCIES_1)
am_libqseio_la_OBJECTS = libqseio_la-aio.lo libqseio_la-aio-pro.lo \
libqseio_la-aio-sck.lo libqseio_la-aio-tmr.lo \
libqseio_la-fio.lo libqseio_la-nwio.lo libqseio_la-pio.lo \
libqseio_la-sio.lo libqseio_la-tio.lo
libqseio_la_OBJECTS = $(am_libqseio_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
am__v_lt_0 = --silent
am__v_lt_1 =
libqseio_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(libqseio_la_LDFLAGS) $(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
am__v_P_0 = false
am__v_P_1 = :
AM_V_GEN = $(am__v_GEN_@AM_V@)
am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
am__v_GEN_0 = @echo " GEN " $@;
am__v_GEN_1 =
AM_V_at = $(am__v_at_@AM_V@)
am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
am__v_at_0 = @
am__v_at_1 =
DEFAULT_INCLUDES =
depcomp = $(SHELL) $(top_srcdir)/ac/depcomp
am__depfiles_maybe = depfiles
am__mv = mv -f
COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \
$(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \
$(AM_CFLAGS) $(CFLAGS)
AM_V_CC = $(am__v_CC_@AM_V@)
am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
am__v_CC_0 = @echo " CC " $@;
am__v_CC_1 =
CCLD = $(CC)
LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \
$(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \
$(AM_LDFLAGS) $(LDFLAGS) -o $@
AM_V_CCLD = $(am__v_CCLD_@AM_V@)
am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
am__v_CCLD_0 = @echo " CCLD " $@;
am__v_CCLD_1 =
SOURCES = $(libqseio_la_SOURCES)
DIST_SOURCES = $(libqseio_la_SOURCES)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
n|no|NO) false;; \
*) (install-info --version) >/dev/null 2>&1;; \
esac
am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
# Read a list of newline-separated strings from the standard input,
# and print each of them once, without duplicates. Input order is
# *not* preserved.
am__uniquify_input = $(AWK) '\
BEGIN { nonempty = 0; } \
{ items[$$0] = 1; nonempty = 1; } \
END { if (nonempty) { for (i in items) print i; }; } \
'
# Make sure the list of sources is unique. This is necessary because,
# e.g., the same source file might be shared among _SOURCES variables
# for different programs/libraries.
am__define_uniq_tagged_files = \
list='$(am__tagged_files)'; \
unique=`for i in $$list; do \
if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
done | $(am__uniquify_input)`
ETAGS = etags
CTAGS = ctags
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
ACLOCAL = @ACLOCAL@
AMTAR = @AMTAR@
AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
AR = @AR@
ARGZ_H = @ARGZ_H@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
BUILD_MODE = @BUILD_MODE@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CHAR_MODE = @CHAR_MODE@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CXX = @CXX@
CXXCPP = @CXXCPP@
CXXDEPMODE = @CXXDEPMODE@
CXXFLAGS = @CXXFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
DLLTOOL = @DLLTOOL@
DSYMUTIL = @DSYMUTIL@
DUMPBIN = @DUMPBIN@
ECHO = @ECHO@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
FGREP = @FGREP@
GREP = @GREP@
HAVE_CXX = @HAVE_CXX@
INCLTDL = @INCLTDL@
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LD = @LD@
LDFLAGS = @LDFLAGS@
LIBADD_DL = @LIBADD_DL@
LIBADD_DLD_LINK = @LIBADD_DLD_LINK@
LIBADD_DLOPEN = @LIBADD_DLOPEN@
LIBADD_SHL_LOAD = @LIBADD_SHL_LOAD@
LIBLTDL = @LIBLTDL@
LIBM = @LIBM@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LIBTOOL = @LIBTOOL@
LIBTOOL_DEPS = @LIBTOOL_DEPS@
LIPO = @LIPO@
LN_S = @LN_S@
LTDLDEPS = @LTDLDEPS@
LTDLINCL = @LTDLINCL@
LTDLOPEN = @LTDLOPEN@
LTLIBOBJS = @LTLIBOBJS@
LT_CONFIG_H = @LT_CONFIG_H@
LT_DLLOADERS = @LT_DLLOADERS@
LT_DLPREOPEN = @LT_DLPREOPEN@
MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPICC = @MPICC@
MPI_CFLAGS = @MPI_CFLAGS@
MPI_CLDFLAGS = @MPI_CLDFLAGS@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
OBJEXT = @OBJEXT@
OTOOL = @OTOOL@
OTOOL64 = @OTOOL64@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_URL = @PACKAGE_URL@
PACKAGE_VERSION = @PACKAGE_VERSION@
PACKAGE_VERSION_MAJOR = @PACKAGE_VERSION_MAJOR@
PACKAGE_VERSION_MINOR = @PACKAGE_VERSION_MINOR@
PACKAGE_VERSION_PATCH = @PACKAGE_VERSION_PATCH@
PATH_SEPARATOR = @PATH_SEPARATOR@
PTHREAD_CC = @PTHREAD_CC@
PTHREAD_CFLAGS = @PTHREAD_CFLAGS@
PTHREAD_LIBS = @PTHREAD_LIBS@
QSE_PROJECT_AUTHOR = @QSE_PROJECT_AUTHOR@
QSE_PROJECT_URL = @QSE_PROJECT_URL@
QSE_SIZEOF_CHAR = @QSE_SIZEOF_CHAR@
QSE_SIZEOF_DOUBLE = @QSE_SIZEOF_DOUBLE@
QSE_SIZEOF_FLOAT = @QSE_SIZEOF_FLOAT@
QSE_SIZEOF_INT = @QSE_SIZEOF_INT@
QSE_SIZEOF_LONG = @QSE_SIZEOF_LONG@
QSE_SIZEOF_LONG_DOUBLE = @QSE_SIZEOF_LONG_DOUBLE@
QSE_SIZEOF_LONG_LONG = @QSE_SIZEOF_LONG_LONG@
QSE_SIZEOF_OFF64_T = @QSE_SIZEOF_OFF64_T@
QSE_SIZEOF_OFF_T = @QSE_SIZEOF_OFF_T@
QSE_SIZEOF_SHORT = @QSE_SIZEOF_SHORT@
QSE_SIZEOF_VOID_P = @QSE_SIZEOF_VOID_P@
QSE_SIZEOF_WCHAR_T = @QSE_SIZEOF_WCHAR_T@
QUADMATH_LIBS = @QUADMATH_LIBS@
RANLIB = @RANLIB@
RM = @RM@
RMDIR = @RMDIR@
SED = @SED@
SENDFILE_LIBS = @SENDFILE_LIBS@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
SOCKET_LIBS = @SOCKET_LIBS@
SSL_LIBS = @SSL_LIBS@
STRIP = @STRIP@
TRUE = @TRUE@
UCI_LIBS = @UCI_LIBS@
UNICOWS_LIBS = @UNICOWS_LIBS@
VERSION = @VERSION@
abs_builddir = @abs_builddir@
abs_srcdir = @abs_srcdir@
abs_top_builddir = @abs_top_builddir@
abs_top_srcdir = @abs_top_srcdir@
ac_ct_AR = @ac_ct_AR@
ac_ct_CC = @ac_ct_CC@
ac_ct_CXX = @ac_ct_CXX@
ac_ct_DUMPBIN = @ac_ct_DUMPBIN@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
am__tar = @am__tar@
am__untar = @am__untar@
ax_pthread_config = @ax_pthread_config@
bindir = @bindir@
build = @build@
build_alias = @build_alias@
build_cpu = @build_cpu@
build_os = @build_os@
build_vendor = @build_vendor@
builddir = @builddir@
datadir = @datadir@
datarootdir = @datarootdir@
docdir = @docdir@
dvidir = @dvidir@
exec_prefix = @exec_prefix@
host = @host@
host_alias = @host_alias@
host_cpu = @host_cpu@
host_os = @host_os@
host_vendor = @host_vendor@
htmldir = @htmldir@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localedir = @localedir@
localstatedir = @localstatedir@
ltdl_LIBOBJS = @ltdl_LIBOBJS@
ltdl_LTLIBOBJS = @ltdl_LTLIBOBJS@
mandir = @mandir@
mkdir_p = @mkdir_p@
oldincludedir = @oldincludedir@
pdfdir = @pdfdir@
prefix = @prefix@
program_transform_name = @program_transform_name@
psdir = @psdir@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
srcdir = @srcdir@
subdirs = @subdirs@
sys_symbol_underscore = @sys_symbol_underscore@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
AUTOMAKE_OPTIONS = nostdinc
CPPFLAGS_ALL_COMMON = \
-I$(top_builddir)/include \
-I$(top_srcdir)/include
LDFLAGS_ALL_COMMON = -L. -L../cmn -version-info 1:0:0 -no-undefined
##################################################
# MAIN LIBRARY
##################################################
CPPFLAGS_LIB_COMMON = $(CPPFLAGS_ALL_COMMON)
LDFLAGS_LIB_COMMON = $(LDFLAGS_ALL_COMMON)
LIBADD_LIB_COMMON = -lqsecmn
lib_LTLIBRARIES = libqseio.la
libqseio_la_SOURCES = \
aio-prv.h \
aio.c \
aio-pro.c \
aio-sck.c \
aio-tmr.c \
fio.c \
nwio.c \
pio.c \
sio.c \
tio.c
libqseio_la_CPPFLAGS = $(CPPFLAGS_LIB_COMMON)
libqseio_la_LDFLAGS = $(LDFLAGS_LIB_COMMON)
libqseio_la_LIBADD = $(LIBADD_LIB_COMMON) $(SOCKET_LIBS) $(SSL_LIBS)
all: all-am
.SUFFIXES:
.SUFFIXES: .c .lo .o .obj
$(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps)
@for dep in $?; do \
case '$(am__configure_deps)' in \
*$$dep*) \
( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
&& { if test -f $@; then exit 0; else break; fi; }; \
exit 1;; \
esac; \
done; \
echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign lib/io/Makefile'; \
$(am__cd) $(top_srcdir) && \
$(AUTOMAKE) --foreign lib/io/Makefile
.PRECIOUS: Makefile
Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
@case '$?' in \
*config.status*) \
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
*) \
echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
esac;
$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(top_srcdir)/configure: $(am__configure_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(ACLOCAL_M4): $(am__aclocal_m4_deps)
cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
$(am__aclocal_m4_deps):
install-libLTLIBRARIES: $(lib_LTLIBRARIES)
@$(NORMAL_INSTALL)
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
list2=; for p in $$list; do \
if test -f $$p; then \
list2="$$list2 $$p"; \
else :; fi; \
done; \
test -z "$$list2" || { \
echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \
$(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \
}
uninstall-libLTLIBRARIES:
@$(NORMAL_UNINSTALL)
@list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \
for p in $$list; do \
$(am__strip_dir) \
echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \
$(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \
done
clean-libLTLIBRARIES:
-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
@list='$(lib_LTLIBRARIES)'; \
locs=`for p in $$list; do echo $$p; done | \
sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
sort -u`; \
test -z "$$locs" || { \
echo rm -f $${locs}; \
rm -f $${locs}; \
}
libqseio.la: $(libqseio_la_OBJECTS) $(libqseio_la_DEPENDENCIES) $(EXTRA_libqseio_la_DEPENDENCIES)
$(AM_V_CCLD)$(libqseio_la_LINK) -rpath $(libdir) $(libqseio_la_OBJECTS) $(libqseio_la_LIBADD) $(LIBS)
mostlyclean-compile:
-rm -f *.$(OBJEXT)
distclean-compile:
-rm -f *.tab.c
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-aio-pro.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-aio-sck.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-aio-tmr.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-aio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-fio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-nwio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-pio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-sio.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqseio_la-tio.Plo@am__quote@
.c.o:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
.c.obj:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
.c.lo:
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $<
libqseio_la-aio.lo: aio.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-aio.lo -MD -MP -MF $(DEPDIR)/libqseio_la-aio.Tpo -c -o libqseio_la-aio.lo `test -f 'aio.c' || echo '$(srcdir)/'`aio.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-aio.Tpo $(DEPDIR)/libqseio_la-aio.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aio.c' object='libqseio_la-aio.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-aio.lo `test -f 'aio.c' || echo '$(srcdir)/'`aio.c
libqseio_la-aio-pro.lo: aio-pro.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-aio-pro.lo -MD -MP -MF $(DEPDIR)/libqseio_la-aio-pro.Tpo -c -o libqseio_la-aio-pro.lo `test -f 'aio-pro.c' || echo '$(srcdir)/'`aio-pro.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-aio-pro.Tpo $(DEPDIR)/libqseio_la-aio-pro.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aio-pro.c' object='libqseio_la-aio-pro.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-aio-pro.lo `test -f 'aio-pro.c' || echo '$(srcdir)/'`aio-pro.c
libqseio_la-aio-sck.lo: aio-sck.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-aio-sck.lo -MD -MP -MF $(DEPDIR)/libqseio_la-aio-sck.Tpo -c -o libqseio_la-aio-sck.lo `test -f 'aio-sck.c' || echo '$(srcdir)/'`aio-sck.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-aio-sck.Tpo $(DEPDIR)/libqseio_la-aio-sck.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aio-sck.c' object='libqseio_la-aio-sck.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-aio-sck.lo `test -f 'aio-sck.c' || echo '$(srcdir)/'`aio-sck.c
libqseio_la-aio-tmr.lo: aio-tmr.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-aio-tmr.lo -MD -MP -MF $(DEPDIR)/libqseio_la-aio-tmr.Tpo -c -o libqseio_la-aio-tmr.lo `test -f 'aio-tmr.c' || echo '$(srcdir)/'`aio-tmr.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-aio-tmr.Tpo $(DEPDIR)/libqseio_la-aio-tmr.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='aio-tmr.c' object='libqseio_la-aio-tmr.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-aio-tmr.lo `test -f 'aio-tmr.c' || echo '$(srcdir)/'`aio-tmr.c
libqseio_la-fio.lo: fio.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-fio.lo -MD -MP -MF $(DEPDIR)/libqseio_la-fio.Tpo -c -o libqseio_la-fio.lo `test -f 'fio.c' || echo '$(srcdir)/'`fio.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-fio.Tpo $(DEPDIR)/libqseio_la-fio.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fio.c' object='libqseio_la-fio.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-fio.lo `test -f 'fio.c' || echo '$(srcdir)/'`fio.c
libqseio_la-nwio.lo: nwio.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-nwio.lo -MD -MP -MF $(DEPDIR)/libqseio_la-nwio.Tpo -c -o libqseio_la-nwio.lo `test -f 'nwio.c' || echo '$(srcdir)/'`nwio.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-nwio.Tpo $(DEPDIR)/libqseio_la-nwio.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nwio.c' object='libqseio_la-nwio.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-nwio.lo `test -f 'nwio.c' || echo '$(srcdir)/'`nwio.c
libqseio_la-pio.lo: pio.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-pio.lo -MD -MP -MF $(DEPDIR)/libqseio_la-pio.Tpo -c -o libqseio_la-pio.lo `test -f 'pio.c' || echo '$(srcdir)/'`pio.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-pio.Tpo $(DEPDIR)/libqseio_la-pio.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pio.c' object='libqseio_la-pio.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-pio.lo `test -f 'pio.c' || echo '$(srcdir)/'`pio.c
libqseio_la-sio.lo: sio.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-sio.lo -MD -MP -MF $(DEPDIR)/libqseio_la-sio.Tpo -c -o libqseio_la-sio.lo `test -f 'sio.c' || echo '$(srcdir)/'`sio.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-sio.Tpo $(DEPDIR)/libqseio_la-sio.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sio.c' object='libqseio_la-sio.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-sio.lo `test -f 'sio.c' || echo '$(srcdir)/'`sio.c
libqseio_la-tio.lo: tio.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT libqseio_la-tio.lo -MD -MP -MF $(DEPDIR)/libqseio_la-tio.Tpo -c -o libqseio_la-tio.lo `test -f 'tio.c' || echo '$(srcdir)/'`tio.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqseio_la-tio.Tpo $(DEPDIR)/libqseio_la-tio.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tio.c' object='libqseio_la-tio.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libqseio_la_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o libqseio_la-tio.lo `test -f 'tio.c' || echo '$(srcdir)/'`tio.c
mostlyclean-libtool:
-rm -f *.lo
clean-libtool:
-rm -rf .libs _libs
ID: $(am__tagged_files)
$(am__define_uniq_tagged_files); mkid -fID $$unique
tags: tags-am
TAGS: tags
tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
set x; \
here=`pwd`; \
$(am__define_uniq_tagged_files); \
shift; \
if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
test -n "$$unique" || unique=$$empty_fix; \
if test $$# -gt 0; then \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
"$$@" $$unique; \
else \
$(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
$$unique; \
fi; \
fi
ctags: ctags-am
CTAGS: ctags
ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
$(am__define_uniq_tagged_files); \
test -z "$(CTAGS_ARGS)$$unique" \
|| $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
$$unique
GTAGS:
here=`$(am__cd) $(top_builddir) && pwd` \
&& $(am__cd) $(top_srcdir) \
&& gtags -i $(GTAGS_ARGS) "$$here"
cscopelist: cscopelist-am
cscopelist-am: $(am__tagged_files)
list='$(am__tagged_files)'; \
case "$(srcdir)" in \
[\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
*) sdir=$(subdir)/$(srcdir) ;; \
esac; \
for i in $$list; do \
if test -f "$$i"; then \
echo "$(subdir)/$$i"; \
else \
echo "$$sdir/$$i"; \
fi; \
done >> $(top_builddir)/cscope.files
distclean-tags:
-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
distdir: $(DISTFILES)
@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
list='$(DISTFILES)'; \
dist_files=`for file in $$list; do echo $$file; done | \
sed -e "s|^$$srcdirstrip/||;t" \
-e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
case $$dist_files in \
*/*) $(MKDIR_P) `echo "$$dist_files" | \
sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
sort -u` ;; \
esac; \
for file in $$dist_files; do \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
if test -d $$d/$$file; then \
dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
if test -d "$(distdir)/$$file"; then \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
fi; \
cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
else \
test -f "$(distdir)/$$file" \
|| cp -p $$d/$$file "$(distdir)/$$file" \
|| exit 1; \
fi; \
done
check-am: all-am
check: check-am
all-am: Makefile $(LTLIBRARIES)
installdirs:
for dir in "$(DESTDIR)$(libdir)"; do \
test -z "$$dir" || $(MKDIR_P) "$$dir"; \
done
install: install-am
install-exec: install-exec-am
install-data: install-data-am
uninstall: uninstall-am
install-am: all-am
@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
installcheck: installcheck-am
install-strip:
if test -z '$(STRIP)'; then \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
install; \
else \
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
"INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
fi
mostlyclean-generic:
clean-generic:
distclean-generic:
-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
@echo "it deletes files that may require special tools to rebuild."
clean: clean-am
clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
mostlyclean-am
distclean: distclean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
distclean-am: clean-am distclean-compile distclean-generic \
distclean-tags
dvi: dvi-am
dvi-am:
html: html-am
html-am:
info: info-am
info-am:
install-data-am:
install-dvi: install-dvi-am
install-dvi-am:
install-exec-am: install-libLTLIBRARIES
install-html: install-html-am
install-html-am:
install-info: install-info-am
install-info-am:
install-man:
install-pdf: install-pdf-am
install-pdf-am:
install-ps: install-ps-am
install-ps-am:
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -rf ./$(DEPDIR)
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-compile mostlyclean-generic \
mostlyclean-libtool
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-libLTLIBRARIES
.MAKE: install-am install-strip
.PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \
clean-libLTLIBRARIES clean-libtool cscopelist-am ctags \
ctags-am distclean distclean-compile distclean-generic \
distclean-libtool distclean-tags distdir dvi dvi-am html \
html-am info info-am install install-am install-data \
install-data-am install-dvi install-dvi-am install-exec \
install-exec-am install-html install-html-am install-info \
install-info-am install-libLTLIBRARIES install-man install-pdf \
install-pdf-am install-ps install-ps-am install-strip \
installcheck installcheck-am installdirs maintainer-clean \
maintainer-clean-generic mostlyclean mostlyclean-compile \
mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \
tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
.NOEXPORT:

852
qse/lib/io/aio-pro.c Normal file
View File

@ -0,0 +1,852 @@
/*
* $Id$
*
Copyright (c) 2006-2016 Chung, Hyung-Hwan. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAfRRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <qse/io/aio-pro.h>
#include "aio-prv.h"
#include <qse/cmn/str.h>
#include <unistd.h>
#include <fcntl.h>
#include <errno.h>
#include <sys/wait.h>
/* ========================================================================= */
struct slave_info_t
{
qse_aio_dev_pro_make_t* mi;
qse_aio_syshnd_t pfd;
int dev_capa;
qse_aio_dev_pro_sid_t id;
};
typedef struct slave_info_t slave_info_t;
static qse_aio_dev_pro_slave_t* make_slave (qse_aio_t* aio, slave_info_t* si);
/* ========================================================================= */
struct param_t
{
qse_mchar_t* mcmd;
qse_mchar_t* fixed_argv[4];
qse_mchar_t** argv;
};
typedef struct param_t param_t;
static void free_param (qse_aio_t* aio, param_t* param)
{
if (param->argv && param->argv != param->fixed_argv)
QSE_MMGR_FREE (aio->mmgr, param->argv);
if (param->mcmd) QSE_MMGR_FREE (aio->mmgr, param->mcmd);
QSE_MEMSET (param, 0, QSE_SIZEOF(*param));
}
static int make_param (qse_aio_t* aio, const qse_mchar_t* cmd, int flags, param_t* param)
{
int fcnt = 0;
qse_mchar_t* mcmd = QSE_NULL;
QSE_MEMSET (param, 0, QSE_SIZEOF(*param));
if (flags & QSE_AIO_DEV_PRO_SHELL)
{
mcmd = (qse_mchar_t*)cmd;
param->argv = param->fixed_argv;
param->argv[0] = QSE_MT("/bin/sh");
param->argv[1] = QSE_MT("-c");
param->argv[2] = mcmd;
param->argv[3] = QSE_NULL;
}
else
{
int i;
qse_mchar_t** argv;
qse_mchar_t* mcmdptr;
mcmd = qse_mbsdup (cmd, aio->mmgr);
if (!mcmd)
{
aio->errnum = QSE_AIO_ENOMEM;
goto oops;
}
fcnt = qse_mbsspl (mcmd, QSE_MT(""), QSE_MT('\"'), QSE_MT('\"'), QSE_MT('\\'));
if (fcnt <= 0)
{
/* no field or an error */
aio->errnum = QSE_AIO_EINVAL;
goto oops;
}
if (fcnt < QSE_COUNTOF(param->fixed_argv))
{
param->argv = param->fixed_argv;
}
else
{
param->argv = QSE_MMGR_ALLOC (aio->mmgr, (fcnt + 1) * QSE_SIZEOF(argv[0]));
if (param->argv == QSE_NULL)
{
aio->errnum = QSE_AIO_ENOMEM;
goto oops;
}
}
mcmdptr = mcmd;
for (i = 0; i < fcnt; i++)
{
param->argv[i] = mcmdptr;
while (*mcmdptr != QSE_MT('\0')) mcmdptr++;
mcmdptr++;
}
param->argv[i] = QSE_NULL;
}
if (mcmd && mcmd != (qse_mchar_t*)cmd) param->mcmd = mcmd;
return 0;
oops:
if (mcmd && mcmd != cmd) QSE_MMGR_FREE (aio->mmgr, mcmd);
return -1;
}
static pid_t standard_fork_and_exec (qse_aio_t* aio, int pfds[], int flags, param_t* param)
{
pid_t pid;
pid = fork ();
if (pid == -1)
{
aio->errnum = qse_aio_syserrtoerrnum(errno);
return -1;
}
if (pid == 0)
{
/* slave process */
qse_aio_syshnd_t devnull = QSE_AIO_SYSHND_INVALID;
/* TODO: close all uneeded fds */
if (flags & QSE_AIO_DEV_PRO_WRITEIN)
{
/* slave should read */
close (pfds[1]);
pfds[1] = QSE_AIO_SYSHND_INVALID;
/* let the pipe be standard input */
if (dup2 (pfds[0], 0) <= -1) goto slave_oops;
close (pfds[0]);
pfds[0] = QSE_AIO_SYSHND_INVALID;
}
if (flags & QSE_AIO_DEV_PRO_READOUT)
{
/* slave should write */
close (pfds[2]);
pfds[2] = QSE_AIO_SYSHND_INVALID;
if (dup2(pfds[3], 1) == -1) goto slave_oops;
if (flags & QSE_AIO_DEV_PRO_ERRTOOUT)
{
if (dup2(pfds[3], 2) == -1) goto slave_oops;
}
close (pfds[3]);
pfds[3] = QSE_AIO_SYSHND_INVALID;
}
if (flags & QSE_AIO_DEV_PRO_READERR)
{
close (pfds[4]);
pfds[4] = QSE_AIO_SYSHND_INVALID;
if (dup2(pfds[5], 2) == -1) goto slave_oops;
if (flags & QSE_AIO_DEV_PRO_OUTTOERR)
{
if (dup2(pfds[5], 1) == -1) goto slave_oops;
}
close (pfds[5]);
pfds[5] = QSE_AIO_SYSHND_INVALID;
}
if ((flags & QSE_AIO_DEV_PRO_INTONUL) ||
(flags & QSE_AIO_DEV_PRO_OUTTONUL) ||
(flags & QSE_AIO_DEV_PRO_ERRTONUL))
{
#if defined(O_LARGEFILE)
devnull = open (QSE_MT("/dev/null"), O_RDWR | O_LARGEFILE, 0);
#else
devnull = open (QSE_MT("/dev/null"), O_RDWR, 0);
#endif
if (devnull == QSE_AIO_SYSHND_INVALID) goto slave_oops;
}
execv (param->argv[0], param->argv);
/* if exec fails, free 'param' parameter which is an inherited pointer */
free_param (aio, param);
slave_oops:
if (devnull != QSE_AIO_SYSHND_INVALID) close(devnull);
_exit (128);
}
/* parent process */
return pid;
}
static int dev_pro_make_master (qse_aio_dev_t* dev, void* ctx)
{
qse_aio_dev_pro_t* rdev = (qse_aio_dev_pro_t*)dev;
qse_aio_dev_pro_make_t* info = (qse_aio_dev_pro_make_t*)ctx;
qse_aio_syshnd_t pfds[6];
int i, minidx = -1, maxidx = -1;
param_t param;
pid_t pid;
if (info->flags & QSE_AIO_DEV_PRO_WRITEIN)
{
if (pipe(&pfds[0]) == -1)
{
dev->aio->errnum = qse_aio_syserrtoerrnum(errno);
goto oops;
}
minidx = 0; maxidx = 1;
}
if (info->flags & QSE_AIO_DEV_PRO_READOUT)
{
if (pipe(&pfds[2]) == -1)
{
dev->aio->errnum = qse_aio_syserrtoerrnum(errno);
goto oops;
}
if (minidx == -1) minidx = 2;
maxidx = 3;
}
if (info->flags & QSE_AIO_DEV_PRO_READERR)
{
if (pipe(&pfds[4]) == -1)
{
dev->aio->errnum = qse_aio_syserrtoerrnum(errno);
goto oops;
}
if (minidx == -1) minidx = 4;
maxidx = 5;
}
if (maxidx == -1)
{
dev->aio->errnum = QSE_AIO_EINVAL;
goto oops;
}
if (make_param (rdev->aio, info->cmd, info->flags, &param) <= -1) goto oops;
/* TODO: more advanced fork and exec .. */
pid = standard_fork_and_exec (rdev->aio, pfds, info->flags, &param);
if (pid <= -1)
{
free_param (rdev->aio, &param);
goto oops;
}
free_param (rdev->aio, &param);
rdev->child_pid = pid;
/* this is the parent process */
if (info->flags & QSE_AIO_DEV_PRO_WRITEIN)
{
/*
* 012345
* rw----
* X
* WRITE => 1
*/
close (pfds[0]);
pfds[0] = QSE_AIO_SYSHND_INVALID;
if (qse_aio_makesyshndasync (dev->aio, pfds[1]) <= -1) goto oops;
}
if (info->flags & QSE_AIO_DEV_PRO_READOUT)
{
/*
* 012345
* --rw--
* X
* READ => 2
*/
close (pfds[3]);
pfds[3] = QSE_AIO_SYSHND_INVALID;
if (qse_aio_makesyshndasync (dev->aio, pfds[2]) <= -1) goto oops;
}
if (info->flags & QSE_AIO_DEV_PRO_READERR)
{
/*
* 012345
* ----rw
* X
* READ => 4
*/
close (pfds[5]);
pfds[5] = QSE_AIO_SYSHND_INVALID;
if (qse_aio_makesyshndasync (dev->aio, pfds[4]) <= -1) goto oops;
}
if (pfds[1] != QSE_AIO_SYSHND_INVALID)
{
/* hand over pfds[2] to the first slave device */
slave_info_t si;
si.mi = info;
si.pfd = pfds[1];
si.dev_capa = QSE_AIO_DEV_CAPA_OUT | QSE_AIO_DEV_CAPA_OUT_QUEUED | QSE_AIO_DEV_CAPA_STREAM;
si.id = QSE_AIO_DEV_PRO_IN;
rdev->slave[QSE_AIO_DEV_PRO_IN] = make_slave (dev->aio, &si);
if (!rdev->slave[QSE_AIO_DEV_PRO_IN]) goto oops;
pfds[1] = QSE_AIO_SYSHND_INVALID;
rdev->slave_count++;
}
if (pfds[2] != QSE_AIO_SYSHND_INVALID)
{
/* hand over pfds[2] to the first slave device */
slave_info_t si;
si.mi = info;
si.pfd = pfds[2];
si.dev_capa = QSE_AIO_DEV_CAPA_IN | QSE_AIO_DEV_CAPA_STREAM;
si.id = QSE_AIO_DEV_PRO_OUT;
rdev->slave[QSE_AIO_DEV_PRO_OUT] = make_slave (dev->aio, &si);
if (!rdev->slave[QSE_AIO_DEV_PRO_OUT]) goto oops;
pfds[2] = QSE_AIO_SYSHND_INVALID;
rdev->slave_count++;
}
if (pfds[4] != QSE_AIO_SYSHND_INVALID)
{
/* hand over pfds[4] to the second slave device */
slave_info_t si;
si.mi = info;
si.pfd = pfds[4];
si.dev_capa = QSE_AIO_DEV_CAPA_IN | QSE_AIO_DEV_CAPA_STREAM;
si.id = QSE_AIO_DEV_PRO_ERR;
rdev->slave[QSE_AIO_DEV_PRO_ERR] = make_slave (dev->aio, &si);
if (!rdev->slave[QSE_AIO_DEV_PRO_ERR]) goto oops;
pfds[4] = QSE_AIO_SYSHND_INVALID;
rdev->slave_count++;
}
for (i = 0; i < QSE_COUNTOF(rdev->slave); i++)
{
if (rdev->slave[i]) rdev->slave[i]->master = rdev;
}
rdev->dev_capa = QSE_AIO_DEV_CAPA_VIRTUAL; /* the master device doesn't perform I/O */
rdev->flags = info->flags;
rdev->on_read = info->on_read;
rdev->on_write = info->on_write;
rdev->on_close = info->on_close;
return 0;
oops:
for (i = minidx; i < maxidx; i++)
{
if (pfds[i] != QSE_AIO_SYSHND_INVALID) close (pfds[i]);
}
if (rdev->mcmd)
{
QSE_MMGR_FREE (rdev->aio->mmgr, rdev->mcmd);
free_param (rdev->aio, &param);
}
for (i = QSE_COUNTOF(rdev->slave); i > 0; )
{
i--;
if (rdev->slave[i])
{
qse_aio_killdev (rdev->aio, (qse_aio_dev_t*)rdev->slave[i]);
rdev->slave[i] = QSE_NULL;
}
}
rdev->slave_count = 0;
return -1;
}
static int dev_pro_make_slave (qse_aio_dev_t* dev, void* ctx)
{
qse_aio_dev_pro_slave_t* rdev = (qse_aio_dev_pro_slave_t*)dev;
slave_info_t* si = (slave_info_t*)ctx;
rdev->dev_capa = si->dev_capa;
rdev->id = si->id;
rdev->pfd = si->pfd;
/* keep rdev->master to QSE_NULL. it's set to the right master
* device in dev_pro_make() */
return 0;
}
static int dev_pro_kill_master (qse_aio_dev_t* dev, int force)
{
qse_aio_dev_pro_t* rdev = (qse_aio_dev_pro_t*)dev;
int i, status;
pid_t wpid;
if (rdev->slave_count > 0)
{
for (i = 0; i < QSE_COUNTOF(rdev->slave); i++)
{
if (rdev->slave[i])
{
qse_aio_dev_pro_slave_t* sdev = rdev->slave[i];
/* nullify the pointer to the slave device
* before calling qse_aio_killdev() on the slave device.
* the slave device can check this pointer to tell from
* self-initiated termination or master-driven termination */
rdev->slave[i] = QSE_NULL;
qse_aio_killdev (rdev->aio, (qse_aio_dev_t*)sdev);
}
}
}
if (rdev->child_pid >= 0)
{
if (!(rdev->flags & QSE_AIO_DEV_PRO_FORGET_CHILD))
{
int killed = 0;
await_child:
wpid = waitpid (rdev->child_pid, &status, WNOHANG);
if (wpid == 0)
{
if (force && !killed)
{
if (!(rdev->flags & QSE_AIO_DEV_PRO_FORGET_DIEHARD_CHILD))
{
kill (rdev->child_pid, SIGKILL);
killed = 1;
goto await_child;
}
}
else
{
/* child process is still alive */
rdev->aio->errnum = QSE_AIO_EAGAIN;
return -1; /* call me again */
}
}
/* wpid == rdev->child_pid => full success
* wpid == -1 && errno == ECHILD => no such process. it's waitpid()'ed by some other part of the program?
* other cases ==> can't really handle properly. forget it by returning success
* no need not worry about EINTR because errno can't have the value when WNOHANG is set.
*/
}
printf (">>>>>>>>>>>>>>>>>>> REAPED CHILD %d\n", (int)rdev->child_pid);
rdev->child_pid = -1;
}
if (rdev->on_close) rdev->on_close (rdev, QSE_AIO_DEV_PRO_MASTER);
return 0;
}
static int dev_pro_kill_slave (qse_aio_dev_t* dev, int force)
{
qse_aio_dev_pro_slave_t* rdev = (qse_aio_dev_pro_slave_t*)dev;
if (rdev->master)
{
qse_aio_dev_pro_t* master;
master = rdev->master;
rdev->master = QSE_NULL;
/* indicate EOF */
if (master->on_close) master->on_close (master, rdev->id);
QSE_ASSERT (master->slave_count > 0);
master->slave_count--;
if (master->slave[rdev->id])
{
/* this call is started by the slave device itself.
* if this is the last slave, kill the master also */
if (master->slave_count <= 0)
{
qse_aio_killdev (rdev->aio, (qse_aio_dev_t*)master);
/* the master pointer is not valid from this point onwards
* as the actual master device object is freed in qse_aio_killdev() */
}
}
else
{
/* this call is initiated by this slave device itself.
* if it were by the master device, it would be QSE_NULL as
* nullified by the dev_pro_kill() */
master->slave[rdev->id] = QSE_NULL;
}
}
if (rdev->pfd != QSE_AIO_SYSHND_INVALID)
{
close (rdev->pfd);
rdev->pfd = QSE_AIO_SYSHND_INVALID;
}
return 0;
}
static int dev_pro_read_slave (qse_aio_dev_t* dev, void* buf, qse_aio_iolen_t* len, qse_aio_devaddr_t* srcaddr)
{
qse_aio_dev_pro_slave_t* pro = (qse_aio_dev_pro_slave_t*)dev;
ssize_t x;
x = read (pro->pfd, buf, *len);
if (x <= -1)
{
if (errno == EINPROGRESS || errno == EWOULDBLOCK || errno == EAGAIN) return 0; /* no data available */
if (errno == EINTR) return 0;
pro->aio->errnum = qse_aio_syserrtoerrnum(errno);
return -1;
}
*len = x;
return 1;
}
static int dev_pro_write_slave (qse_aio_dev_t* dev, const void* data, qse_aio_iolen_t* len, const qse_aio_devaddr_t* dstaddr)
{
qse_aio_dev_pro_slave_t* pro = (qse_aio_dev_pro_slave_t*)dev;
ssize_t x;
x = write (pro->pfd, data, *len);
if (x <= -1)
{
if (errno == EINPROGRESS || errno == EWOULDBLOCK || errno == EAGAIN) return 0; /* no data can be written */
if (errno == EINTR) return 0;
pro->aio->errnum = qse_aio_syserrtoerrnum(errno);
return -1;
}
*len = x;
return 1;
}
static qse_aio_syshnd_t dev_pro_getsyshnd (qse_aio_dev_t* dev)
{
return QSE_AIO_SYSHND_INVALID;
}
static qse_aio_syshnd_t dev_pro_getsyshnd_slave (qse_aio_dev_t* dev)
{
qse_aio_dev_pro_slave_t* pro = (qse_aio_dev_pro_slave_t*)dev;
return (qse_aio_syshnd_t)pro->pfd;
}
static int dev_pro_ioctl (qse_aio_dev_t* dev, int cmd, void* arg)
{
qse_aio_dev_pro_t* rdev = (qse_aio_dev_pro_t*)dev;
switch (cmd)
{
case QSE_AIO_DEV_PRO_CLOSE:
{
qse_aio_dev_pro_sid_t sid = *(qse_aio_dev_pro_sid_t*)arg;
if (sid < QSE_AIO_DEV_PRO_IN || sid > QSE_AIO_DEV_PRO_ERR)
{
rdev->aio->errnum = QSE_AIO_EINVAL;
return -1;
}
if (rdev->slave[sid])
{
/* unlike dev_pro_kill_master(), i don't nullify rdev->slave[sid].
* so i treat the closing ioctl as if it's a kill request
* initiated by the slave device itself. */
qse_aio_killdev (rdev->aio, (qse_aio_dev_t*)rdev->slave[sid]);
}
return 0;
}
case QSE_AIO_DEV_PRO_KILL_CHILD:
if (rdev->child_pid >= 0)
{
if (kill (rdev->child_pid, SIGKILL) == -1)
{
rdev->aio->errnum = qse_aio_syserrtoerrnum(errno);
return -1;
}
}
return 0;
default:
dev->aio->errnum = QSE_AIO_EINVAL;
return -1;
}
}
static qse_aio_dev_mth_t dev_pro_methods =
{
dev_pro_make_master,
dev_pro_kill_master,
dev_pro_getsyshnd,
QSE_NULL,
QSE_NULL,
dev_pro_ioctl
};
static qse_aio_dev_mth_t dev_pro_methods_slave =
{
dev_pro_make_slave,
dev_pro_kill_slave,
dev_pro_getsyshnd_slave,
dev_pro_read_slave,
dev_pro_write_slave,
dev_pro_ioctl
};
/* ========================================================================= */
static int pro_ready (qse_aio_dev_t* dev, int events)
{
/* virtual device. no I/O */
dev->aio->errnum = QSE_AIO_EINTERN;
return -1;
}
static int pro_on_read (qse_aio_dev_t* dev, const void* data, qse_aio_iolen_t len, const qse_aio_devaddr_t* srcaddr)
{
/* virtual device. no I/O */
dev->aio->errnum = QSE_AIO_EINTERN;
return -1;
}
static int pro_on_write (qse_aio_dev_t* dev, qse_aio_iolen_t wrlen, void* wrctx, const qse_aio_devaddr_t* dstaddr)
{
/* virtual device. no I/O */
dev->aio->errnum = QSE_AIO_EINTERN;
return -1;
}
static qse_aio_dev_evcb_t dev_pro_event_callbacks =
{
pro_ready,
pro_on_read,
pro_on_write
};
/* ========================================================================= */
static int pro_ready_slave (qse_aio_dev_t* dev, int events)
{
qse_aio_dev_pro_t* pro = (qse_aio_dev_pro_t*)dev;
if (events & QSE_AIO_DEV_EVENT_ERR)
{
pro->aio->errnum = QSE_AIO_EDEVERR;
return -1;
}
if (events & QSE_AIO_DEV_EVENT_HUP)
{
if (events & (QSE_AIO_DEV_EVENT_PRI | QSE_AIO_DEV_EVENT_IN | QSE_AIO_DEV_EVENT_OUT))
{
/* probably half-open? */
return 1;
}
pro->aio->errnum = QSE_AIO_EDEVHUP;
return -1;
}
return 1; /* the device is ok. carry on reading or writing */
}
static int pro_on_read_slave_out (qse_aio_dev_t* dev, const void* data, qse_aio_iolen_t len, const qse_aio_devaddr_t* srcaddr)
{
qse_aio_dev_pro_slave_t* pro = (qse_aio_dev_pro_slave_t*)dev;
return pro->master->on_read (pro->master, data, len, QSE_AIO_DEV_PRO_OUT);
}
static int pro_on_read_slave_err (qse_aio_dev_t* dev, const void* data, qse_aio_iolen_t len, const qse_aio_devaddr_t* srcaddr)
{
qse_aio_dev_pro_slave_t* pro = (qse_aio_dev_pro_slave_t*)dev;
return pro->master->on_read (pro->master, data, len, QSE_AIO_DEV_PRO_ERR);
}
static int pro_on_write_slave (qse_aio_dev_t* dev, qse_aio_iolen_t wrlen, void* wrctx, const qse_aio_devaddr_t* dstaddr)
{
qse_aio_dev_pro_slave_t* pro = (qse_aio_dev_pro_slave_t*)dev;
return pro->master->on_write (pro->master, wrlen, wrctx);
}
static qse_aio_dev_evcb_t dev_pro_event_callbacks_slave_in =
{
pro_ready_slave,
QSE_NULL,
pro_on_write_slave
};
static qse_aio_dev_evcb_t dev_pro_event_callbacks_slave_out =
{
pro_ready_slave,
pro_on_read_slave_out,
QSE_NULL
};
static qse_aio_dev_evcb_t dev_pro_event_callbacks_slave_err =
{
pro_ready_slave,
pro_on_read_slave_err,
QSE_NULL
};
/* ========================================================================= */
static qse_aio_dev_pro_slave_t* make_slave (qse_aio_t* aio, slave_info_t* si)
{
switch (si->id)
{
case QSE_AIO_DEV_PRO_IN:
return (qse_aio_dev_pro_slave_t*)qse_aio_makedev (
aio, QSE_SIZEOF(qse_aio_dev_pro_t),
&dev_pro_methods_slave, &dev_pro_event_callbacks_slave_in, si);
case QSE_AIO_DEV_PRO_OUT:
return (qse_aio_dev_pro_slave_t*)qse_aio_makedev (
aio, QSE_SIZEOF(qse_aio_dev_pro_t),
&dev_pro_methods_slave, &dev_pro_event_callbacks_slave_out, si);
case QSE_AIO_DEV_PRO_ERR:
return (qse_aio_dev_pro_slave_t*)qse_aio_makedev (
aio, QSE_SIZEOF(qse_aio_dev_pro_t),
&dev_pro_methods_slave, &dev_pro_event_callbacks_slave_err, si);
default:
aio->errnum = QSE_AIO_EINVAL;
return QSE_NULL;
}
}
qse_aio_dev_pro_t* qse_aio_dev_pro_make (qse_aio_t* aio, qse_size_t xtnsize, const qse_aio_dev_pro_make_t* info)
{
return (qse_aio_dev_pro_t*)qse_aio_makedev (
aio, QSE_SIZEOF(qse_aio_dev_pro_t) + xtnsize,
&dev_pro_methods, &dev_pro_event_callbacks, (void*)info);
}
void qse_aio_dev_pro_kill (qse_aio_dev_pro_t* dev)
{
qse_aio_killdev (dev->aio, (qse_aio_dev_t*)dev);
}
int qse_aio_dev_pro_write (qse_aio_dev_pro_t* dev, const void* data, qse_aio_iolen_t dlen, void* wrctx)
{
if (dev->slave[0])
{
return qse_aio_dev_write ((qse_aio_dev_t*)dev->slave[0], data, dlen, wrctx, QSE_NULL);
}
else
{
dev->aio->errnum = QSE_AIO_ENOCAPA; /* TODO: is it the right error number? */
return -1;
}
}
int qse_aio_dev_pro_timedwrite (qse_aio_dev_pro_t* dev, const void* data, qse_aio_iolen_t dlen, const qse_ntime_t* tmout, void* wrctx)
{
if (dev->slave[0])
{
return qse_aio_dev_timedwrite ((qse_aio_dev_t*)dev->slave[0], data, dlen, tmout, wrctx, QSE_NULL);
}
else
{
dev->aio->errnum = QSE_AIO_ENOCAPA; /* TODO: is it the right error number? */
return -1;
}
}
int qse_aio_dev_pro_close (qse_aio_dev_pro_t* dev, qse_aio_dev_pro_sid_t sid)
{
return qse_aio_dev_ioctl ((qse_aio_dev_t*)dev, QSE_AIO_DEV_PRO_CLOSE, &sid);
}
int qse_aio_dev_pro_killchild (qse_aio_dev_pro_t* dev)
{
return qse_aio_dev_ioctl ((qse_aio_dev_t*)dev, QSE_AIO_DEV_PRO_KILL_CHILD, QSE_NULL);
}
#if 0
qse_aio_dev_pro_t* qse_aio_dev_pro_getdev (qse_aio_dev_pro_t* pro, qse_aio_dev_pro_sid_t sid)
{
switch (type)
{
case QSE_AIO_DEV_PRO_IN:
return XXX;
case QSE_AIO_DEV_PRO_OUT:
return XXX;
case QSE_AIO_DEV_PRO_ERR:
return XXX;
}
pro->dev->aio = QSE_AIO_EINVAL;
return QSE_NULL;
}
#endif

115
qse/lib/io/aio-prv.h Normal file
View File

@ -0,0 +1,115 @@
/*
* $Id$
*
Copyright (c) 2006-2016 Chung, Hyung-Hwan. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAfRRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#ifndef _QSE_LIB_IO_AIO_PRV_H_
#define _QSE_LIB_IO_AIO_PRV_H_
#include <qse/io/aio.h>
#include "../cmn/mem.h"
typedef struct qse_aio_mux_t qse_aio_mux_t;
struct qse_aio_t
{
qse_mmgr_t* mmgr;
qse_aio_errnum_t errnum;
qse_aio_stopreq_t stopreq; /* stop request to abort qse_aio_loop() */
struct
{
qse_aio_dev_t* head;
qse_aio_dev_t* tail;
} actdev; /* active devices */
struct
{
qse_aio_dev_t* head;
qse_aio_dev_t* tail;
} hltdev; /* halted devices */
struct
{
qse_aio_dev_t* head;
qse_aio_dev_t* tail;
} zmbdev; /* zombie devices */
qse_uint8_t bigbuf[65535]; /* TODO: make this dynamic depending on devices added. device may indicate a buffer size required??? */
unsigned int renew_watch: 1;
unsigned int in_exec: 1;
struct
{
qse_size_t capa;
qse_size_t size;
qse_aio_tmrjob_t* jobs;
} tmr;
/* platform specific fields below */
#if defined(_WIN32)
HANDLE iocp;
#else
qse_aio_mux_t* mux;
#endif
};
#ifdef __cplusplus
extern "C" {
#endif
int qse_aio_makesyshndasync (
qse_aio_t* aio,
qse_aio_syshnd_t hnd
);
qse_aio_errnum_t qse_aio_syserrtoerrnum (
int no
);
void qse_aio_cleartmrjobs (
qse_aio_t* aio
);
void qse_aio_firetmrjobs (
qse_aio_t* aio,
const qse_ntime_t* tmbase,
qse_size_t* firecnt
);
int qse_aio_gettmrtmout (
qse_aio_t* aio,
const qse_ntime_t* tmbase,
qse_ntime_t* tmout
);
#ifdef __cplusplus
}
#endif
#endif

1704
qse/lib/io/aio-sck.c Normal file

File diff suppressed because it is too large Load Diff

234
qse/lib/io/aio-tmr.c Normal file
View File

@ -0,0 +1,234 @@
/*
* $Id$
*
Copyright (c) 2006-2016 Chung, Hyung-Hwan. All rights reserved.
Redistribution and use in source and binary forms, with or without
modification, are permitted provided that the following conditions
are met:
1. Redistributions of source code must retain the above copyright
notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright
notice, this list of conditions and the following disclaimer in the
documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE AUTHOR "AS IS" AND ANY EXPRESS OR
IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WAfRRANTIES
OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include "aio-prv.h"
#define HEAP_PARENT(x) (((x) - 1) / 2)
#define HEAP_LEFT(x) ((x) * 2 + 1)
#define HEAP_RIGHT(x) ((x) * 2 + 2)
#define YOUNGER_THAN(x,y) (qse_cmptime(&(x)->when, &(y)->when) < 0)
void qse_aio_cleartmrjobs (qse_aio_t* aio)
{
while (aio->tmr.size > 0) qse_aio_deltmrjob (aio, 0);
}
static qse_aio_tmridx_t sift_up (qse_aio_t* aio, qse_aio_tmridx_t index, int notify)
{
qse_aio_tmridx_t parent;
parent = HEAP_PARENT(index);
if (index > 0 && YOUNGER_THAN(&aio->tmr.jobs[index], &aio->tmr.jobs[parent]))
{
qse_aio_tmrjob_t item;
item = aio->tmr.jobs[index];
do
{
/* move down the parent to my current position */
aio->tmr.jobs[index] = aio->tmr.jobs[parent];
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = index;
/* traverse up */
index = parent;
parent = HEAP_PARENT(parent);
}
while (index > 0 && YOUNGER_THAN(&item, &aio->tmr.jobs[parent]));
aio->tmr.jobs[index] = item;
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = index;
}
return index;
}
static qse_aio_tmridx_t sift_down (qse_aio_t* aio, qse_aio_tmridx_t index, int notify)
{
qse_size_t base = aio->tmr.size / 2;
if (index < base) /* at least 1 child is under the 'index' position */
{
qse_aio_tmrjob_t item;
item = aio->tmr.jobs[index];
do
{
qse_aio_tmridx_t left, right, younger;
left = HEAP_LEFT(index);
right = HEAP_RIGHT(index);
if (right < aio->tmr.size && YOUNGER_THAN(&aio->tmr.jobs[right], &aio->tmr.jobs[left]))
{
younger = right;
}
else
{
younger = left;
}
if (YOUNGER_THAN(&item, &aio->tmr.jobs[younger])) break;
aio->tmr.jobs[index] = aio->tmr.jobs[younger];
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = index;
index = younger;
}
while (index < base);
aio->tmr.jobs[index] = item;
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = index;
}
return index;
}
void qse_aio_deltmrjob (qse_aio_t* aio, qse_aio_tmridx_t index)
{
qse_aio_tmrjob_t item;
QSE_ASSERT (index < aio->tmr.size);
item = aio->tmr.jobs[index];
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = QSE_AIO_TMRIDX_INVALID;
aio->tmr.size = aio->tmr.size - 1;
if (aio->tmr.size > 0 && index != aio->tmr.size)
{
aio->tmr.jobs[index] = aio->tmr.jobs[aio->tmr.size];
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = index;
YOUNGER_THAN(&aio->tmr.jobs[index], &item)? sift_up(aio, index, 1): sift_down(aio, index, 1);
}
}
qse_aio_tmridx_t qse_aio_instmrjob (qse_aio_t* aio, const qse_aio_tmrjob_t* job)
{
qse_aio_tmridx_t index = aio->tmr.size;
if (index >= aio->tmr.capa)
{
qse_aio_tmrjob_t* tmp;
qse_size_t new_capa;
QSE_ASSERT (aio->tmr.capa >= 1);
new_capa = aio->tmr.capa * 2;
tmp = (qse_aio_tmrjob_t*)QSE_MMGR_REALLOC (aio->mmgr, aio->tmr.jobs, new_capa * QSE_SIZEOF(*tmp));
if (tmp == QSE_NULL)
{
aio->errnum = QSE_AIO_ENOMEM;
return QSE_AIO_TMRIDX_INVALID;
}
aio->tmr.jobs = tmp;
aio->tmr.capa = new_capa;
}
aio->tmr.size = aio->tmr.size + 1;
aio->tmr.jobs[index] = *job;
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = index;
return sift_up (aio, index, 0);
}
qse_aio_tmridx_t qse_aio_updtmrjob (qse_aio_t* aio, qse_aio_tmridx_t index, const qse_aio_tmrjob_t* job)
{
qse_aio_tmrjob_t item;
item = aio->tmr.jobs[index];
aio->tmr.jobs[index] = *job;
if (aio->tmr.jobs[index].idxptr) *aio->tmr.jobs[index].idxptr = index;
return YOUNGER_THAN(job, &item)? sift_up (aio, index, 0): sift_down (aio, index, 0);
}
void qse_aio_firetmrjobs (qse_aio_t* aio, const qse_ntime_t* tm, qse_size_t* firecnt)
{
qse_ntime_t now;
qse_aio_tmrjob_t tmrjob;
qse_size_t count = 0;
/* if the current time is not specified, get it from the system */
if (tm) now = *tm;
else qse_gettime (&now);
while (aio->tmr.size > 0)
{
if (qse_cmptime(&aio->tmr.jobs[0].when, &now) > 0) break;
tmrjob = aio->tmr.jobs[0]; /* copy the scheduled job */
qse_aio_deltmrjob (aio, 0); /* deschedule the job */
count++;
tmrjob.handler (aio, &now, &tmrjob); /* then fire the job */
}
if (firecnt) *firecnt = count;
}
int qse_aio_gettmrtmout (qse_aio_t* aio, const qse_ntime_t* tm, qse_ntime_t* tmout)
{
qse_ntime_t now;
/* time-out can't be calculated when there's no job scheduled */
if (aio->tmr.size <= 0)
{
aio->errnum = QSE_AIO_ENOENT;
return -1;
}
/* if the current time is not specified, get it from the system */
if (tm) now = *tm;
else qse_gettime (&now);
qse_subtime (&aio->tmr.jobs[0].when, &now, tmout);
if (tmout->sec < 0) qse_cleartime (tmout);
return 0;
}
qse_aio_tmrjob_t* qse_aio_gettmrjob (qse_aio_t* aio, qse_aio_tmridx_t index)
{
if (index < 0 || index >= aio->tmr.size)
{
aio->errnum = QSE_AIO_ENOENT;
return QSE_NULL;
}
return &aio->tmr.jobs[index];
}
int qse_aio_gettmrjobdeadline (qse_aio_t* aio, qse_aio_tmridx_t index, qse_ntime_t* deadline)
{
if (index < 0 || index >= aio->tmr.size)
{
aio->errnum = QSE_AIO_ENOENT;
return -1;
}
*deadline = aio->tmr.jobs[index].when;
return 0;
}

1468
qse/lib/io/aio.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -24,13 +24,13 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <qse/cmn/fio.h>
#include <qse/io/fio.h>
#include <qse/cmn/str.h>
#include <qse/cmn/fmt.h>
#include <qse/cmn/alg.h>
#include <qse/cmn/time.h>
#include <qse/cmn/mbwc.h>
#include "mem.h"
#include "../cmn/mem.h"
#if defined(_WIN32)
# include <windows.h>
@ -54,7 +54,7 @@
# include <starlet.h>
# include <rms.h>
#else
# include "syscall.h"
# include "../cmn/syscall.h"
#endif
/* internal status codes */
@ -65,7 +65,7 @@ enum
STATUS_WIN32_STDIN = (1 << 2)
};
#include "syserr.h"
#include "../cmn/syserr.h"
IMPLEMENT_SYSERR_TO_ERRNUM (fio, FIO)
#if defined(_WIN32)

View File

@ -24,9 +24,9 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <qse/cmn/nwio.h>
#include <qse/io/nwio.h>
#include <qse/cmn/time.h>
#include "mem.h"
#include "../cmn/mem.h"
#if defined(_WIN32)
# include <winsock2.h>
@ -58,7 +58,7 @@
# undef SO_RCVTIMEO
# undef SO_SNDTIMEO
#elif defined(HAVE_T_CONNECT) && !defined(HAVE_CONNECT) && defined(HAVE_TIUSER_H)
# include "syscall.h"
# include "../cmn/syscall.h"
# include <tiuser.h>
# include <sys/socket.h>
# include <netinet/in.h>
@ -78,7 +78,7 @@
extern int t_rcv(int fd, char* buf, unsigned int nbytes, int* flags);
#else
# include "syscall.h"
# include "../cmn/syscall.h"
# include <sys/socket.h>
# include <netinet/in.h>
# define USE_SELECT

View File

@ -24,9 +24,9 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <qse/cmn/pio.h>
#include <qse/io/pio.h>
#include <qse/cmn/mbwc.h>
#include "mem.h"
#include "../cmn/mem.h"
#if defined(_WIN32)
# include <windows.h>
@ -40,7 +40,7 @@
# include <io.h>
# include <errno.h>
#else
# include "syscall.h"
# include "../cmn/syscall.h"
# if defined(HAVE_SPAWN_H)
# include <spawn.h>
# endif
@ -54,7 +54,7 @@ static qse_ssize_t pio_input (
static qse_ssize_t pio_output (
qse_tio_t* tio, qse_tio_cmd_t cmd, void* buf, qse_size_t size);
#include "syserr.h"
#include "../cmn/syserr.h"
IMPLEMENT_SYSERR_TO_ERRNUM (pio, PIO)
static qse_pio_errnum_t tio_errnum_to_pio_errnum (qse_tio_t* tio)

View File

@ -24,10 +24,10 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
#include <qse/cmn/mbwc.h>
#include "mem.h"
#include "fmt.h"
#include "../cmn/mem.h"
#include "../cmn/fmt.h"
#if defined(_WIN32)
# include <windows.h> /* for the UGLY hack */
@ -36,7 +36,7 @@
#elif defined(__DOS__)
/* nothing */
#else
# include "syscall.h"
# include "../cmn/syscall.h"
#endif
/* internal status codes */

View File

@ -24,9 +24,9 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <qse/cmn/tio.h>
#include <qse/io/tio.h>
#include <qse/cmn/mbwc.h>
#include "mem.h"
#include "../cmn/mem.h"
#define STATUS_OUTPUT_DYNBUF (1 << 0)
#define STATUS_INPUT_DYNBUF (1 << 1)

View File

@ -6,8 +6,8 @@ AM_CPPFLAGS = \
lib_LTLIBRARIES = libqsesed.la
libqsesed_la_SOURCES = sed.c err.c sed.h std.c
libqsesed_la_LDFLAGS = -L../cmn -version-info 1:0:0 -no-undefined
libqsesed_la_LIBADD = -lqsecmn
libqsesed_la_LDFLAGS = -L../cmn -L../io -version-info 1:0:0 -no-undefined
libqsesed_la_LIBADD = -lqsecmn -lqseio
if ENABLE_CXX
lib_LTLIBRARIES += libqsesedxx.la

View File

@ -407,8 +407,8 @@ AM_CPPFLAGS = \
lib_LTLIBRARIES = libqsesed.la $(am__append_1)
libqsesed_la_SOURCES = sed.c err.c sed.h std.c
libqsesed_la_LDFLAGS = -L../cmn -version-info 1:0:0 -no-undefined
libqsesed_la_LIBADD = -lqsecmn
libqsesed_la_LDFLAGS = -L../cmn -L../io -version-info 1:0:0 -no-undefined
libqsesed_la_LIBADD = -lqsecmn -lqseio
@ENABLE_CXX_TRUE@libqsesedxx_la_SOURCES = Sed.cpp StdSed.cpp
@ENABLE_CXX_TRUE@libqsesedxx_la_LDFLAGS = -L. -L../cmn -version-info 1:0:0 -no-undefined
@ENABLE_CXX_TRUE@libqsesedxx_la_LIBADD = -lqsesed -lqsecmnxx -lqsecmn

View File

@ -25,7 +25,7 @@
*/
#include <qse/sed/Sed.hpp>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
#include "../cmn/mem.h"
#include "sed.h"

View File

@ -25,8 +25,8 @@
*/
#include <qse/sed/StdSed.hpp>
#include <qse/cmn/fio.h>
#include <qse/cmn/sio.h>
#include <qse/io/fio.h>
#include <qse/io/sio.h>
#include "sed.h"
#include "../cmn/mem.h"

View File

@ -27,7 +27,7 @@
#include "sed.h"
#include <qse/sed/stdsed.h>
#include <qse/cmn/str.h>
#include <qse/cmn/sio.h>
#include <qse/io/sio.h>
#include "../cmn/mem.h"
typedef struct xtn_in_t xtn_in_t;

View File

@ -11,6 +11,7 @@ libqsesys_la_SOURCES = \
mtx.c \
mux.c \
rwl.c \
task.c \
thr.c \
thr.h
libqsesys_la_CFLAGS = $(PTHREAD_CFLAGS)

View File

@ -130,7 +130,7 @@ am__DEPENDENCIES_1 =
libqsesys_la_DEPENDENCIES = $(am__DEPENDENCIES_1)
am_libqsesys_la_OBJECTS = libqsesys_la-cnd.lo libqsesys_la-intr.lo \
libqsesys_la-mtx.lo libqsesys_la-mux.lo libqsesys_la-rwl.lo \
libqsesys_la-thr.lo
libqsesys_la-task.lo libqsesys_la-thr.lo
libqsesys_la_OBJECTS = $(am_libqsesys_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@ -416,6 +416,7 @@ libqsesys_la_SOURCES = \
mtx.c \
mux.c \
rwl.c \
task.c \
thr.c \
thr.h
@ -517,6 +518,7 @@ distclean-compile:
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqsesys_la-mtx.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqsesys_la-mux.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqsesys_la-rwl.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqsesys_la-task.Plo@am__quote@
@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libqsesys_la-thr.Plo@am__quote@
.c.o:
@ -575,6 +577,13 @@ libqsesys_la-rwl.lo: rwl.c
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqsesys_la_CFLAGS) $(CFLAGS) -c -o libqsesys_la-rwl.lo `test -f 'rwl.c' || echo '$(srcdir)/'`rwl.c
libqsesys_la-task.lo: task.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqsesys_la_CFLAGS) $(CFLAGS) -MT libqsesys_la-task.lo -MD -MP -MF $(DEPDIR)/libqsesys_la-task.Tpo -c -o libqsesys_la-task.lo `test -f 'task.c' || echo '$(srcdir)/'`task.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqsesys_la-task.Tpo $(DEPDIR)/libqsesys_la-task.Plo
@AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='task.c' object='libqsesys_la-task.lo' libtool=yes @AMDEPBACKSLASH@
@AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
@am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqsesys_la_CFLAGS) $(CFLAGS) -c -o libqsesys_la-task.lo `test -f 'task.c' || echo '$(srcdir)/'`task.c
libqsesys_la-thr.lo: thr.c
@am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libqsesys_la_CFLAGS) $(CFLAGS) -MT libqsesys_la-thr.lo -MD -MP -MF $(DEPDIR)/libqsesys_la-thr.Tpo -c -o libqsesys_la-thr.lo `test -f 'thr.c' || echo '$(srcdir)/'`thr.c
@am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libqsesys_la-thr.Tpo $(DEPDIR)/libqsesys_la-thr.Plo

View File

@ -24,8 +24,8 @@
THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
#include <qse/cmn/task.h>
#include "mem.h"
#include <qse/sys/task.h>
#include "../cmn/mem.h"
#if defined(_WIN64)
# if !defined(_WIN32_WINNT)

View File

@ -6,6 +6,6 @@ AM_CPPFLAGS = \
lib_LTLIBRARIES = libqsexli.la
libqsexli_la_SOURCES = xli.h xli.c err.c read.c read-ini.c write.c write-ini.c std.c
libqsexli_la_LDFLAGS = -L../cmn -version-info 1:0:0 -no-undefined
libqsexli_la_LIBADD = -lqsecmn
libqsexli_la_LDFLAGS = -L../cmn -L../io -version-info 1:0:0 -no-undefined
libqsexli_la_LIBADD = -lqsecmn -lqseio

View File

@ -379,8 +379,8 @@ AM_CPPFLAGS = \
lib_LTLIBRARIES = libqsexli.la
libqsexli_la_SOURCES = xli.h xli.c err.c read.c read-ini.c write.c write-ini.c std.c
libqsexli_la_LDFLAGS = -L../cmn -version-info 1:0:0 -no-undefined
libqsexli_la_LIBADD = -lqsecmn
libqsexli_la_LDFLAGS = -L../cmn -L../io -version-info 1:0:0 -no-undefined
libqsexli_la_LIBADD = -lqsecmn -lqseio
all: all-am
.SUFFIXES: