Author: jonathan
Date: 2005-08-06 08:40:26 -0400 (Sat, 06 Aug 2005)
New Revision: 255
Added:
vendor/stdutil/current/src/stdtest/stdskl_test.cpp
Modified:
vendor/stdutil/current/src/Makefile.in
vendor/stdutil/current/src/configure
vendor/stdutil/current/src/configure.in
vendor/stdutil/current/src/stddll.c
vendor/stdutil/current/src/stderror.c
vendor/stdutil/current/src/stdfd.c
vendor/stdutil/current/src/stdhash.c
vendor/stdutil/current/src/stdit.c
vendor/stdutil/current/src/stdskl.c
vendor/stdutil/current/src/stdthread.c
vendor/stdutil/current/src/stdutil.c
vendor/stdutil/current/src/stdutil/private/stdarch.h.in
vendor/stdutil/current/src/stdutil/private/stdskl_p.h
vendor/stdutil/current/src/stdutil/private/stdthread_p.h
vendor/stdutil/current/src/stdutil/stddefines.h
vendor/stdutil/current/src/stdutil/stderror.h
vendor/stdutil/current/src/stdutil/stdfd.h
vendor/stdutil/current/src/stdutil/stdit.h
vendor/stdutil/current/src/stdutil/stdthread.h
vendor/stdutil/current/src/stdutil/stdtime.h
vendor/stdutil/current/src/stdutil/stdutil.h
Log:
Import stdutil 1.0.0-beta2 release 8/5/05
Modified: vendor/stdutil/current/src/Makefile.in
===================================================================
--- vendor/stdutil/current/src/Makefile.in 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/Makefile.in 2005-08-06 12:40:26 UTC (rev 255)
@@ -15,7 +15,7 @@
CFLAGS += -DSTDBOUNDS_CHECKS
# other flags
-CFLAGS += -fPIC -Wall -O2 -I ./
+CFLAGS += -fPIC -g -Wall -O2 -I ./
# add pthreads library if necessary
LIBS = @LIBS@
Modified: vendor/stdutil/current/src/configure
===================================================================
--- vendor/stdutil/current/src/configure 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/configure 2005-08-06 12:40:26 UTC (rev 255)
@@ -5725,15 +5725,12 @@
-echo "$as_me:$LINENO: checking checking all necessary integer types are defined" >&5
-echo $ECHO_N "checking checking all necessary integer types are defined... $ECHO_C" >&6
+echo "$as_me:$LINENO: checking checking all necessary integer types are available and appropriate" >&5
+echo $ECHO_N "checking checking all necessary integer types are available and appropriate... $ECHO_C" >&6
if test "$cross_compiling" = yes; then
- { { echo "$as_me:$LINENO: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&5
-echo "$as_me: error: cannot run test program while cross compiling
-See \`config.log' for more details." >&2;}
- { (exit 1); exit 1; }; }
+ { echo "$as_me:$LINENO: WARNING: Unable to check due to cross compiling! ASSUMING NECESSARY INTEGER TYPES EXIST! Please check that stdutil/private/stdarch.h is correct for your target platform!" >&5
+echo "$as_me: WARNING: Unable to check due to cross compiling! ASSUMING NECESSARY INTEGER TYPES EXIST! Please check that stdutil/private/stdarch.h is correct for your target platform!" >&2;}
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -5742,6 +5739,8 @@
cat >>conftest.$ac_ext <<_ACEOF
/* end confdefs.h. */
+#include <stdlib.h>
+
#if (SIZEOF_CHAR != 1)
# error No 1 byte integer type found!
#endif
@@ -5754,7 +5753,7 @@
# error No 4 byte integer type found!
#endif
-#if (!defined(_WIN32) && SIZEOF_LONG != 8 && SIZEOF_LONG_LONG != 8)
+#if (!defined(_MSC_VER) && SIZEOF_LONG != 8 && SIZEOF_LONG_LONG != 8)
# error No 8 byte integeral type found!
#endif
@@ -5762,7 +5761,7 @@
# error No integral type of same size as size_t!
#endif
-int main() { return 0; }
+int main() { exit(0); return 0; }
_ACEOF
@@ -5785,13 +5784,227 @@
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-{ { echo "$as_me:$LINENO: error: one or more required integer sizes not found or of really unexpected size please fix stdutil/private/stdarch.h.in!" >&5
-echo "$as_me: error: one or more required integer sizes not found or of really unexpected size please fix stdutil/private/stdarch.h.in!" >&2;}
+{ { echo "$as_me:$LINENO: error: test failed! Please fix stdutil/private/stdarch.h.in for your platform! Please note platform must have a built in 64b integer type! Alternatively, configure.in could be broken!" >&5
+echo "$as_me: error: test failed! Please fix stdutil/private/stdarch.h.in for your platform! Please note platform must have a built in 64b integer type! Alternatively, configure.in could be broken!" >&2;}
{ (exit 1); exit 1; }; }
fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
+echo "$as_me:$LINENO: checking if NULL pointers are zeroes in memory" >&5
+echo $ECHO_N "checking if NULL pointers are zeroes in memory... $ECHO_C" >&6
+
+if test "$cross_compiling" = yes; then
+ { echo "$as_me:$LINENO: WARNING: Unable to check due to cross compiling! ASSUMING NULL IS ZERO IN MEMORY! To change this please correct stdutil/private/stdarch.h!" >&5
+echo "$as_me: WARNING: Unable to check due to cross compiling! ASSUMING NULL IS ZERO IN MEMORY! To change this please correct stdutil/private/stdarch.h!" >&2;}
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct test_struct {
+ void * r;
+ int y;
+ double x;
+ long z;
+ char str[348];
+ struct test_struct * next;
+ struct test_struct * prev;
+
+} test_struct;
+
+int main()
+{
+ void * voidp = NULL;
+ char * charp = NULL;
+ short * shortp = NULL;
+ int * intp = NULL;
+ long * longp = NULL;
+ float * floatp = NULL;
+ double * doublep = NULL;
+ test_struct * structp = NULL;
+ char zeroes[sizeof(test_struct)];
+
+ memset(zeroes, 0, sizeof(zeroes));
+
+ if (memcmp(&voidp, zeroes, sizeof(voidp)) != 0 ||
+ memcmp(&charp, zeroes, sizeof(charp)) != 0 ||
+ memcmp(&shortp, zeroes, sizeof(shortp)) != 0 ||
+ memcmp(&intp, zeroes, sizeof(intp)) != 0 ||
+ memcmp(&longp, zeroes, sizeof(longp)) != 0 ||
+ memcmp(&floatp, zeroes, sizeof(floatp)) != 0 ||
+ memcmp(&doublep, zeroes, sizeof(doublep)) != 0 ||
+ memcmp(&structp, zeroes, sizeof(structp)) != 0) {
+ exit(100);
+ }
+
+ exit(0);
+ return 0;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ cat >>confdefs.h <<\_ACEOF
+#define STDARCH_NULL_IS_ZERO 1
+_ACEOF
+ echo "$as_me:$LINENO: result: yes" >&5
+echo "${ECHO_T}yes" >&6
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+
+if test $? -eq 100; then
+ echo "$as_me:$LINENO: result: no ... weird platform" >&5
+echo "${ECHO_T}no ... weird platform" >&6
+else
+ { { echo "$as_me:$LINENO: error: failed! Please fix configure.in!" >&5
+echo "$as_me: error: failed! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
+echo "$as_me:$LINENO: checking byte alignment requirements" >&5
+echo $ECHO_N "checking byte alignment requirements... $ECHO_C" >&6
+
+if test "$cross_compiling" = yes; then
+ cat >>confdefs.h <<\_ACEOF
+#define STDARCH_MAX_BYTE_ALIGNMENT 4
+_ACEOF
+
+ { echo "$as_me:$LINENO: WARNING: Unable to check due to cross compiling! ASSUMING ALIGNMENT TO 4 BYTE BOUNDARY IS GOOD ENOUGH! To change this please correct stdutil/private/stdarch.h!" >&5
+echo "$as_me: WARNING: Unable to check due to cross compiling! ASSUMING ALIGNMENT TO 4 BYTE BOUNDARY IS GOOD ENOUGH! To change this please correct stdutil/private/stdarch.h!" >&2;}
+else
+ cat >conftest.$ac_ext <<_ACEOF
+/* confdefs.h. */
+_ACEOF
+cat confdefs.h >>conftest.$ac_ext
+cat >>conftest.$ac_ext <<_ACEOF
+/* end confdefs.h. */
+
+#include <stdlib.h>
+#include <stddef.h>
+
+struct {
+ char x;
+ long y;
+
+} long_test;
+
+struct {
+ char x;
+#if defined(_MSC_VER)
+ __int64 y;
+#elif (SIZEOF_LONG == 8)
+ long y;
+#elif (SIZEOF_LONG_LONG == 8)
+ long long y;
+#endif
+
+} int64_test;
+
+struct {
+ char x;
+ long double y;
+
+} long_double_test;
+
+struct {
+ char x;
+ void * y;
+
+} voidp_test;
+
+int main()
+{
+ ptrdiff_t max = (char*) &long_test.y - (char*) &long_test.x;
+ ptrdiff_t tmp;
+
+ tmp = (char*) &int64_test.y - (char*) &int64_test.x;
+
+ if (tmp > max) {
+ max = tmp;
+ }
+
+ tmp = (char*) &voidp_test.y - (char*) &voidp_test.x;
+
+ if (tmp > max) {
+ max = tmp;
+ }
+
+ tmp = (char*) &long_double_test.y - (char*) &long_double_test.x;
+
+ if (tmp > max) {
+ max = tmp;
+ }
+
+ exit(100 + (int) max);
+ return 100 + (int) max;
+}
+
+_ACEOF
+rm -f conftest$ac_exeext
+if { (eval echo "$as_me:$LINENO: \"$ac_link\"") >&5
+ (eval $ac_link) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); } && { ac_try='./conftest$ac_exeext'
+ { (eval echo "$as_me:$LINENO: \"$ac_try\"") >&5
+ (eval $ac_try) 2>&5
+ ac_status=$?
+ echo "$as_me:$LINENO: \$? = $ac_status" >&5
+ (exit $ac_status); }; }; then
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
+else
+ echo "$as_me: program exited with status $ac_status" >&5
+echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+( exit $ac_status )
+
+tmp=$?
+if test $tmp -gt 100 && test $tmp -le 116; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDARCH_MAX_BYTE_ALIGNMENT $tmp
+_ACEOF
+
+ echo "$as_me:$LINENO: result: $tmp" >&5
+echo "${ECHO_T}$tmp" >&6
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid/unexpected return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid/unexpected return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
+fi
+
+fi
+rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
+fi
+
echo "$as_me:$LINENO: checking endianness of architecture" >&5
echo $ECHO_N "checking endianness of architecture... $ECHO_C" >&6
@@ -5815,8 +6028,8 @@
short x = 0x1;
char * xptr = (char*) &x;
- exit(xptr[0] == 1); /* return 1 if bytes are opposite of network order, else 0 */
- return xptr[0] == 1;
+ exit(100 + (xptr[0] == 1)); /* return 101 if bytes are opposite of network order, else 100 */
+ return 100 + (xptr[0] == 1);
}
_ACEOF
@@ -5831,21 +6044,30 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<\_ACEOF
-#define STDENDIAN16_SWAP 0
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-cat >>confdefs.h <<\_ACEOF
-#define STDENDIAN16_SWAP 1
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 101; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN16_SWAP $tmp
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -5853,7 +6075,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_NET0_FROM_HOST 3
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_HOST3_FROM_NET 0
_ACEOF
@@ -5881,8 +6103,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -5897,28 +6119,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET0_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST0_FROM_NET 0
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET0_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_NET0_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST${temp}_FROM_NET 0
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_HOST${tmp}_FROM_NET 0
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -5926,7 +6154,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_NET1_FROM_HOST 2
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_HOST2_FROM_NET 1
_ACEOF
@@ -5954,8 +6182,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -5970,28 +6198,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET1_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST0_FROM_NET 1
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET1_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_NET1_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST${temp}_FROM_NET 1
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_HOST${tmp}_FROM_NET 1
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -5999,7 +6233,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_NET2_FROM_HOST 1
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_HOST1_FROM_NET 2
_ACEOF
@@ -6027,8 +6261,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6043,28 +6277,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET2_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST0_FROM_NET 2
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET2_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_NET2_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST${temp}_FROM_NET 2
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_HOST${tmp}_FROM_NET 2
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6072,7 +6312,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_NET3_FROM_HOST 0
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN32_HOST0_FROM_NET 3
_ACEOF
@@ -6100,8 +6340,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6116,28 +6356,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET3_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST0_FROM_NET 3
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_NET3_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_NET3_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN32_HOST${temp}_FROM_NET 3
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN32_HOST${tmp}_FROM_NET 3
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6145,7 +6391,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET0_FROM_HOST 7
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST7_FROM_NET 0
_ACEOF
@@ -6161,7 +6407,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6175,8 +6421,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6191,28 +6437,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET0_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 0
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET0_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET0_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 0
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 0
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6220,7 +6472,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET1_FROM_HOST 6
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST6_FROM_NET 1
_ACEOF
@@ -6236,7 +6488,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6250,8 +6502,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6266,28 +6518,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET1_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 1
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET1_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET1_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 1
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 1
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6295,7 +6553,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET2_FROM_HOST 5
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST5_FROM_NET 2
_ACEOF
@@ -6311,7 +6569,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6325,8 +6583,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6341,28 +6599,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET2_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 2
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET2_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET2_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 2
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 2
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6370,7 +6634,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET3_FROM_HOST 4
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST4_FROM_NET 3
_ACEOF
@@ -6386,7 +6650,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6400,8 +6664,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6416,28 +6680,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET3_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 3
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET3_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET3_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 3
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 3
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6445,7 +6715,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET4_FROM_HOST 3
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST3_FROM_NET 4
_ACEOF
@@ -6461,7 +6731,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6475,8 +6745,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6491,28 +6761,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET4_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 4
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET4_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET4_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 4
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 4
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6520,7 +6796,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET5_FROM_HOST 2
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST2_FROM_NET 5
_ACEOF
@@ -6536,7 +6812,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6550,8 +6826,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6566,28 +6842,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET5_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 5
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET5_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET5_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 5
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 5
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6595,7 +6877,7 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET6_FROM_HOST 1
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST1_FROM_NET 6
_ACEOF
@@ -6611,7 +6893,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6625,8 +6907,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6641,28 +6923,34 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET6_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 6
-_ACEOF
-
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET6_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET6_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 6
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 6
_ACEOF
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
@@ -6670,11 +6958,11 @@
cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_NET7_FROM_HOST 0
_ACEOF
- cat >>confdefs.h <<_ACEOF
+ cat >>confdefs.h <<_ACEOF
#define STDENDIAN64_HOST0_FROM_NET 7
_ACEOF
- { echo "$as_me:$LINENO: WARNING: Unable to check due to cross compiling! ASSUMING LITTLE ENDIAN ARCHITECTURE! To change this please see stdutil.c!" >&5
-echo "$as_me: WARNING: Unable to check due to cross compiling! ASSUMING LITTLE ENDIAN ARCHITECTURE! To change this please see stdutil.c!" >&2;}
+ { echo "$as_me:$LINENO: WARNING: Unable to check due to cross compiling! ASSUMING LITTLE ENDIAN ARCHITECTURE! To change please fix stdutil/private/stdarch.h!" >&5
+echo "$as_me: WARNING: Unable to check due to cross compiling! ASSUMING LITTLE ENDIAN ARCHITECTURE! To change please fix stdutil/private/stdarch.h!" >&2;}
else
cat >conftest.$ac_ext <<_ACEOF
/* confdefs.h. */
@@ -6687,7 +6975,7 @@
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -6701,8 +6989,8 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
_ACEOF
@@ -6717,30 +7005,36 @@
ac_status=$?
echo "$as_me:$LINENO: \$? = $ac_status" >&5
(exit $ac_status); }; }; then
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET7_FROM_HOST 0
-_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST0_FROM_NET 7
-_ACEOF
- echo "$as_me:$LINENO: result: done" >&5
-echo "${ECHO_T}done" >&6
+ { { echo "$as_me:$LINENO: error: test failed (returned 0)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (returned 0)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
else
echo "$as_me: program exited with status $ac_status" >&5
echo "$as_me: failed program was:" >&5
sed 's/^/| /' conftest.$ac_ext >&5
( exit $ac_status )
-temp=$?;
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_NET7_FROM_HOST $temp
+
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_NET7_FROM_HOST $tmp
_ACEOF
- cat >>confdefs.h <<_ACEOF
-#define STDENDIAN64_HOST${temp}_FROM_NET 7
+
+ cat >>confdefs.h <<_ACEOF
+#define STDENDIAN64_HOST${tmp}_FROM_NET 7
_ACEOF
- echo "$as_me:$LINENO: result: done" >&5
+
+ echo "$as_me:$LINENO: result: done" >&5
echo "${ECHO_T}done" >&6
+else
+ { { echo "$as_me:$LINENO: error: test failed (invalid return value)! Please fix configure.in!" >&5
+echo "$as_me: error: test failed (invalid return value)! Please fix configure.in!" >&2;}
+ { (exit 1); exit 1; }; }
fi
+
+fi
rm -f core *.core gmon.out bb.out conftest$ac_exeext conftest.$ac_objext conftest.$ac_ext
fi
Modified: vendor/stdutil/current/src/configure.in
===================================================================
--- vendor/stdutil/current/src/configure.in 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/configure.in 2005-08-06 12:40:26 UTC (rev 255)
@@ -9,13 +9,15 @@
AC_CHECK_SIZEOF(short, 2)
AC_CHECK_SIZEOF(int, 4)
AC_CHECK_SIZEOF(long, 4)
-AC_CHECK_SIZEOF(long long, 8)
+AC_CHECK_SIZEOF([long long], 8)
AC_CHECK_SIZEOF(size_t, 4)
-AC_CHECK_SIZEOF(void *, 4)
+AC_CHECK_SIZEOF([void *], 4)
-AC_MSG_CHECKING(checking all necessary integer types are defined)
+AC_MSG_CHECKING([[checking all necessary integer types are available and appropriate]])
AC_TRY_RUN([
+#include <stdlib.h>
+
#if (SIZEOF_CHAR != 1)
# error No 1 byte integer type found!
#endif
@@ -28,7 +30,7 @@
# error No 4 byte integer type found!
#endif
-#if (!defined(_WIN32) && SIZEOF_LONG != 8 && SIZEOF_LONG_LONG != 8)
+#if (!defined(_MSC_VER) && SIZEOF_LONG != 8 && SIZEOF_LONG_LONG != 8)
# error No 8 byte integeral type found!
#endif
@@ -36,10 +38,146 @@
# error No integral type of same size as size_t!
#endif
-int main() { return 0; }
+int main() { exit(0); return 0; }
-], AC_MSG_RESULT(yes), AC_MSG_ERROR(one or more required integer sizes not found or of really unexpected size please fix stdutil/private/stdarch.h.in!))
+], AC_MSG_RESULT(yes),
+ AC_MSG_ERROR([[test failed! Please fix stdutil/private/stdarch.h.in for your platform! Please note platform must have a built in 64b integer type! Alternatively, configure.in could be broken!]]),
+ AC_MSG_WARN([[Unable to check due to cross compiling! ASSUMING NECESSARY INTEGER TYPES EXIST! Please check that stdutil/private/stdarch.h is correct for your target platform!]]))
+AC_MSG_CHECKING([[if NULL pointers are zeroes in memory]])
+
+AC_TRY_RUN([
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+
+typedef struct test_struct {
+ void * r;
+ int y;
+ double x;
+ long z;
+ char str[348];
+ struct test_struct * next;
+ struct test_struct * prev;
+
+} test_struct;
+
+int main()
+{
+ void * voidp = NULL;
+ char * charp = NULL;
+ short * shortp = NULL;
+ int * intp = NULL;
+ long * longp = NULL;
+ float * floatp = NULL;
+ double * doublep = NULL;
+ test_struct * structp = NULL;
+ char zeroes[sizeof(test_struct)];
+
+ memset(zeroes, 0, sizeof(zeroes));
+
+ if (memcmp(&voidp, zeroes, sizeof(voidp)) != 0 ||
+ memcmp(&charp, zeroes, sizeof(charp)) != 0 ||
+ memcmp(&shortp, zeroes, sizeof(shortp)) != 0 ||
+ memcmp(&intp, zeroes, sizeof(intp)) != 0 ||
+ memcmp(&longp, zeroes, sizeof(longp)) != 0 ||
+ memcmp(&floatp, zeroes, sizeof(floatp)) != 0 ||
+ memcmp(&doublep, zeroes, sizeof(doublep)) != 0 ||
+ memcmp(&structp, zeroes, sizeof(structp)) != 0) {
+ exit(100);
+ }
+
+ exit(0);
+ return 0;
+}
+],
+[AC_DEFINE(STDARCH_NULL_IS_ZERO) AC_MSG_RESULT(yes)],
+[
+if test $? -eq 100; then
+ AC_MSG_RESULT([[no ... weird platform]])
+else
+ AC_MSG_ERROR([[failed! Please fix configure.in!]])
+fi
+],
+AC_MSG_WARN([[Unable to check due to cross compiling! ASSUMING NULL IS ZERO IN MEMORY! To change this please correct stdutil/private/stdarch.h!]]))
+
+AC_MSG_CHECKING([[byte alignment requirements]])
+
+AC_TRY_RUN([
+#include <stdlib.h>
+#include <stddef.h>
+
+struct {
+ char x;
+ long y;
+
+} long_test;
+
+struct {
+ char x;
+#if defined(_MSC_VER)
+ __int64 y;
+#elif (SIZEOF_LONG == 8)
+ long y;
+#elif (SIZEOF_LONG_LONG == 8)
+ long long y;
+#endif
+
+} int64_test;
+
+struct {
+ char x;
+ long double y;
+
+} long_double_test;
+
+struct {
+ char x;
+ void * y;
+
+} voidp_test;
+
+int main()
+{
+ ptrdiff_t max = (char*) &long_test.y - (char*) &long_test.x;
+ ptrdiff_t tmp;
+
+ tmp = (char*) &int64_test.y - (char*) &int64_test.x;
+
+ if (tmp > max) {
+ max = tmp;
+ }
+
+ tmp = (char*) &voidp_test.y - (char*) &voidp_test.x;
+
+ if (tmp > max) {
+ max = tmp;
+ }
+
+ tmp = (char*) &long_double_test.y - (char*) &long_double_test.x;
+
+ if (tmp > max) {
+ max = tmp;
+ }
+
+ exit(100 + (int) max);
+ return 100 + (int) max;
+}
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -gt 100 && test $tmp -le 116; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDARCH_MAX_BYTE_ALIGNMENT, $tmp)
+ AC_MSG_RESULT($tmp)
+else
+ AC_MSG_ERROR([[test failed (invalid/unexpected return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE(STDARCH_MAX_BYTE_ALIGNMENT, 4)
+ AC_MSG_WARN([[Unable to check due to cross compiling! ASSUMING ALIGNMENT TO 4 BYTE BOUNDARY IS GOOD ENOUGH! To change this please correct stdutil/private/stdarch.h!]])])
+
AC_MSG_CHECKING(endianness of architecture)
AC_TRY_RUN([
@@ -50,10 +188,21 @@
short x = 0x1;
char * xptr = (char*) &x;
- exit(xptr[0] == 1); /* return 1 if bytes are opposite of network order, else 0 */
- return xptr[0] == 1;
+ exit(100 + (xptr[0] == 1)); /* return 101 if bytes are opposite of network order, else 100 */
+ return 100 + (xptr[0] == 1);
}
-], AC_DEFINE(STDENDIAN16_SWAP, 0), AC_DEFINE(STDENDIAN16_SWAP, 1), AC_DEFINE(STDENDIAN16_SWAP, 1))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 101; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN16_SWAP, $tmp)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+AC_DEFINE(STDENDIAN16_SWAP, 1))
AC_TRY_RUN([
#include <stdlib.h>
@@ -72,12 +221,22 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN32_NET0_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST0_FROM_NET, 0), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET0_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${temp}_FROM_NET, 0),
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET0_FROM_HOST, 3) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST3_FROM_NET, 0))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN32_NET0_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${tmp}_FROM_NET, 0)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN32_NET0_FROM_HOST, 3) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST3_FROM_NET, 0)])
AC_TRY_RUN([
#include <stdlib.h>
@@ -96,12 +255,22 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN32_NET1_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST0_FROM_NET, 1), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET1_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${temp}_FROM_NET, 1),
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET1_FROM_HOST, 2) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST2_FROM_NET, 1))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN32_NET1_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${tmp}_FROM_NET, 1)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN32_NET1_FROM_HOST, 2) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST2_FROM_NET, 1)])
AC_TRY_RUN([
#include <stdlib.h>
@@ -120,12 +289,22 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN32_NET2_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST0_FROM_NET, 2), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET2_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${temp}_FROM_NET, 2),
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET2_FROM_HOST, 1) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST1_FROM_NET, 2))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN32_NET2_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${tmp}_FROM_NET, 2)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN32_NET2_FROM_HOST, 1) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST1_FROM_NET, 2)])
AC_TRY_RUN([
#include <stdlib.h>
@@ -144,19 +323,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN32_NET3_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST0_FROM_NET, 3), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET3_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${temp}_FROM_NET, 3),
- AC_DEFINE_UNQUOTED(STDENDIAN32_NET3_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST0_FROM_NET, 3))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 103; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN32_NET3_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN32_HOST${tmp}_FROM_NET, 3)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN32_NET3_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN32_HOST0_FROM_NET, 3)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -170,19 +359,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET0_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 0), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET0_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 0),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET0_FROM_HOST, 7) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST7_FROM_NET, 0))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET0_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 0)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET0_FROM_HOST, 7) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST7_FROM_NET, 0)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -196,19 +395,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET1_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 1), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET1_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 1),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET1_FROM_HOST, 6) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST6_FROM_NET, 1))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET1_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 1)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET1_FROM_HOST, 6) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST6_FROM_NET, 1)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -222,19 +431,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET2_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 2), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET2_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 2),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET2_FROM_HOST, 5) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST5_FROM_NET, 2))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET2_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 2)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET2_FROM_HOST, 5) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST5_FROM_NET, 2)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -248,19 +467,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET3_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 3), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET3_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 3),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET3_FROM_HOST, 4) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST4_FROM_NET, 3))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET3_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 3)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET3_FROM_HOST, 4) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST4_FROM_NET, 3)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -274,19 +503,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET4_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 4), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET4_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 4),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET4_FROM_HOST, 3) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST3_FROM_NET, 4))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET4_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 4)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET4_FROM_HOST, 3) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST3_FROM_NET, 4)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -300,19 +539,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET5_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 5), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET5_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 5),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET5_FROM_HOST, 2) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST2_FROM_NET, 5))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET5_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 5)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET5_FROM_HOST, 2) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST2_FROM_NET, 5)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -326,19 +575,29 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET6_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 6), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET6_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 6),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET6_FROM_HOST, 1) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST1_FROM_NET, 6))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET6_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 6)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET6_FROM_HOST, 1) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST1_FROM_NET, 6)])
AC_TRY_RUN([
#include <stdlib.h>
int main()
{
-#if defined(_WIN32)
+#if defined(_MSC_VER)
__int64 x = 0x1;
#elif (SIZEOF_LONG == 8)
long x = 0x1;
@@ -352,11 +611,22 @@
for (i = 0; i < sizeof(x) && xptr[i] == 0; ++i);
- exit(i);
- return i;
+ exit(100 + i);
+ return 100 + i;
}
-], AC_DEFINE_UNQUOTED(STDENDIAN64_NET7_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 7) AC_MSG_RESULT(done), temp=$?;
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET7_FROM_HOST, $temp) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${temp}_FROM_NET, 7) AC_MSG_RESULT(done),
- AC_DEFINE_UNQUOTED(STDENDIAN64_NET7_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 7) AC_MSG_WARN(Unable to check due to cross compiling! ASSUMING LITTLE ENDIAN ARCHITECTURE! To change this please see stdutil.c!))
+],
+AC_MSG_ERROR([[test failed (returned 0)! Please fix configure.in!]]),
+[
+tmp=$?
+if test $tmp -ge 100 && test $tmp -le 107; then
+ tmp=$(($tmp - 100))
+ AC_DEFINE_UNQUOTED(STDENDIAN64_NET7_FROM_HOST, $tmp)
+ AC_DEFINE_UNQUOTED(STDENDIAN64_HOST${tmp}_FROM_NET, 7)
+ AC_MSG_RESULT(done)
+else
+ AC_MSG_ERROR([[test failed (invalid return value)! Please fix configure.in!]])
+fi
+],
+[AC_DEFINE_UNQUOTED(STDENDIAN64_NET7_FROM_HOST, 0) AC_DEFINE_UNQUOTED(STDENDIAN64_HOST0_FROM_NET, 7) AC_MSG_WARN([[Unable to check due to cross compiling! ASSUMING LITTLE ENDIAN ARCHITECTURE! To change please fix stdutil/private/stdarch.h!]])])
AC_OUTPUT(Makefile)
Modified: vendor/stdutil/current/src/stddll.c
===================================================================
--- vendor/stdutil/current/src/stddll.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stddll.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -766,10 +766,10 @@
}
/************************************************************************************************
- * stdit_val: Return a pointer to an element from an iterator.
+ * stddll_it_val: Return a pointer to an element from an iterator.
***********************************************************************************************/
-STDINLINE void *stdit_val(const stdit *it)
+STDINLINE void *stddll_it_val(const stdit *it)
{
STDSAFETY_CHECK(STDIT_DLL_IS_LEGAL(it));
@@ -777,11 +777,22 @@
}
/************************************************************************************************
- * stdit_eq: Compare to iterators for equality (refer to the same element).
+ * stddll_it_val_size: Return the size of the referenced type from an iterator.
***********************************************************************************************/
-STDINLINE stdbool stdit_eq(const stdit *it1, const stdit *it2)
+STDINLINE stdsize stddll_it_val_size(const stdit *it)
{
+ STDSAFETY_CHECK(STDIT_DLL_IS_LEGAL(it));
+
+ return it->impl.dll.vsize;
+}
+
+/************************************************************************************************
+ * stddll_it_eq: Compare to iterators for equality (refer to the same element).
+ ***********************************************************************************************/
+
+STDINLINE stdbool stddll_it_eq(const stdit *it1, const stdit *it2)
+{
STDSAFETY_CHECK(STDIT_DLL_IS_LEGAL(it1) && STDIT_DLL_IS_LEGAL(it2) &&
it1->impl.dll.end_node == it2->impl.dll.end_node &&
it1->impl.dll.vsize == it2->impl.dll.vsize);
@@ -790,10 +801,10 @@
}
/************************************************************************************************
- * stdit_next: Advance an iterator one position towards the end.
+ * stddll_it_next: Advance an iterator one position towards the end.
***********************************************************************************************/
-STDINLINE stdit *stdit_next(stdit *it)
+STDINLINE stdit *stddll_it_next(stdit *it)
{
STDSAFETY_CHECK(STDIT_DLL_IS_LEGAL(it));
STDBOUNDS_CHECK(it->impl.dll.node != it->impl.dll.end_node);
@@ -804,10 +815,10 @@
}
/************************************************************************************************
- * stdit_advance: Advance an iterator 'num_advance' positions towards the end.
+ * stddll_it_advance: Advance an iterator 'num_advance' positions towards the end.
***********************************************************************************************/
-STDINLINE stdit *stdit_advance(stdit *it, stdsize num_advance)
+STDINLINE stdit *stddll_it_advance(stdit *it, stdsize num_advance)
{
STDSAFETY_CHECK(STDIT_DLL_IS_LEGAL(it));
@@ -820,10 +831,10 @@
}
/************************************************************************************************
- * stdit_prev: Advance an iterator one postion towards the beginning.
+ * stddll_it_prev: Advance an iterator one postion towards the beginning.
***********************************************************************************************/
-STDINLINE stdit *stdit_prev(stdit *it)
+STDINLINE stdit *stddll_it_prev(stdit *it)
{
STDSAFETY_CHECK(STDIT_DLL_IS_LEGAL(it));
STDBOUNDS_CHECK(it->impl.dll.node->prev != it->impl.dll.end_node);
@@ -834,10 +845,10 @@
}
/************************************************************************************************
- * stdit_retreat: Advance an iterator 'num_retreat' positions towards the beginning.
+ * stddll_it_retreat: Advance an iterator 'num_retreat' positions towards the beginning.
***********************************************************************************************/
-STDINLINE stdit *stdit_retreat(stdit *it, stdsize num_retreat)
+STDINLINE stdit *stddll_it_retreat(stdit *it, stdsize num_retreat)
{
STDSAFETY_CHECK(STDIT_DLL_IS_LEGAL(it));
Modified: vendor/stdutil/current/src/stderror.c
===================================================================
--- vendor/stdutil/current/src/stderror.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stderror.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -156,8 +156,9 @@
/************************************************************************************************
* stderr_strerr: Returns a constant string in response to a StdUtil
* error code. Some StdUtil fcns can return system specific codes.
- * In that case this fcn will return a "Unknown Error" string and you
- * should consult your system specific error lookup service.
+ * In that case this fcn will return a "Unknown Error Code (system
+ * error code)" string and you should consult your system specific
+ * error lookup service.
***********************************************************************************************/
STDINLINE const char *stderr_strerr(stdcode code)
@@ -193,6 +194,10 @@
ret = "Functionality Not Implemented";
break;
+ case STDEINTR:
+ ret = "Operation Interrupted";
+ break;
+
default:
ret = "Unknown Error Code (system error code)";
break;
Modified: vendor/stdutil/current/src/stdfd.c
===================================================================
--- vendor/stdutil/current/src/stdfd.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdfd.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -31,7 +31,7 @@
# include <io.h>
# include <sys/locking.h>
# define STDFILENO(s) _fileno(s)
-# define STDFSYNC(fd) _commit(fd)
+# define STDFSYNC(fd) _commit(fd)
#else
# include <unistd.h>
# define STDFILENO(s) fileno(s)
@@ -42,17 +42,49 @@
* stdfd_open: Open a file descriptor.
***********************************************************************************************/
-STDINLINE stdcode stdfd_open(stdfd *fd, const char *path, const char *mode)
+STDINLINE stdcode stdfd_open(stdfd *fd, const char *path, stdfd_access_type mode)
{
- stdcode ret = STDESUCCESS;
+ stdcode ret = STDESUCCESS;
+ const char * fopen_mode;
- if ((fd->stream = fopen(path, mode)) != NULL) {
+ switch (mode) {
+ case STDFD_READ_ONLY:
+ fopen_mode = "rb";
+ break;
+
+ case STDFD_READ_WRITE_EXISTING:
+ fopen_mode = "rb+";
+ break;
+
+ case STDFD_WRITE_ONLY:
+ fopen_mode = "wb";
+ break;
+
+ case STDFD_READ_WRITE_NEW:
+ fopen_mode = "wb+";
+ break;
+
+ case STDFD_APPEND_ONLY:
+ fopen_mode = "ab";
+ break;
+
+ case STDFD_READ_APPEND:
+ fopen_mode = "ab+";
+ break;
+
+ default:
+ ret = STDEINVAL;
+ goto stdfd_open_end;
+ }
+
+ if ((fd->stream = fopen(path, fopen_mode)) != NULL) {
fd->fd = STDFILENO(fd->stream);
} else {
ret = errno;
}
+ stdfd_open_end:
return ret;
}
@@ -64,13 +96,14 @@
{
stdcode ret = STDESUCCESS;
- STDSAFETY_CHECK(fd->stream != NULL);
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
- if ((ret = fclose(fd->stream)) != 0) {
+ if (fclose(fd->stream) != 0) {
ret = errno;
}
fd->stream = NULL;
+ fd->fd = -1;
return ret;
}
@@ -84,6 +117,8 @@
{
stdcode ret;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
if ((*num = fread(ptr, nsize, nmemb, fd->stream)) == nmemb) {
ret = STDESUCCESS;
@@ -93,8 +128,8 @@
} else if (ferror(fd->stream)) {
ret = errno;
- } else {
- ret = STDESUCCESS;
+ } else {
+ ret = STDEINTR; /* wrong count but not EOF or error? alert user! */
}
return ret;
@@ -109,6 +144,8 @@
{
stdcode ret;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
if ((*num = fwrite(ptr, nsize, nmemb, fd->stream)) == nmemb) {
ret = STDESUCCESS;
@@ -118,8 +155,8 @@
} else if (ferror(fd->stream)) {
ret = errno;
- } else {
- ret = STDESUCCESS;
+ } else {
+ ret = STDEINTR; /* wrong count but not EOF or error? alert user! */
}
return ret;
@@ -133,6 +170,8 @@
{
stdcode ret = STDESUCCESS;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
if (fflush(fd->stream) != 0) {
ret = errno;
}
@@ -145,10 +184,12 @@
* flush all data to disk.
***********************************************************************************************/
-STDINLINE stdcode stdfd_sync(stdfd * fd)
+STDINLINE stdcode stdfd_sync(stdfd *fd)
{
stdcode ret = STDESUCCESS;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
if (stdfd_flush(fd) != 0 || STDFSYNC(fd->fd) != 0) {
ret = errno;
}
@@ -160,10 +201,12 @@
* stdfd_seek: Move the read/write head position of a file descriptor.
***********************************************************************************************/
-STDINLINE stdcode stdfd_seek(stdfd *fd, stdfd_pos offset, stdfd_whence whence)
+STDINLINE stdcode stdfd_seek(stdfd *fd, long offset, stdfd_whence whence)
{
stdcode ret = STDESUCCESS;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
if (fseek(fd->stream, offset, whence) != 0) {
ret = errno;
}
@@ -172,13 +215,15 @@
}
/************************************************************************************************
- * stdfd_get_pos: Get the read/write head position of a file descriptor.
+ * stdfd_tell: Get the read/write head position of a file descriptor.
***********************************************************************************************/
-STDINLINE stdcode stdfd_get_pos(stdfd *fd, stdfd_pos *pos)
+STDINLINE stdcode stdfd_tell(stdfd *fd, long *pos)
{
stdcode ret = STDESUCCESS;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
if ((*pos = ftell(fd->stream)) == -1) {
ret = errno;
}
@@ -190,8 +235,10 @@
* stdfd_eof: Return whether or not the EOF indicator on a file descriptor is set.
***********************************************************************************************/
-STDINLINE stdbool stdfd_eof(stdfd * fd)
+STDINLINE stdbool stdfd_eof(stdfd *fd)
{
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
return (feof(fd->stream) != 0);
}
@@ -199,8 +246,10 @@
* stdfd_err: Return whether or not an error indicator on a file descriptor is set.
***********************************************************************************************/
-STDINLINE stdbool stdfd_err(stdfd * fd)
+STDINLINE stdbool stdfd_err(stdfd *fd)
{
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
return (ferror(fd->stream) != 0);
}
@@ -208,8 +257,10 @@
* stdfd_clr_err: Clear any error indicator on a file descriptor.
***********************************************************************************************/
-STDINLINE void stdfd_clr_err(stdfd * fd)
+STDINLINE void stdfd_clr_err(stdfd *fd)
{
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
clearerr(fd->stream);
}
@@ -218,10 +269,12 @@
* descriptor's underlying file.
***********************************************************************************************/
-STDINLINE stdcode stdfd_trylock(stdfd * fd)
+STDINLINE stdcode stdfd_trylock(stdfd *fd)
{
stdcode ret = STDESUCCESS;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
#if defined(_WIN32)
if (_locking(fd->fd, _LK_NBLCK, 1) != 0) {
#else
@@ -242,10 +295,12 @@
* underlying file.
***********************************************************************************************/
-STDINLINE stdcode stdfd_unlock(stdfd * fd)
+STDINLINE stdcode stdfd_unlock(stdfd *fd)
{
stdcode ret = STDESUCCESS;
+ STDSAFETY_CHECK(fd->stream != NULL && fd->fd >= 0);
+
#if defined(_WIN32)
if (_locking(fd->fd, _LK_UNLCK, 1) != 0) {
#else
Modified: vendor/stdutil/current/src/stdhash.c
===================================================================
--- vendor/stdutil/current/src/stdhash.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdhash.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -694,25 +694,23 @@
STDINLINE stdcode stdhash_set_eq(stdhash *dst, const stdhash *src)
{
stdcode ret = STDESUCCESS;
+ stdhash cpy;
STDSAFETY_CHECK(STDHASH_IS_LEGAL(dst) && STDHASH_IS_LEGAL(src) &&
dst->ksize == src->ksize && dst->vsize == src->vsize &&
dst->cmp_fcn == src->cmp_fcn && dst->hcode_fcn == src->hcode_fcn);
- if (src->size != 0) {
- stdhash cpy;
+ if (dst == src) {
+ goto stdhash_set_eq_end;
+ }
- if ((ret = stdhash_copy_construct(&cpy, src)) != STDESUCCESS) { /* make a copy */
- goto stdhash_set_eq_end;
- }
-
- stdhash_swap(dst, &cpy); /* swap the hashes */
- stdhash_destruct(&cpy); /* destroy the old hash */
-
- } else {
- stdhash_clear(dst);
+ if ((ret = stdhash_copy_construct(&cpy, src)) != STDESUCCESS) { /* make a copy */
+ goto stdhash_set_eq_end;
}
+ stdhash_swap(dst, &cpy); /* swap the hashes */
+ stdhash_destruct(&cpy); /* destroy the old hash */
+
stdhash_set_eq_end:
return ret;
}
@@ -1219,10 +1217,10 @@
}
/************************************************************************************************
- * stdit_key: Return a pointer to the key of the key-value pair 'it' references.
+ * stdhash_it_key: Return a pointer to the key of the key-value pair 'it' references.
***********************************************************************************************/
-STDINLINE const void *stdit_key(const stdit *it)
+STDINLINE const void *stdhash_it_key(const stdit *it)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
@@ -1230,10 +1228,10 @@
}
/************************************************************************************************
- * stdit_key_size: Return the size in bytes of keys 'it' references.
+ * stdhash_it_key_size: Return the size in bytes of keys 'it' references.
***********************************************************************************************/
-STDINLINE stdsize stdit_key_size(const stdit *it)
+STDINLINE stdsize stdhash_it_key_size(const stdit *it)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
@@ -1241,10 +1239,10 @@
}
/************************************************************************************************
- * stdit_val: Return a pointer to the key of the key-value pair 'it' references.
+ * stdhash_it_val: Return a pointer to the key of the key-value pair 'it' references.
***********************************************************************************************/
-STDINLINE void *stdit_val(const stdit *it)
+STDINLINE void *stdhash_it_val(const stdit *it)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
@@ -1252,10 +1250,10 @@
}
/************************************************************************************************
- * stdit_val_size: Return the size in bytes of the values 'it' references.
+ * stdhash_it_val_size: Return the size in bytes of the values 'it' references.
***********************************************************************************************/
-STDINLINE stdsize stdit_val_size(const stdit *it)
+STDINLINE stdsize stdhash_it_val_size(const stdit *it)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
@@ -1263,10 +1261,10 @@
}
/************************************************************************************************
- * stdit_eq: Compare two iterators for equality (same pair).
+ * stdhash_it_eq: Compare two iterators for equality (same pair).
***********************************************************************************************/
-STDINLINE stdbool stdit_eq(const stdit *it1, const stdit *it2)
+STDINLINE stdbool stdhash_it_eq(const stdit *it1, const stdit *it2)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it1) && STDIT_HASH_IS_LEGAL(it2) &&
it1->impl.hash.table == it2->impl.hash.table &&
@@ -1278,10 +1276,10 @@
}
/************************************************************************************************
- * stdit_next: Advance an iterator towards end by 1 position.
+ * stdhash_it_next: Advance an iterator towards end by 1 position.
***********************************************************************************************/
-STDINLINE stdit *stdit_next(stdit *it)
+STDINLINE stdit *stdhash_it_next(stdit *it)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
STDBOUNDS_CHECK(it->impl.hash.node_pos != it->impl.hash.table_end);
@@ -1292,10 +1290,10 @@
}
/************************************************************************************************
- * stdit_advance: Advance an iterator towards end by 'num_advance' positions.
+ * stdhash_it_advance: Advance an iterator towards end by 'num_advance' positions.
***********************************************************************************************/
-STDINLINE stdit *stdit_advance(stdit *it, stdsize num_advance)
+STDINLINE stdit *stdhash_it_advance(stdit *it, stdsize num_advance)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
@@ -1308,10 +1306,10 @@
}
/************************************************************************************************
- * stdit_prev: Advance an iterator towards begin by 1 position.
+ * stdhash_it_prev: Advance an iterator towards begin by 1 position.
***********************************************************************************************/
-STDINLINE stdit *stdit_prev(stdit *it)
+STDINLINE stdit *stdhash_it_prev(stdit *it)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
STDBOUNDS_CHECK(it->impl.hash.node_pos != it->impl.hash.table); /* should be begin, but we don't track that */
@@ -1322,10 +1320,10 @@
}
/************************************************************************************************
- * stdit_retreat: Advance an iterator towards begin by 'num_retreat' positions.
+ * stdhash_it_retreat: Advance an iterator towards begin by 'num_retreat' positions.
***********************************************************************************************/
-STDINLINE stdit *stdit_retreat(stdit *it, stdsize num_retreat)
+STDINLINE stdit *stdhash_it_retreat(stdit *it, stdsize num_retreat)
{
STDSAFETY_CHECK(STDIT_HASH_IS_LEGAL(it));
Modified: vendor/stdutil/current/src/stdit.c
===================================================================
--- vendor/stdutil/current/src/stdit.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdit.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -53,7 +53,7 @@
break;
default:
- ret = STDIT_FORWARD;
+ ret = 0;
STDEXCEPTION(uninitialized or corrupted iterator);
break;
}
@@ -169,21 +169,15 @@
break;
case STDHASH_IT_ID:
+ case STDHASH_IT_KEY_ID:
ret = stdhash_it_val(it);
break;
- case STDHASH_IT_KEY_ID:
- ret = (void*) stdhash_it_key(it);
- break;
-
case STDSKL_IT_ID:
+ case STDSKL_IT_KEY_ID:
ret = stdskl_it_val(it);
break;
- case STDSKL_IT_KEY_ID:
- ret = (void*) stdskl_it_key(it);
- break;
-
default:
ret = NULL;
STDEXCEPTION(uninitialized or corrupted iterator);
@@ -223,21 +217,15 @@
break;
case STDHASH_IT_ID:
+ case STDHASH_IT_KEY_ID:
ret = stdhash_it_val_size(it);
break;
- case STDHASH_IT_KEY_ID:
- ret = stdhash_it_key_size(it);
- break;
-
case STDSKL_IT_ID:
+ case STDSKL_IT_KEY_ID:
ret = stdskl_it_val_size(it);
break;
- case STDSKL_IT_KEY_ID:
- ret = stdskl_it_key_size(it);
- break;
-
default:
ret = 0;
STDEXCEPTION(uninitialized or corrupted iterator);
Modified: vendor/stdutil/current/src/stdskl.c
===================================================================
--- vendor/stdutil/current/src/stdskl.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdskl.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -28,9 +28,21 @@
#include <stdutil/stdtime.h>
#include <stdutil/stdskl.h>
+/* TODO: consider shrinking end_node's arrays when the top level
+ becomes empty (down to some minimum height like 4 or 5); this is
+ easy to detect: if the node being removed has the same height as
+ the end_node and his top level prev and next are the end node then
+ the level is about to become empty; alternatively after removal you
+ can just check the top levels for self reference; also might not
+ want to make end_node taller than the tallest node on insert --
+ don't know how big an effect on find this will have as find as it
+ will simply run down end_node's nexts array while next equals
+ end_node not doing any real work
+*/
+
#define STDSKL_MAX_HEIGHT 31
-#define STDSKL_IS_LEGAL(l) ((l)->end_node != NULL && (l)->ksize != 0 && (l)->bits_left < 32)
+#define STDSKL_IS_LEGAL(l) ((l)->end_node != NULL && (l)->ksize != 0 && (l)->bits_left >= 0 && (l)->bits_left < 32)
#define STDSKL_IT_IS_LEGAL(l, i) ((i)->ksize == (l)->ksize && (i)->vsize == (l)->vsize)
#define STDIT_SKL_IS_LEGAL(i) (((i)->type_id == STDSKL_IT_ID || (i)->type_id == STDSKL_IT_KEY_ID) && \
(i)->impl.skl.node != NULL && (i)->impl.skl.ksize != 0)
@@ -72,7 +84,7 @@
keep_going = ((l->rand_bits & 0x1) == 0x1); /* break loop on a "off" bit */
- --l->bits_left; /* consume a bit */
+ --l->bits_left; /* remove used bit */
l->rand_bits >>= 1;
}
}
@@ -80,15 +92,17 @@
/* calculate memory needed for node and pointer arrays and the offsets for the pointers in the node */
mem_tot = sizeof(stdskl_node); /* memory for node structure */
- prevs_off = mem_tot;
+ prevs_off = mem_tot; /* structure is already aligned for void*'s -> good enough alignment */
mem_tot += (height + 1) * sizeof(stdskl_node*); /* memory for prevs array */
- nexts_off = mem_tot;
+ nexts_off = mem_tot; /* structure is already aligned for void*'s -> good enough alignment */
mem_tot += (height + 1) * sizeof(stdskl_node*); /* memory for nexts array */
mem_tot = STDARCH_PADDED_SIZE(mem_tot); /* pad memory for key */
key_off = mem_tot;
+ /* TODO: might only pad the key size if vsize != 0 */
+
mem_tot += STDARCH_PADDED_SIZE(l->ksize); /* memory for key and padding for value */
val_off = mem_tot;
@@ -125,7 +139,7 @@
* If (find_any) immediately return on any match. Otherwise if 'key'
* exists in 'l' return the "leftmost" (least) match if multiple
* matches exist. On no match, returns the "leftmost" (least) entry
- * in 'l' with a greater key, or end if no such entry.
+ * in 'l' with a greater key, or end if no such entry exists.
***********************************************************************************************/
STDINLINE static stdbool stdskl_low_find_right(const stdskl *l, const void *key,
@@ -136,7 +150,7 @@
stdint8 lvl = l->end_node->height;
int cmp = -1; /* get rid of compiler warning */
- /* run down to bottom level */
+ /* run down to bottom level list */
while (lvl > 0) {
next = curr->nexts[lvl];
@@ -156,12 +170,12 @@
return STDTRUE;
}
- /* run down curr's nexts levels while they equal next */
+ /* run down curr's levels while they equal next */
for (--lvl; lvl > 0 && curr->nexts[lvl] == next; --lvl);
}
- /* lvl is zero: run right on bottom level trying to match key */
+ /* lvl is zero: run right on bottom level list trying to match key */
curr = curr->nexts[0];
@@ -184,7 +198,7 @@
* If (find_any) immediately return on any match. Otherwise if 'key'
* exists in 'l' return the "rightmost" (greatest) match if multiple
* matches exist. On no match, returns the "rightmost" (greatest)
- * entry in 'l' with a lesser key, or end if no such entry.
+ * entry in 'l' with a lesser key, or end if no such entry exists.
***********************************************************************************************/
STDINLINE static stdbool stdskl_low_find_left(const stdskl *l, const void *key,
@@ -195,7 +209,7 @@
stdint8 lvl = l->end_node->height;
int cmp = -1; /* get rid of compiler warning */
- /* run down to bottom level */
+ /* run down to bottom level list */
while (lvl > 0) {
prev = curr->prevs[lvl];
@@ -220,7 +234,7 @@
for (--lvl; lvl > 0 && curr->prevs[lvl] == prev; --lvl);
}
- /* run left on bottom level trying to match key */
+ /* run left on bottom level list trying to match key */
curr = curr->prevs[0];
@@ -272,7 +286,7 @@
STDINLINE static void stdskl_low_link_left(const stdskl *l, stdskl_node *ins_pos, stdskl_node *node)
{
- stdskl_node * prev = ins_pos->prevs[0]; /* NOTE: this is why we must link_left b4 link_right */
+ stdskl_node * prev = ins_pos->prevs[0]; /* NOTE: this is why we must link_left b4 link_right in insert! */
stdint8 height = node->height;
stdint8 lvl = 0;
@@ -323,7 +337,7 @@
key = (keyed ? stdit_key(&src_it) : val);
cmp = -1;
- /* get insertion position for this key */
+ /* get insertion position for this key: next */
if (hint) { /* 'next' is a potential insertion point -> verify! */
prev = next->prevs[0];
@@ -347,6 +361,8 @@
}
hint = STDTRUE; /* use next as a hint for following iteration (optimize for nearly contiguous, sorted inserts) */
+
+ /* create + insert new node; or overwrite pre-existing match if so instructed and appropriate */
if (!overwrite || next == l->end_node || cmp != 0) { /* create new node to insert */
@@ -360,9 +376,9 @@
if (node->height > l->end_node->height) {
stdskl_node * new_end;
- /* ratchet up new end_node's height to be at least 2 levels higher than before if not already at max height */
+ /* ratchet up new end_node's height to be at least 1 level higher (usually 2) than before */
- lvl = node->height;
+ lvl = node->height; /* 0 <= node->height <= STDSKL_MAX_HEIGHT */
if (lvl < STDSKL_MAX_HEIGHT) {
++lvl;
@@ -373,27 +389,33 @@
goto stdskl_low_insert_fail;
}
- /* set new_end's nexts and prevs and correct nodes ref'ing end to new_end */
+ /* set new_end's nexts and prevs and update nodes ref'ing end_node to now point to new_end */
+ /* loop while we haven't updated all levels of the lists AND end_node is NOT self-referring */
lvl = 0;
do {
- new_end->prevs[lvl] = l->end_node->prevs[lvl];
- new_end->prevs[lvl]->nexts[lvl] = new_end;
- new_end->nexts[lvl] = l->end_node->nexts[lvl];
- new_end->nexts[lvl]->prevs[lvl] = new_end;
+ if (l->end_node->prevs[lvl] == l->end_node) { /* break on end_node referring to itself -> */
+ break; /* all prevs, nexts of this and higher lvls are self-referring */
+ }
- } while (lvl++ != l->end_node->height);
+ new_end->prevs[lvl] = l->end_node->prevs[lvl];
+ l->end_node->prevs[lvl]->nexts[lvl] = new_end;
- /* set additional lvls in new_end to be self-referencing */
+ new_end->nexts[lvl] = l->end_node->nexts[lvl];
+ l->end_node->nexts[lvl]->prevs[lvl] = new_end;
+ } while (lvl++ != l->end_node->height);
+
+ /* set additional lvls in new_end to be self-referencing. NOTE: new_end is at least 1 lvl taller than end_node */
+
do {
new_end->prevs[lvl] = new_end;
new_end->nexts[lvl] = new_end;
} while (lvl++ != new_end->height);
- /* correct next if it referenced the old end */
+ /* correct next if it referenced the end_node */
if (next == l->end_node) {
next = new_end;
@@ -406,7 +428,7 @@
/* link 'node' into list before next */
stdskl_low_link_left(l, next, node); /* NOTE: we must link_left before we link_right due to loss of information */
- stdskl_low_link_right(l, next, node);
+ stdskl_low_link_right(l, next, node);
++l->size;
@@ -416,7 +438,7 @@
memcpy(STDSKL_NVAL(node), val, l->vsize);
}
- /* remember first insertion */
+ /* remember first insertion/overwrite */
if (first_ins == NULL) {
first_ins = node;
@@ -429,10 +451,6 @@
}
}
- if (first_ins == NULL) { /* empty input sequence, set 'it' to end */
- first_ins = l->end_node;
- }
-
goto stdskl_low_insert_end;
/* error handling and return */
@@ -441,9 +459,9 @@
free(node);
stdskl_low_insert_end:
- if (first_ins != NULL && it != NULL) { /* at least one insertion succeeded or empty input sequence */
+ if (it != NULL) {
it->type_id = STDSKL_IT_ID;
- it->impl.skl.node = first_ins;
+ it->impl.skl.node = (first_ins != NULL ? first_ins : l->end_node); /* point to end if no insert/overwrite occurred */
it->impl.skl.ksize = l->ksize;
it->impl.skl.vsize = l->vsize;
}
@@ -527,13 +545,24 @@
stdint8 lvl;
stdtime t;
- if (ksize != 0) {
+ if (ksize == 0) {
ret = STDEINVAL;
goto stdskl_construct_fail;
}
- /* allocate and init end_node */
+ l->size = 0;
+ l->ksize = ksize;
+ l->vsize = vsize;
+ l->cmp_fcn = kcmp;
+ /* initialize randomization using current system time w/ subsecond precision */
+
+ stdtime_now(&t);
+ stdrand32_dseed(l->seed, stdhcode_sfh(&t, sizeof(t)));
+ l->bits_left = 0;
+
+ /* allocate and init end_node -- NOTE: rest of list must be initialized b4 calling this fcn */
+
if ((l->end_node = stdskl_low_create_node(l, 4, NULL, NULL)) == NULL) {
ret = STDENOMEM;
goto stdskl_construct_fail;
@@ -549,16 +578,6 @@
} while (lvl-- != 0);
- l->size = 0;
- l->ksize = ksize;
- l->vsize = vsize;
- l->cmp_fcn = kcmp;
-
- /* initialize randomization using current system time w/ subsecond precision */
-
- stdtime_now(&t);
- stdskl_dseed(l, &t, sizeof(t));
-
goto stdskl_construct_end;
/* error handling and return */
@@ -579,7 +598,6 @@
{
stdcode ret;
stdit it;
- stdit dend;
STDSAFETY_CHECK(STDSKL_IS_LEGAL(src));
@@ -587,7 +605,7 @@
goto stdskl_copy_construct_fail;
}
- if ((ret = stdskl_insert_seq_n(dst, stdskl_end(dst, &dend), stdskl_begin(src, &it), src->size, STDTRUE)) != STDESUCCESS) {
+ if ((ret = stdskl_insert_seq_n(dst, NULL, stdskl_begin(src, &it), src->size, STDFALSE)) != STDESUCCESS) {
goto stdskl_copy_construct_fail2;
}
@@ -627,11 +645,24 @@
STDINLINE stdcode stdskl_set_eq(stdskl *dst, const stdskl *src)
{
- stdcode ret;
+ stdcode ret = STDESUCCESS;
stdskl cpy;
- STDSAFETY_CHECK(STDSKL_IS_LEGAL(dst) && STDSKL_IS_LEGAL(src));
+ STDSAFETY_CHECK(STDSKL_IS_LEGAL(dst) && STDSKL_IS_LEGAL(src) &&
+ dst->ksize == src->ksize && dst->vsize == src->vsize &&
+ dst->cmp_fcn == src->cmp_fcn);
+ /* TODO: an improvement would be to resize the number of nodes in
+ the table as needed: just slice off or splice on an appropriate
+ sequence of nodes to the begin or end of the list and overwrite
+ all nodes: this would cut down on "unnecessary" memory
+ allocs/frees
+ */
+
+ if (dst == src) {
+ goto stdskl_set_eq_end;
+ }
+
if ((ret = stdskl_copy_construct(&cpy, src)) != STDESUCCESS) {
goto stdskl_set_eq_end;
}
@@ -781,7 +812,7 @@
free(prev);
}
- /* fix list entries: end_node and size */
+ /* fix list entries: end_node needs to self reference at all levels and size */
curr = l->end_node;
lvl = l->end_node->height;
@@ -971,7 +1002,8 @@
{
stdit b;
- STDSAFETY_CHECK(STDSKL_IS_LEGAL(l) && (!hint || (it != NULL && STDIT_SKL_IS_LEGAL(it) && STDSKL_IT_IS_LEGAL(l, &it->impl.skl))));
+ STDSAFETY_CHECK(STDSKL_IS_LEGAL(l) &&
+ (!hint || (it != NULL && STDIT_SKL_IS_LEGAL(it) && STDSKL_IT_IS_LEGAL(l, &it->impl.skl))));
return stdskl_low_insert(l, it, stdit_pptr(&b, key, val, l->ksize, l->vsize), NULL, num_times, hint, STDFALSE, STDFALSE);
}
@@ -1019,7 +1051,7 @@
stdskl_lowerb(l, &it, key);
- for (; !stdskl_is_end(l, &it) && stdskl_low_key_cmp(l, key, STDSKL_NKEY(it.impl.skl.node)) == 0;) {
+ while (it.impl.skl.node != l->end_node && stdskl_low_key_cmp(l, key, STDSKL_NKEY(it.impl.skl.node)) == 0) {
stdskl_erase(l, &it); /* advances 'it' */
}
}
@@ -1033,14 +1065,14 @@
STDSAFETY_CHECK(STDSKL_IS_LEGAL(l));
stdrand32_dseed(l->seed, stdhcode_sfh(seed, sizeof_seed));
- l->bits_left = 0;
+ l->bits_left = 0; /* NOTE: initialization depends on this */
}
/************************************************************************************************
- * stdit_key: Get a key from an iterator.
+ * stdskl_it_key: Get a key from an iterator.
***********************************************************************************************/
-STDINLINE const void *stdit_key(const stdit *it)
+STDINLINE const void *stdskl_it_key(const stdit *it)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
@@ -1048,10 +1080,10 @@
}
/************************************************************************************************
- * stdit_key_size: Get the size in bytes of the keys to which 'it' refers.
+ * stdskl_it_key_size: Get the size in bytes of the keys to which 'it' refers.
***********************************************************************************************/
-STDINLINE stdsize stdit_key_size(const stdit *it)
+STDINLINE stdsize stdskl_it_key_size(const stdit *it)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
@@ -1059,32 +1091,32 @@
}
/************************************************************************************************
- * stdit_val: Get a value from an iterator.
+ * stdskl_it_val: Get a value from an iterator.
***********************************************************************************************/
-STDINLINE void *stdit_val(const stdit *it)
+STDINLINE void *stdskl_it_val(const stdit *it)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
- return STDSKL_NVAL(it->impl.skl.node);
+ return (void*) (it->type_id == STDSKL_IT_ID ? STDSKL_NVAL(it->impl.skl.node) : STDSKL_NKEY(it->impl.skl.node));
}
/************************************************************************************************
- * stdit_val_size: Get the size in bytes of the values to which 'it' refers.
+ * stdskl_it_val_size: Get the size in bytes of the values to which 'it' refers.
***********************************************************************************************/
-STDINLINE stdsize stdit_val_size(const stdit *it)
+STDINLINE stdsize stdskl_it_val_size(const stdit *it)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
- return it->impl.skl.vsize;
+ return (it->type_id == STDSKL_IT_ID ? it->impl.skl.vsize : it->impl.skl.ksize);
}
/************************************************************************************************
- * stdit_eq: Compare two iterators for equality (refer to the same element).
+ * stdskl_it_eq: Compare two iterators for equality (refer to the same element).
***********************************************************************************************/
-STDINLINE stdbool stdit_eq(const stdit *it1, const stdit *it2)
+STDINLINE stdbool stdskl_it_eq(const stdit *it1, const stdit *it2)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it1) && STDIT_SKL_IS_LEGAL(it2) &&
it1->impl.skl.ksize == it2->impl.skl.ksize &&
@@ -1094,10 +1126,10 @@
}
/************************************************************************************************
- * stdit_next: Advance 'it' towards end by one position.
+ * stdskl_it_next: Advance 'it' towards end by one position.
***********************************************************************************************/
-STDINLINE stdit *stdit_next(stdit *it)
+STDINLINE stdit *stdskl_it_next(stdit *it)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
@@ -1107,10 +1139,10 @@
}
/************************************************************************************************
- * stdit_advance: Advance 'it' towards end by 'num_advance' positions.
+ * stdskl_it_advance: Advance 'it' towards end by 'num_advance' positions.
***********************************************************************************************/
-STDINLINE stdit *stdit_advance(stdit *it, stdsize num_advance)
+STDINLINE stdit *stdskl_it_advance(stdit *it, stdsize num_advance)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
@@ -1122,10 +1154,10 @@
}
/************************************************************************************************
- * stdit_prev: Advance 'it' towards begin by one position.
+ * stdskl_it_prev: Advance 'it' towards begin by one position.
***********************************************************************************************/
-STDINLINE stdit *stdit_prev(stdit *it)
+STDINLINE stdit *stdskl_it_prev(stdit *it)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
@@ -1135,10 +1167,10 @@
}
/************************************************************************************************
- * stdit_retreat: Advance 'it' towards end by 'num_retreat' positions.
+ * stdskl_it_retreat: Advance 'it' towards end by 'num_retreat' positions.
***********************************************************************************************/
-STDINLINE stdit *stdit_retreat(stdit *it, stdsize num_retreat)
+STDINLINE stdit *stdskl_it_retreat(stdit *it, stdsize num_retreat)
{
STDSAFETY_CHECK(STDIT_SKL_IS_LEGAL(it));
Added: vendor/stdutil/current/src/stdtest/stdskl_test.cpp
===================================================================
--- vendor/stdutil/current/src/stdtest/stdskl_test.cpp 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdtest/stdskl_test.cpp 2005-08-06 12:40:26 UTC (rev 255)
@@ -0,0 +1,395 @@
+#include <cstdio>
+#include <cstdlib>
+#include <cstring>
+#include <cassert>
+#include <map>
+#include <string>
+#include <iterator>
+
+using namespace std;
+
+#include <stdutil/stderror.h>
+#include <stdutil/stdutil.h>
+#include <stdutil/stdskl.h>
+
+#define MY_STR_MAX_CHARS 15
+
+typedef struct
+{
+ char str[MY_STR_MAX_CHARS + 1];
+
+} my_str;
+
+typedef map<string, long> map_type;
+typedef multimap<string, long> multi_type;
+
+map_type map_test, map_base;
+stdskl sklmap_test, sklmap_base;
+
+multi_type multi_test, multi_base;
+stdskl sklmulti_test, sklmulti_base;
+
+/************************************************************************************************
+ ***********************************************************************************************/
+
+size_t my_read_line(char * buf, size_t buf_size, FILE * stream)
+{
+ size_t ret = 0;
+ size_t slen;
+
+ /* read in a line */
+
+ if (fgets(buf, buf_size, stream) == NULL) {
+ goto my_read_line_end;
+ }
+
+ slen = strlen(buf);
+ assert(slen > 0);
+
+ /* remove any trailing end-of-line sequence */
+
+ if (buf[slen - 1] == '\n') {
+ buf[--slen] = '\0';
+
+ if (slen == 0) {
+ goto my_read_line_end;
+ }
+
+ if (buf[slen - 1] == '\r') {
+ buf[--slen] = '\0';
+ }
+
+ if (slen == 0) {
+ goto my_read_line_end;
+ }
+ }
+
+ ret = slen;
+
+ my_read_line_end:
+ return ret;
+}
+
+/************************************************************************************************
+ ***********************************************************************************************/
+
+void full_map_check(stdskl &skl, map_type &m)
+{
+ map_type::iterator map_it;
+ stdit it;
+ const char * prev;
+ stdsize i;
+
+ /* check that skl and m match forwards */
+
+ stdskl_begin(&skl, &it);
+ map_it = m.begin();
+ prev = NULL;
+
+ for (i = 0; map_it != m.end() && !stdskl_is_end(&skl, &it); ++map_it, stdskl_it_next(&it), ++i) {
+
+ if (strcmp(map_it->first.c_str(), (char*) stdskl_it_key(&it)) != 0) {
+ fprintf(stdout, "key mistmatch!\r\n");
+ abort();
+ }
+
+ if (map_it->second != *(long*) stdskl_it_val(&it)) {
+ fprintf(stdout, "val mismatch!\r\n");
+ abort();
+ }
+
+ if (prev != NULL && strcmp(prev, (char*) stdskl_it_key(&it)) >= 0) {
+ fprintf(stdout, "order incorrect!\r\n");
+ abort();
+ }
+
+ //fprintf(stdout, "%s\n", (char*) stdskl_it_key(&it), *(long*) stdskl_it_val(&it));
+
+ prev = (char*) stdskl_it_key(&it);
+ }
+
+ if (map_it != m.end() || !stdskl_is_end(&skl, &it) || i != m.size() || i != stdskl_size(&skl)) {
+ fprintf(stdout, "iterator mismatch!\r\n");
+ abort();
+ }
+
+ /* check that skl and m match backwards */
+
+ stdskl_end(&skl, &it);
+ map_it = m.end();
+ prev = NULL;
+
+ for (i = 0; map_it != m.begin() && !stdskl_is_begin(&skl, &it); ++i) {
+ --map_it;
+ stdskl_it_prev(&it);
+
+ if (strcmp(map_it->first.c_str(), (char*) stdskl_it_key(&it)) != 0) {
+ fprintf(stdout, "key mistmatch!\r\n");
+ abort();
+ }
+
+ if (map_it->second != *(long*) stdskl_it_val(&it)) {
+ fprintf(stdout, "val mismatch!\r\n");
+ abort();
+ }
+
+ if (prev != NULL && strcmp(prev, (char*) stdskl_it_key(&it)) <= 0) {
+ fprintf(stdout, "order incorrect!\r\n");
+ abort();
+ }
+
+ //fprintf(stdout, "%s\n", (char*) stdskl_it_key(&it), *(long*) stdskl_it_val(&it));
+
+ prev = (char*) stdskl_it_key(&it);
+ }
+
+ if (map_it != m.begin() || !stdskl_is_begin(&skl, &it) || i != m.size() || i != stdskl_size(&skl)) {
+ fprintf(stdout, "iterator mismatch!\r\n");
+ abort();
+ }
+}
+
+/************************************************************************************************
+ ***********************************************************************************************/
+
+void full_multi_check(stdskl &skl, multi_type &m)
+{
+ multi_type::iterator multi_it;
+ stdit it;
+ const char * prev;
+ stdsize i;
+
+ /* check that m and skl match forwards */
+
+ stdskl_begin(&skl, &it);
+ multi_it = m.begin();
+ prev = NULL;
+
+ for (i = 0; multi_it != m.end() && !stdskl_is_end(&skl, &it); ++multi_it, stdskl_it_next(&it), ++i) {
+
+ if (strcmp(multi_it->first.c_str(), (char*) stdskl_it_key(&it)) != 0) {
+ fprintf(stdout, "key mistmatch!\r\n");
+ abort();
+ }
+
+ if (multi_it->second != *(long*) stdskl_it_val(&it)) {
+ fprintf(stdout, "val mismatch!\r\n");
+ abort();
+ }
+
+ if (prev != NULL && strcmp(prev, (char*) stdskl_it_key(&it)) > 0) {
+ fprintf(stdout, "order incorrect!\r\n");
+ abort();
+ }
+
+ //fprintf(stdout, "%s\n", (char*) stdskl_it_key(&it), *(long*) stdskl_it_val(&it));
+
+ prev = (char*) stdskl_it_key(&it);
+ }
+
+ if (multi_it != m.end() || !stdskl_is_end(&skl, &it) || i != m.size() || i != stdskl_size(&skl)) {
+ fprintf(stdout, "iterator mismatch!\r\n");
+ abort();
+ }
+
+ /* check that m and skl match backwards */
+
+ stdskl_end(&skl, &it);
+ multi_it = m.end();
+ prev = NULL;
+
+ for (i = 0; multi_it != m.begin() && !stdskl_is_begin(&skl, &it); ++i) {
+ --multi_it;
+ stdskl_it_prev(&it);
+
+ if (strcmp(multi_it->first.c_str(), (char*) stdskl_it_key(&it)) != 0) {
+ fprintf(stdout, "key mistmatch!\r\n");
+ abort();
+ }
+
+ if (multi_it->second != *(long*) stdskl_it_val(&it)) {
+ fprintf(stdout, "val mismatch!\r\n");
+ abort();
+ }
+
+ if (prev != NULL && strcmp(prev, (char*) stdskl_it_key(&it)) < 0) {
+ fprintf(stdout, "order incorrect!\r\n");
+ abort();
+ }
+
+ //fprintf(stdout, "%s\n", (char*) stdskl_it_key(&it), *(long*) stdskl_it_val(&it));
+
+ prev = (char*) stdskl_it_key(&it);
+ }
+
+ if (multi_it != m.begin() || !stdskl_is_begin(&skl, &it) || i != m.size() || i != stdskl_size(&skl)) {
+ fprintf(stdout, "iterator mismatch!\r\n");
+ abort();
+ }
+}
+
+/************************************************************************************************
+ ***********************************************************************************************/
+
+int main(int argc, char **argv)
+{
+ stdcode ret = STDESUCCESS;
+ char buf[1024];
+ size_t slen;
+ long num_lines;
+ map_type::iterator map_it;
+ multi_type::iterator multi_it;
+ stdit it;
+ stdsize i;
+
+ srand(0);
+
+ try {
+ if ((ret = stdskl_construct(&sklmap_test, sizeof(my_str), sizeof(long), NULL)) != STDESUCCESS) {
+ goto main_end0;
+ }
+ } catch (...) {
+ goto main_end0;
+ }
+
+ try {
+ if ((ret = stdskl_construct(&sklmulti_test, sizeof(my_str), sizeof(long), NULL)) != STDESUCCESS) {
+ goto main_end1;
+ }
+ } catch (...) {
+ goto main_end1;
+ }
+
+ try {
+ /* read in stdin line by line and insert into maps */
+
+ for (num_lines = 0; (slen = my_read_line(buf, sizeof(buf), stdin)) != 0;) {
+ my_str s = { { 0 } }; /* NOTE: ensure zeroed out so that memcmp will work properly */
+
+ if (slen > MY_STR_MAX_CHARS) {
+ continue;
+ }
+
+ strcpy(s.str, buf);
+
+ /* insert into maps */
+
+ map_test[buf] = num_lines;
+
+ if ((ret = stdskl_put(&sklmap_test, &it, &s, &num_lines, STDFALSE)) != STDESUCCESS) {
+ goto main_end2;
+ }
+
+ /* insert into multi-maps */
+
+ multi_test.insert(multi_test.upper_bound(buf), pair<string, long>(buf, num_lines));
+
+ if ((ret = stdskl_insert(&sklmulti_test, stdskl_upperb(&sklmulti_test, &it, &s), &s, &num_lines, STDTRUE)) != STDESUCCESS) {
+ goto main_end2;
+ }
+
+ ++num_lines;
+ }
+
+ fprintf(stdout, "map_test size %lu; sklmap_test size %lu, multi_test size %lu; sklmulti_test size %lu\r\n",
+ map_test.size(), stdskl_size(&sklmap_test), multi_test.size(), stdskl_size(&sklmulti_test));
+
+ full_map_check(sklmap_test, map_test);
+ full_multi_check(sklmulti_test, multi_test);
+
+ /* make copies and check that they worked */
+
+ map_base = map_test;
+ multi_base = multi_test;
+
+ if ((ret = stdskl_copy_construct(&sklmap_base, &sklmap_test)) != STDESUCCESS) {
+ goto main_end2;
+ }
+
+ } catch (...) {
+ goto main_end2;
+ }
+
+ try {
+
+ if ((ret = stdskl_copy_construct(&sklmulti_base, &sklmulti_test)) != STDESUCCESS) {
+ goto main_end3;
+ }
+
+ } catch (...) {
+ goto main_end3;
+ }
+
+ try {
+ full_map_check(sklmap_base, map_base);
+ full_multi_check(sklmulti_base, multi_base);
+
+ /* perform some random deletes (this idiom has horrible performance btw) */
+
+ for (i = 0; !map_test.empty(); ++i) {
+ int r = rand() % STDMIN(1000, map_test.size());
+
+ map_it = map_test.begin();
+ advance(map_it, r);
+ map_test.erase(map_it);
+
+ stdskl_erase(&sklmap_test, stdskl_get(&sklmap_test, &it, r));
+
+ multi_it = multi_test.begin();
+ advance(multi_it, r);
+ multi_test.erase(multi_it);
+
+ stdskl_erase(&sklmulti_test, stdskl_get(&sklmulti_test, &it, r));
+ }
+
+ fprintf(stdout, "map_test size %lu; sklmap_test size %lu, multi_test size %lu; sklmulti_test size %lu\r\n",
+ map_test.size(), stdskl_size(&sklmap_test), multi_test.size(), stdskl_size(&sklmulti_test));
+
+ full_map_check(sklmap_test, map_test);
+ full_multi_check(sklmulti_test, multi_test);
+
+ /* test setting one map equal to another */
+
+ map_test = map_base;
+ multi_test = multi_base;
+
+ if ((ret = stdskl_set_eq(&sklmap_test, &sklmap_base)) != STDESUCCESS) {
+ goto main_end4;
+ }
+
+ if ((ret = stdskl_set_eq(&sklmulti_test, &sklmulti_base)) != STDESUCCESS) {
+ goto main_end4;
+ }
+
+ fprintf(stdout, "map_test size %lu; sklmap_test size %lu, multi_test size %lu; sklmulti_test size %lu\r\n",
+ map_test.size(), stdskl_size(&sklmap_test), multi_test.size(), stdskl_size(&sklmulti_test));
+
+ full_map_check(sklmap_test, map_test);
+ full_multi_check(sklmulti_test, multi_test);
+
+ fprintf(stdout, "Success!\r\n");
+ fflush(stdout);
+
+ } catch (...) {
+ goto main_end4;
+ }
+
+ main_end4:
+ stdskl_destruct(&sklmulti_base);
+
+ main_end3:
+ stdskl_destruct(&sklmap_base);
+
+ main_end2:
+ stdskl_destruct(&sklmulti_test);
+
+ main_end1:
+ stdskl_destruct(&sklmap_test);
+
+ main_end0:
+ if (ret != 0) {
+ stderr_abort("something failed with error code %d: %s\r\n", ret, stderr_strerr(ret));
+ }
+
+ return ret;
+}
Modified: vendor/stdutil/current/src/stdthread.c
===================================================================
--- vendor/stdutil/current/src/stdthread.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdthread.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -112,12 +112,17 @@
goto stdthread_join_fail;
}
- if (GetExitCodeThread(thr, &term_status) == 0) {
- goto stdthread_join_fail;
- }
+ if (exitval_ptr != NULL) {
+# if (SIZEOF_VOID_P <= 4 && SIZEOF_VOID_P <= SIZEOF_INT)
- if (exitval_ptr != NULL) {
- *exitval_ptr = (void*) term_status; /* TODO: broken if sizeof(void*) != sizeof(DWORD) */
+ if (GetExitCodeThread(thr, &term_status) == 0) {
+ goto stdthread_join_fail;
+ }
+
+ *exitval_ptr = (void*) term_status;
+# else
+ *exitval_ptr = NULL; /* can't pass a larger pointer through a 4 byte DWORD */
+# endif
}
if (CloseHandle(thr) == 0) {
@@ -147,7 +152,11 @@
STDINLINE void stdthread_exit(void *exitval)
# if defined(_WIN32)
{
- _endthreadex((unsigned) exitval); /* TODO: broken if sizeof(void*) != sizeof(DWORD) */
+# if (SIZEOF_VOID_P <= 4 && SIZEOF_VOID_P <= SIZEOF_INT)
+ _endthreadex((unsigned) exitval);
+# else
+ _endthreadex(0); /* can't pass a larger pointer through a 4 byte DWORD */
+# endif
}
# else
{
@@ -243,8 +252,8 @@
ret = STDEBUSY;
}
- } __except (GetExceptionCode() == STATUS_NO_MEMORY ||
- GetExceptionCode() == STATUS_INVALID_HANDLE ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
+ } __except ((GetExceptionCode() == STATUS_NO_MEMORY ||
+ GetExceptionCode() == STATUS_INVALID_HANDLE) ? EXCEPTION_EXECUTE_HANDLER : EXCEPTION_CONTINUE_SEARCH) {
ret = STDENOMEM;
}
@@ -282,40 +291,55 @@
{
stdcode ret;
stdbool woke_one = STDFALSE;
- DWORD err = 0;
- int loop_cnt;
if ((ret = stdmutex_impl_grab(&cond->lock, STDTRUE)) != STDESUCCESS) {
goto stdcond_wake_impl_end;
}
- while ((wake_all || !woke_one) && STDSLEEPERS_BEGIN(cond) != STDSLEEPERS_END(cond)) {
- stdcond_link * curr = STDSLEEPERS_BEGIN(cond);
- stdcond_link * next = curr->next;
- HANDLE sleeper = curr->sleeper;
+ while (ret == STDESUCCESS && (wake_all || !woke_one) && STDSLEEPERS_BEGIN(cond) != STDSLEEPERS_END(cond)) {
+ stdcond_link * curr = STDSLEEPERS_BEGIN(cond);
+ stdcond_link * next = curr->next;
+ HANDLE sleeper = curr->sleeper;
+ stdbool inf_loop = STDFALSE;
+ DWORD loop_cnt;
+ DWORD err;
- /* wake sleeper */
+ /* wake sleeper at front of sleepers list */
woke_one = STDFALSE;
- for (loop_cnt = 0; loop_cnt < 1000 && err != 1 && err != -1; ++loop_cnt) {
+ for (loop_cnt = 20; loop_cnt != 0; --loop_cnt) { /* don't try to wake sleeper more than a constant # of times */
err = ResumeThread(sleeper);
if (err == 1) {
- woke_one = STDTRUE; /* THE SLEEPER HAS AWOKEN! */
+ woke_one = STDTRUE; /* THE SLEEPER HAS AWOKEN! */
+ break;
- } else if (err == 0) { /* sleeper wasn't sleeping yet */
- Sleep(0); /* yield time slice to give sleeper a chance to hit Suspend() */
+ } else if (err == 0) {
+ Sleep(0); /* sleeper hasn't suspended yet: yield time slice and try again */
- } else if (err == -1) { /* error: remove from list + try next sleeper */
+ } else if (err == (DWORD) -1) { /* error */
ret = (stdcode) GetLastError();
+ break;
+
+ } else if (err > MAXIMUM_SUSPEND_COUNT || (err > loop_cnt && inf_loop)) {
+ ret = STDEUNKNOWN; /* suspend count acting weird: either invalid or not decrementing! */
+ break;
+
+ } else {
+ inf_loop = STDTRUE; /* only allow setting loop_cnt one time to prevent infinite loops */
+ loop_cnt = err; /* set loop_cnt to number of ResumeThreads needed */
}
-
- /* else suspended multiple times -> keep waking him */
}
- /* NOTE: if loop_cnt gets to 1000; we treat it as an error: remove from list + try next sleeper */
+ /* if ResumeThread returns 0 on the last iteration of the loop,
+ then we treat it as a (semi) success: he's already been awoken
+ */
+ if (loop_cnt == 0) {
+ woke_one = STDTRUE;
+ }
+
/* unlink curr from beginning of sleepers; reclaim handle and stdcond_link */
next->prev = STDSLEEPERS_END(cond);
@@ -353,7 +377,7 @@
/* error handling and return */
stdmutex_fast_init_fail:
- mut->mut_type = STDMUTEX_INVAL;
+ mut->mut_type = (stdmutex_type) 0;
stdmutex_fast_init_end:
return ret;
@@ -370,7 +394,7 @@
STDSAFETY_CHECK(mut->mut_type == STDMUTEX_FAST);
if ((ret = stdmutex_impl_fini(&mut->mut.fast)) == STDESUCCESS) {
- mut->mut_type = STDMUTEX_INVAL;
+ mut->mut_type = (stdmutex_type) 0;
}
return ret;
@@ -408,6 +432,7 @@
/* NOTE: this WIN32 code works for both fast and recursive mutexes:
the WIN32 stdmutex_rcrsv_cond_wait is a call through to this fcn
*/
+
stdcode ret = STDESUCCESS;
HANDLE curr_proc;
HANDLE curr_thread;
@@ -418,6 +443,8 @@
stdcond_link * my_link;
stdbool reacquire = STDFALSE;
+ STDSAFETY_CHECK(mut->mut_type == STDMUTEX_FAST || mut->mut_type == STDMUTEX_RCRSV);
+
/* check for recursive mutexes that owner only has one lock */
if (mut->mut_type == STDMUTEX_RCRSV) {
@@ -435,14 +462,10 @@
ret = STDEBUSY;
goto stdmutex_fast_cond_wait_end;
}
-
- } else if (mut->mut_type != STDMUTEX_FAST) {
- ret = STDEINVAL;
- goto stdmutex_fast_cond_wait_end;
}
/* NOTE: we DuplicateHandle because only this thread is allowed to
- use a handle from GetCurrentThread() and other threads will need
+ use a handle from GetCurrentThread() and another thread will need
to resume this thread
*/
@@ -505,16 +528,16 @@
abort();
}
- /* This gap between releasing the lock and suspending is why we
+ /* This gap between releasing cond->lock and suspending is why we
bumped up the priority to the highest level -- waker will fail to
wake us if his attempt occurs while this thread is in this gap
- and he is a higher priority thread. We need to bump to
+ and waker is a higher priority thread. We need to bump to
THREAD_PRIORITY_HIGHEST to ensure that this thread will have
equal or better capability to run as a waker. If a waker was of
higher priority, then he would just loop forever waiting for this
thread to Suspend, which would never happen due to its lower
priority.
- */
+x */
if (SuspendThread(curr_thread) == -1) {
abort();
@@ -589,7 +612,7 @@
stdmutex_impl_fini(&rmut->outer_lock);
stdmutex_rcrsv_init_fail:
- mut->mut_type = STDMUTEX_INVAL;
+ mut->mut_type = (stdmutex_type) 0;
stdmutex_rcrsv_init_end:
return ret;
@@ -620,7 +643,7 @@
goto stdmutex_rcrsv_fini_fail;
}
- mut->mut_type = STDMUTEX_INVAL;
+ mut->mut_type = (stdmutex_type) 0;
rmut->owner_cnt = -666;
rmut->num_waiting = -666;
Modified: vendor/stdutil/current/src/stdutil/private/stdarch.h.in
===================================================================
--- vendor/stdutil/current/src/stdutil/private/stdarch.h.in 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/private/stdarch.h.in 2005-08-06 12:40:26 UTC (rev 255)
@@ -23,10 +23,11 @@
#ifndef stdarch_h_2005_07_12_00_51_28_jschultz_at_cnds_jhu_edu
#define stdarch_h_2005_07_12_00_51_28_jschultz_at_cnds_jhu_edu
-#include <stddef.h>
-#include <limits.h>
+#ifdef __cplusplus
+extern "C" {
+#endif
-/* the following #undef's are filled in by the configure script */
+/* the following defines are filled in by the configure script */
#undef SIZEOF_CHAR
#undef SIZEOF_SHORT
@@ -44,14 +45,12 @@
*/
#undef STDARCH_MAX_BYTE_ALIGNMENT
-#define STDARCH_MAX_BYTE_ALIGNMENT 4
-/* check if a NULL char * is all zero in memory */
+/* check if NULL is all zero in memory for "all" types of pointers */
#undef STDARCH_NULL_IS_ZERO
-#define STDARCH_NULL_IS_ZERO 1
-/* endian reorder mapping */
+/* endian byte reordering mapping */
#undef STDENDIAN16_SWAP
@@ -83,91 +82,77 @@
#undef STDENDIAN64_HOST6_FROM_NET
#undef STDENDIAN64_HOST7_FROM_NET
-/* define std(u)int32, std(u)int64 and min/max constants */
+/* do architecture specific integer type defs and checks */
+/* ensure char's are 1 byte long */
+
#if (SIZEOF_CHAR != 1)
# error No 1 byte integer type found!
#endif
+/* ensure short's are 2 bytes long */
+
#if (SIZEOF_SHORT != 2)
# error No 2 byte integer type found!
#endif
+/* figure out which type is 4 bytes long */
+
#if (SIZEOF_INT == 4)
-typedef int stdint32;
-typedef unsigned int stduint32;
+typedef int stdarch_int32;
+typedef unsigned int stdarch_uint32;
-# define STDINT32_MAX INT_MAX
-# define STDINT32_MIN INT_MIN
-# define STDUINT32_MAX UINT_MAX
-
#elif (SIZEOF_LONG == 4)
-typedef long stdint32;
-typedef unsigned long stduint32;
+typedef long stdarch_int32;
+typedef unsigned long stdarch_uint32;
-#define STDINT32_MAX LONG_MAX
-#define STDINT32_MIN LONG_MIN
-#define STDUINT32_MAX ULONG_MAX
-
#else
# error No 4 byte integer type found!
#endif
-#if defined(_WIN32)
+/* figure out which type is 8 bytes long */
-typedef __int64 stdint64;
-typedef unsigned __int64 stduint64;
+#if (SIZEOF_LONG == 8)
-#elif (SIZEOF_LONG == 8)
+typedef long stdarch_int64;
+typedef unsigned long stdarch_uint64;
-typedef long stdint64;
-typedef unsigned long stduint64;
-
#elif (SIZEOF_LONG_LONG == 8)
-typedef long long stdint64;
-typedef unsigned long long stduint64;
+typedef long long stdarch_int64;
+typedef unsigned long long stdarch_uint64;
+#elif defined(_MSC_VER)
+
+typedef __int64 stdarch_int64;
+typedef unsigned __int64 stdarch_uint64;
+
#else
# error No 8 byte integeral type found!
#endif
-#define STDINT64_MAX (~STDINT64_MIN)
-#define STDINT64_MIN ((stdint64) 0x1 << 63)
-#define STDUINT64_MAX ((stduint64) -1)
+/* figure out which type is the same size as size_t */
-/* define stdssize type and min/max constants */
-
#if (SIZEOF_SIZE_T == 2)
-typedef short stdssize;
+typedef short stdarch_ssize;
-# define STDSSIZE_MAX SHRT_MAX
-# define STDSSIZE_MIN SHRT_MIN
-
#elif (SIZEOF_SIZE_T == 4)
-typedef stdint32 stdssize;
+typedef stdarch_int32 stdarch_ssize;
-# define STDSSIZE_MAX STDINT32_MAX
-# define STDSSIZE_MIN STDINT32_MIN
-
#elif (SIZEOF_SIZE_T == 8)
-typedef stdint64 stdssize;
+typedef stdarch_int64 stdarch_ssize;
-# define STDSSIZE_MAX STDINT64_MAX
-# define STDSSIZE_MIN STDINT64_MIN
-
#else
# error No integral type of same size as size_t!
#endif
-/* macros used for ensuring proper byte alignment of types in memory */
+#ifdef __cplusplus
+}
+#endif
-#define STDARCH_PADDING(x) ((STDARCH_MAX_BYTE_ALIGNMENT - ((x) & (STDARCH_MAX_BYTE_ALIGNMENT - 1))) & (STDARCH_MAX_BYTE_ALIGNMENT - 1))
-#define STDARCH_PADDED_SIZE(x) ((x) + STDARCH_PADDING(x))
-
#endif
Modified: vendor/stdutil/current/src/stdutil/private/stdskl_p.h
===================================================================
--- vendor/stdutil/current/src/stdutil/private/stdskl_p.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/private/stdskl_p.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -49,7 +49,7 @@
} stdskl_node;
-/* stdskl: A tree based dictionary that maps non-unique keys to values.
+/* stdskl: A skiplist based dictionary that maps non-unique keys to values.
end_node - pointer to sentinel end node of list
size - number of key-value pairs contained
@@ -74,7 +74,7 @@
stduint16 seed[3];
stduint32 rand_bits;
- stduint8 bits_left;
+ stdint8 bits_left;
} stdskl;
Modified: vendor/stdutil/current/src/stdutil/private/stdthread_p.h
===================================================================
--- vendor/stdutil/current/src/stdutil/private/stdthread_p.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/private/stdthread_p.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -56,7 +56,9 @@
semantics is to have an auto-reset EVENT that you PulseEvent N
times for each sleeping thread for wake all. If you do that you
can have a timed sleep, whereas we can't easily do that with
- SuspendThread and ResumeThread.
+ SuspendThread and ResumeThread. (Might be able to do this with a
+ dedicated 'waker' thread who manages waking up sleeping threads
+ based on timeouts)
*/
#else
@@ -70,9 +72,6 @@
#endif
-#define STDMUTEX_INVAL -1UL
-
-typedef stdulong stdmutex_type;
typedef stdmutex_impl stdmutex_fast;
typedef struct
@@ -87,7 +86,7 @@
typedef struct stdmutex
{
- volatile stdmutex_type mut_type;
+ stdmutex_type mut_type;
union {
stdmutex_fast fast;
Modified: vendor/stdutil/current/src/stdutil/stddefines.h
===================================================================
--- vendor/stdutil/current/src/stdutil/stddefines.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/stddefines.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -23,13 +23,18 @@
#ifndef stddefines_h_2000_10_22_18_20_30_jschultz_at_cnds_jhu_edu
#define stddefines_h_2000_10_22_18_20_30_jschultz_at_cnds_jhu_edu
+#include <stddef.h>
+#include <limits.h>
+
+/* include basic, architecture-specific types and constants */
+
#include <stdutil/private/stdarch.h>
#ifdef __cplusplus
extern "C" {
#endif
-/* define some useful basic types */
+/* define some useful basic types and constants */
typedef int stdbool;
@@ -62,13 +67,27 @@
#define STDINT16_MIN SHRT_MIN
#define STDUINT16_MAX USHRT_MAX
+typedef stdarch_int32 stdint32;
+typedef stdarch_uint32 stduint32;
+
+#define STDINT32_MAX (STDINT32_MIN - 1)
+#define STDINT32_MIN ((stdint32) ((stduint32) 0x1 << 31))
+#define STDUINT32_MAX ((stduint32) -1)
+
+typedef stdarch_int64 stdint64;
+typedef stdarch_uint64 stduint64;
+
+#define STDINT64_MAX (STDINT64_MIN - 1)
+#define STDINT64_MIN ((stdint64) ((stduint64) 0x1 << 63))
+#define STDUINT64_MAX ((stduint64) -1)
+
typedef size_t stdsize;
+typedef stdarch_ssize stdssize; /* a signed version of size_t */
+
+#define STDSSIZE_MAX (STDSSIZE_MIN - 1)
+#define STDSSIZE_MIN ((stdssize) ((stdsize) 0x1 << (sizeof(stdssize) * 8 - 1))
#define STDSIZE_MAX ((stdsize) -1)
-/* stdarch.h similiarly defines std(u)int32, std(u)int64, stdssize (a
- signed verion of stdsize) and associated min and max constants
-*/
-
/* define comparison fcn types */
typedef stduint32 stdhcode;
@@ -78,30 +97,37 @@
/* define some common, if dangerous, macros */
-#define STDSWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
-#define STDMAX(x, y) ((x) > (y) ? (x) : (y))
-#define STDMIN(x, y) ((x) < (y) ? (x) : (y))
+#define STDSWAP(x, y, t) ((t) = (x), (x) = (y), (y) = (t))
+#define STDMAX(x, y) ((x) > (y) ? (x) : (y))
+#define STDMIN(x, y) ((x) < (y) ? (x) : (y))
/* define some useful constants */
-#define STD1THOUSAND 1000
-#define STD1MILLION 1000000L
-#define STD1BILLION 1000000000L
+#define STD1THOUSAND 1000
+#define STD1MILLION 1000000L
+#define STD1BILLION 1000000000L
/* inline rules vary too much from language to language (C89, C99,
C++) and compiler to compiler (gcc, .NET, etc.) in non-standard
usage (i.e. - inline in C89) for stdutil to use any one inline
- syntax. The way to get inline to work as expected with stdutil is
- to have one translation unit that first #includes all of stdutil's
- .c files and then all of your app's .c files. Then #define or -D
- STDINLINE as the appropriate value for your compiler/language combo
- to get fcn inlining to work.
+ syntax. The way to get inline to work as it should with stdutil is
+ to compile all of your project in one translation unit, either
+ #define or -D an appropriate value for STDINLINE and THEN #include
+ <stdutil/> which properly includes ALL of stdutil's code. Because
+ all of your code will be in a single translation unit, the compiler
+ can then do a good job of inline'ing stdutil fcn calls, which it
+ can't do well if stdutil is a library.
*/
#ifndef STDINLINE
# define STDINLINE
#endif
+/* macros used for ensuring proper byte alignment of dynamic types in memory */
+
+#define STDARCH_PADDING(x) ((STDARCH_MAX_BYTE_ALIGNMENT - ((x) & (STDARCH_MAX_BYTE_ALIGNMENT - 1))) & (STDARCH_MAX_BYTE_ALIGNMENT - 1))
+#define STDARCH_PADDED_SIZE(x) ((x) + STDARCH_PADDING(x))
+
#ifdef __cplusplus
}
#endif
Modified: vendor/stdutil/current/src/stdutil/stderror.h
===================================================================
--- vendor/stdutil/current/src/stdutil/stderror.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/stderror.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -35,6 +35,7 @@
/* stderr error routines */
#ifndef STDERR_MAX_ERR_MSG_LEN
+/* NOTE: redefining this variable only has an effect at compile time of the stdutil LIBRARY; not app. code */
# define STDERR_MAX_ERR_MSG_LEN 1024
#endif
@@ -108,6 +109,12 @@
# define STDENOSYS 506
#endif
+#if defined(EINTR)
+# define STDEINTR EINTR
+#else
+# define STDEINTR 507
+#endif
+
#ifdef __cplusplus
}
#endif
Modified: vendor/stdutil/current/src/stdutil/stdfd.h
===================================================================
--- vendor/stdutil/current/src/stdutil/stdfd.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/stdfd.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -37,11 +37,30 @@
} stdfd;
+#define STDFD_INIT() { -1, NULL }
+
+typedef enum
+{
+ STDFD_READ_ONLY = 2000, /* rb */
+ STDFD_READ_WRITE_EXISTING, /* rb+ */
+ STDFD_WRITE_ONLY, /* wb */
+ STDFD_READ_WRITE_NEW, /* wb+ */
+ STDFD_APPEND_ONLY, /* ab */
+ STDFD_READ_APPEND /* ab+ */
+
+} stdfd_access_type; /* as per fopen(): redefined for static enum check warnings */
+
+typedef enum
+{
+ STDSEEK_SET = SEEK_SET,
+ STDSEEK_CUR = SEEK_CUR,
+ STDSEEK_END = SEEK_END
+
+} stdfd_whence; /* as per fseek(): redefined for static enum check warnings */
+
/* File Descriptor Operations */
-#define STDFD_STATIC_CONSTRUCT { -1, NULL }
-
-STDINLINE stdcode stdfd_open(stdfd *fd, const char *path, const char *mode);
+STDINLINE stdcode stdfd_open(stdfd *fd, const char *path, stdfd_access_type mode);
STDINLINE stdcode stdfd_close(stdfd *fd);
STDINLINE stdcode stdfd_read(stdfd *fd, void *ptr, stdsize nsize, stdsize nmemb, stdsize *num);
@@ -50,19 +69,9 @@
STDINLINE stdcode stdfd_flush(stdfd *fd);
STDINLINE stdcode stdfd_sync(stdfd *fd);
-typedef long stdfd_pos;
+STDINLINE stdcode stdfd_seek(stdfd *fd, long offset, stdfd_whence whence);
+STDINLINE stdcode stdfd_tell(stdfd *fd, long *pos);
-typedef enum
-{
- STDSEEK_SET = SEEK_SET,
- STDSEEK_CUR = SEEK_CUR,
- STDSEEK_END = SEEK_END
-
-} stdfd_whence;
-
-STDINLINE stdcode stdfd_seek(stdfd *fd, stdfd_pos offset, stdfd_whence whence);
-STDINLINE stdcode stdfd_get_pos(stdfd *fd, stdfd_pos *pos);
-
STDINLINE stdbool stdfd_eof(stdfd *fd);
STDINLINE stdbool stdfd_err(stdfd *fd);
STDINLINE void stdfd_clr_err(stdfd *fd);
Modified: vendor/stdutil/current/src/stdutil/stdit.h
===================================================================
--- vendor/stdutil/current/src/stdutil/stdit.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/stdit.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -44,7 +44,7 @@
STDINLINE stdit_type stdit_get_type(const stdit *it);
STDINLINE const void * stdit_key(const stdit *it); /* returns NULL for non-dictionary iterators */
-STDINLINE stdsize stdit_key_size(const stdit *it); /* returns zero for non-dictionary iterators */
+STDINLINE stdsize stdit_key_size(const stdit *it); /* returns 0 for non-dictionary iterators */
STDINLINE void * stdit_val(const stdit *it);
STDINLINE stdsize stdit_val_size(const stdit *it);
@@ -68,11 +68,11 @@
/* Pointer/C-Array Iterator Constructor */
-STDINLINE stdit * stdit_ptr(stdit *it, const void * val, stdsize vsize);
+STDINLINE stdit * stdit_ptr(stdit *it, const void * vals, stdsize vsize);
/* Parallel Pointer/C-Array Constructor */
-STDINLINE stdit * stdit_pptr(stdit *it, const void *key, const void *val, stdsize ksize, stdsize vsize);
+STDINLINE stdit * stdit_pptr(stdit *it, const void *keys, const void *vals, stdsize ksize, stdsize vsize);
#ifdef __cplusplus
}
Modified: vendor/stdutil/current/src/stdutil/stdthread.h
===================================================================
--- vendor/stdutil/current/src/stdutil/stdthread.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/stdthread.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -31,6 +31,13 @@
extern "C" {
# endif
+typedef enum
+{
+ STDMUTEX_FAST = (int) 0xa720c831UL,
+ STDMUTEX_RCRSV = (int) 0x3f6c20deUL
+
+} stdmutex_type;
+
# include <stdutil/private/stdthread_p.h>
/* Declare thread entry functions like this: void * STDTHREAD_FCN foo(void * arg); */
@@ -50,9 +57,6 @@
/* Mutual Exclusion Locks */
-# define STDMUTEX_FAST 0xa720c831UL
-# define STDMUTEX_RCRSV 0x3f6c20deUL
-
STDINLINE stdcode stdmutex_construct(stdmutex *mut, stdmutex_type t);
STDINLINE stdcode stdmutex_destruct(stdmutex *mut);
Modified: vendor/stdutil/current/src/stdutil/stdtime.h
===================================================================
--- vendor/stdutil/current/src/stdutil/stdtime.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/stdtime.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -49,7 +49,7 @@
STDINLINE stdtime stdtime_sub(stdtime ls, stdtime rs);
STDINLINE stdcode stdtime64_now(stdtime64 *abs_time);
-STDINLINE stdtime64 stdtime64_time(stdtime t); /* conversion can over/under flow */
+STDINLINE stdtime64 stdtime64_time(stdtime t); /* conversion can silently over/under flow */
/* sleep fcns */
Modified: vendor/stdutil/current/src/stdutil/stdutil.h
===================================================================
--- vendor/stdutil/current/src/stdutil/stdutil.h 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil/stdutil.h 2005-08-06 12:40:26 UTC (rev 255)
@@ -39,7 +39,7 @@
STDINLINE void * stdmemdup(const void *dupme, stdsize n);
-/* hcode fcns */
+/* 32b hcode fcns */
STDINLINE stduint32 stdhcode_oaat(const void * buf, stdsize buf_len);
Modified: vendor/stdutil/current/src/stdutil.c
===================================================================
--- vendor/stdutil/current/src/stdutil.c 2005-08-05 23:18:38 UTC (rev 254)
+++ vendor/stdutil/current/src/stdutil.c 2005-08-06 12:40:26 UTC (rev 255)
@@ -67,13 +67,15 @@
}
/************************************************************************************************
- * stdstrdup: Return a malloc'ed copy of 'dupme.'
+ * stdstrdup: Return a malloc'ed copy of 'dupme.' Returns NULL on
+ * allocation failure. If len_ptr is not NULL, then strlen(dupme)
+ * will always be placed there regardless of success or failure.
***********************************************************************************************/
STDINLINE char *stdstrdup(const char *dupme, stdsize *len_ptr)
{
stdsize len = strlen(dupme);
- char * ret = malloc(len + 1);
+ char * ret = (char*) malloc(len + 1);
if (len_ptr != NULL) {
*len_ptr = len;
@@ -83,9 +85,9 @@
}
/************************************************************************************************
- * stdstrdup_n: Like stdstrdup, but only copies up through the first
- * min('n', strlen('src')) bytes of 'src' and then adds a NUL
- * termination.
+ * stdstrdup_n: Like stdstrdup, but only allocates and copies up
+ * through the first min('n', strlen('src')) bytes of 'src' and then
+ * adds a NUL termination.
***********************************************************************************************/
STDINLINE char *stdstrdup_n(const char *src, stdsize *len_ptr, size_t n)
@@ -113,13 +115,14 @@
}
/************************************************************************************************
- * stdmemdup: Allocates a new block of memory 'n' bytes long and
- * copies the first 'n' bytes of 'src' to the new block.
+ * stdmemdup: Allocates and returns a new block of memory 'n' bytes
+ * long and copies the first 'n' bytes of 'src' to the new block. If
+ * n is zero this fcn will return NULL.
***********************************************************************************************/
STDINLINE void *stdmemdup(const void *src, size_t n)
{
- void * ret = malloc(n);
+ void * ret = (n != 0 ? malloc(n) : NULL);
if (ret != NULL) {
memcpy(ret, src, n);
@@ -139,7 +142,7 @@
{
const char * kit = (const char*) buf;
const char * kend = (const char*) buf + buf_len;
- stduint32 ret = (stduint32) buf_len;
+ stduint32 ret = ~((stduint32) buf_len);
for (; kit != kend; ++kit) {
ret += *kit;
@@ -157,14 +160,15 @@
/************************************************************************************************
* stdhcode_oaat_start: Begin computing a One-at-a-Time hash that will
* span several buffers. Preferably, but not required, tot_len would
- * equal the total length of the buffers to be hcoded. For least
- * collisions, if the total length is unknown but non-zero,
- * consistently use the same arbitrary non-zero constant (e.g. -1).
+ * equal the total length of the buffers to be hcoded. If the total
+ * length is unknown (or you simply don't want to compute it), then
+ * consistently use the same arbitrary constant (e.g. - 0) when
+ * computing the hcode for those objects.
***********************************************************************************************/
STDINLINE void stdhcode_oaat_start(stduint32 *hsh, stdsize tot_len)
{
- *hsh = (stduint32) tot_len;
+ *hsh = ~((stduint32) tot_len);
}
/************************************************************************************************
@@ -207,22 +211,22 @@
* stdhcode_sfh: Paul Hsieh's Super Fast Hash hash code function.
* Computes a 32 bit integer based on all 'buf_len' bytes of 'buf.'
* Every input bit can affect every bit of the result with about 50%
- * probability per output bit -- has no funnels. Paul Hsieh alleges
+ * probability per output bit -- has no funnels. Paul Hsieh claims
* superior speed and distribution compared to One-at-a-Time.
***********************************************************************************************/
#if ((defined(__GNUC__) && defined(__i386__)) || defined(__WATCOMC__) || defined(_MSC_VER) || \
defined (__BORLANDC__) || defined (__TURBOC__))
-# define stdhcode_sfh_get16bits(d) (*((const stduint16*) (d)))
+# define stdhcode_sfh_get16bits(d) ( *((const stduint16*)(d)) )
#else
-# define stdhcode_sfh_get16bits(d) ( (stduint16) (*((const stduint8 *)(d) + 1) << 8) + *((const stduint8 *)(d)) )
+# define stdhcode_sfh_get16bits(d) ( ((stduint16) *((const stduint8 *)(d) + 1) << 8) + *(const stduint8 *)(d) )
#endif
STDINLINE stduint32 stdhcode_sfh(const void * buf, stdsize buf_len)
{
const stduint8 * kit = (const stduint8*) buf;
- const stduint8 * kend = (const stduint8*) buf + (buf_len & ~0x3);
- stduint32 ret = (stduint32) buf_len;
+ const stduint8 * kend = (const stduint8*) buf + (buf_len & ~0x3); /* leave remainder modulo 4 */
+ stduint32 ret = ~((stduint32) buf_len);
stduint32 tmp;
/* main mixing loop */
@@ -235,7 +239,7 @@
ret += ret >> 11;
}
- /* handle remainder not handled by loop */
+ /* handle remainder modulo 4 not handled by loop */
switch (buf_len & 0x3) {
case 3:
@@ -272,14 +276,15 @@
/************************************************************************************************
* stdhcode_sfh_start: Begin computing a SuperFastHash hash that will
* span several buffers. Preferably, but not required, tot_len would
- * equal the total length of the buffers to be hash coded. For least
- * collisions, if the total length is unknown but non-zero,
- * consistently use an arbitrary constant instead of zero (e.g. -1).
+ * equal the total length of the buffers to be hash coded. If the total
+ * length is unknown (or you simply don't want to compute it), then
+ * consistently use the same arbitrary constant (e.g. - 0) when
+ * computing the hcode for those objects.
***********************************************************************************************/
STDINLINE void stdhcode_sfh_start(stduint32 *hsh, stdsize tot_len)
{
- *hsh = tot_len;
+ *hsh = ~((stduint32) tot_len);
}
/************************************************************************************************
@@ -290,7 +295,7 @@
STDINLINE void stdhcode_sfh_churn(stduint32 *hsh, const void * buf, stdsize buf_len)
{
const stduint8 * kit = (const stduint8*) buf;
- const stduint8 * kend = (const stduint8*) buf + (buf_len & ~3);
+ const stduint8 * kend = (const stduint8*) buf + (buf_len & ~0x3); /* leave remainder modulo 4 */
stduint32 ret = *hsh;
stduint32 tmp;
@@ -304,7 +309,7 @@
ret += ret >> 11;
}
- /* handle remainder not handled by loop */
+ /* handle modulo 4 remainder not handled by loop */
switch (buf_len & 3) {
case 3:
@@ -350,8 +355,8 @@
*hsh = ret;
}
-/*
- * Copyright (c) 1993 Martin Birgmeier
+
+/* Copyright (c) 1993 Martin Birgmeier
* All rights reserved.
*
* You may redistribute unmodified or modified versions of this source
@@ -467,14 +472,14 @@
/************************************************************************************************
* For the following endian flipping code, I have defined in
- * stdutil/stdutil_p.h a mapping from network byte order to host byte
- * order and the reverse mapping for several size integers.
+ * stdutil/private/stdarch.h a mapping from network byte order to host
+ * byte order and the reverse mapping for 16, 32 and 64 bit integers.
*
* For example, in a 64b integer on little endian architectures, the
- * most significant byte is the highest byte in memory (7), while on a
- * big endian architecture it is the lowest byte in memory (0). We
- * represent this information in stdutil/stdutil_p.h as, on the
- * respective architectures,
+ * most significant byte is the highest byte in memory (byte 7), while
+ * on a big endian architecture it is the lowest byte in memory (byte
+ * 0). We represent this information in stdutil/stdutil_p.h as, on
+ * the respective architectures,
*
* (#define STDENDIAN64_NET0_FROM_HOST 7, #define STDENDIAN64_HOST7_FROM_NET 0)
*
@@ -663,14 +668,15 @@
/************************************************************************************************
* stdhton_n: Rearranges the 'n' bytes at which 'io' points from host
- * into network byte ordering. If n is one of (1, 2, 4, 8), then the fcn
- * succeeds, returning zero. Otherwise it fails with no side effects,
+ * into network byte ordering. If n is one of (0, 1, 2, 4, 8), then
+ * the fcn succeeds. Otherwise it fails with no side effects,
* returning STDEINVAL.
***********************************************************************************************/
STDINLINE stdcode stdhton_n(void *io, size_t n)
{
switch (n) {
+ case 0:
case 1:
break;
@@ -869,14 +875,15 @@
/************************************************************************************************
* stdntoh_n: Rearranges the 'n' bytes at which 'io' points from
- * network to host byte ordering. If n is one of (1, 2, 4, 8), then the
- * fcn succeeds, returning zero. Otherwise it fails with no side
- * effects, returning STDEINVAL.
+ * network to host byte ordering. If n is one of (0, 1, 2, 4, 8),
+ * then the fcn succeeds. Otherwise it fails with no side effects,
+ * returning STDEINVAL.
***********************************************************************************************/
STDINLINE stdcode stdntoh_n(void *io, size_t n)
{
switch (n) {
+ case 0:
case 1:
break;
@@ -960,20 +967,20 @@
/************************************************************************************************
* stdlg_down: Returns the log base 2 of 'x' rounded down to the
* closest integer (i.e. - floor(lg(x))). Returns (stduint32) -1 if
- * 'x' 0.
+ * 'x' is 0.
***********************************************************************************************/
STDINLINE stduint32 stdlg_down(stduint64 x)
{
- stduint32 shift;
+ stduint32 ret;
if (x == 0) {
return (stduint32) -1;
}
- for (shift = 0; x != 0x1; x >>= 1, ++shift);
+ for (ret = 0; x != 0x1; x >>= 1, ++ret);
- return shift;
+ return ret;
}
/************************************************************************************************
lmpx.com only provides a reader for public news (NNTP) servers. It is not
affiliated with the servers or forums shown here and is not responsible for
the content of articles, which is written by their respective authors.