summaryrefslogtreecommitdiff
path: root/ACE/tests/Unload_libACE.cpp
diff options
context:
space:
mode:
authorWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:30 +0000
committerWilliam R. Otte <wotte@dre.vanderbilt.edu>2006-07-24 15:50:30 +0000
commitc44379cc7d9c7aa113989237ab0f56db12aa5219 (patch)
tree66a84b20d47f2269d8bdc6e0323f338763424d3a /ACE/tests/Unload_libACE.cpp
parent3aff90f4a822fcf5d902bbfbcc9fa931d6191a8c (diff)
downloadATCD-c44379cc7d9c7aa113989237ab0f56db12aa5219.tar.gz
Repo restructuring
Diffstat (limited to 'ACE/tests/Unload_libACE.cpp')
-rw-r--r--ACE/tests/Unload_libACE.cpp259
1 files changed, 259 insertions, 0 deletions
diff --git a/ACE/tests/Unload_libACE.cpp b/ACE/tests/Unload_libACE.cpp
new file mode 100644
index 00000000000..a9c52e30c4c
--- /dev/null
+++ b/ACE/tests/Unload_libACE.cpp
@@ -0,0 +1,259 @@
+// $Id$
+
+// ============================================================================
+//
+// = LIBRARY
+// tests
+//
+// = FILENAME
+// Unload_libACE.cpp
+//
+// = DESCRIPTION
+// This is a simple test of library unloading that uses
+// an application which has _not_ been linked with libACE
+// but uses dlopen() to dynamically load libACE
+// and then uses dlclose() to unload it.
+//
+// = AUTHORS
+// David Smith <dts@prismtech.com> and Don Sharp <Donald.Sharp@prismtech.com>
+//
+// ============================================================================
+
+#include <stdio.h>
+
+#undef UNLOAD_LIBACE_TEST
+
+#if defined (__GNUC__)
+#if !defined (ACE_VXWORKS) && !defined (__MINGW32__) && !defined (__CYGWIN32__)
+#define UNLOAD_LIBACE_TEST 1
+#endif /* !ACE_VXWORKS && !__MINGW32__ && !CYGWIN32 */
+#endif /* __GNUC__ */
+
+#if defined (__hpux) || defined (__SUNPRO_CC)
+#define UNLOAD_LIBACE_TEST 1
+#endif /* (__hpux) || (__SUNPRO_CC) */
+
+#if defined (ACE_AS_STATIC_LIBS)
+#undef UNLOAD_LIBACE_TEST
+#endif /* ACE_AS_STATIC_LIBS */
+
+#ifdef UNLOAD_LIBACE_TEST
+
+#include <errno.h>
+#include <dlfcn.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#define TIME_STAMP_FIELD_WIDTH 32
+
+static char *
+time_stamp ( char date_and_time[], int date_and_timelen, int format )
+{
+ static char const *const month_name[] =
+ {
+ "Jan",
+ "Feb",
+ "Mar",
+ "Apr",
+ "May",
+ "Jun",
+ "Jul",
+ "Aug",
+ "Sep",
+ "Oct",
+ "Nov",
+ "Dec"
+ };
+
+ static char const *const day_of_week_name[] =
+ {
+ "Sun",
+ "Mon",
+ "Tue",
+ "Wed",
+ "Thu",
+ "Fri",
+ "Sat"
+ };
+
+ char *ts = NULL;
+
+ if ( date_and_timelen >= TIME_STAMP_FIELD_WIDTH )
+ {
+ time_t timeval;
+ struct tm *now;
+
+ time ( &timeval );
+ now = localtime ( &timeval ); /* Get current local time. */
+
+ if ( format == 'Y' )
+ {
+ sprintf ( date_and_time,
+ "%3s %3s %2d %04d %02d:%02d:%02d.%06d",
+ day_of_week_name[now->tm_wday],
+ month_name[now->tm_mon],
+ ( int ) now->tm_mday,
+ ( int ) now->tm_year + 1900,
+ ( int ) now->tm_hour,
+ ( int ) now->tm_min, ( int ) now->tm_sec, ( int ) 0 );
+ }
+ else /* 'T' */
+ {
+ sprintf ( date_and_time,
+ "%3s %2d %02d:%02d:%02d.%03d %04d",
+ month_name[now->tm_mon],
+ ( int ) now->tm_mday,
+ ( int ) now->tm_hour,
+ ( int ) now->tm_min,
+ ( int ) now->tm_sec, ( int ) 0,
+ ( int ) now->tm_year + 1900 );
+ }
+
+ ts = date_and_time;
+ }
+ return ts;
+}
+
+int
+main ( int, char ** )
+{
+ char const *const program = "UnloadLibACE";
+
+ int status = 0;
+ void *handle = NULL;
+ char *ace_root = NULL;
+ char tbuf[BUFSIZ];
+ char ybuf[BUFSIZ];
+ FILE *logfp = NULL;
+
+ if (( logfp = fopen ( "log/UnloadLibACE.log", "w" )) != NULL )
+ {
+ setvbuf ( logfp, NULL, _IONBF, 0 );
+ // reassign stdout/stderr to log file
+ int fdno = fileno ( logfp );
+
+ dup2 ( fdno, fileno ( stdout ));
+ dup2 ( fdno, fileno ( stderr ));
+ setvbuf ( stdout, NULL, _IONBF, 0 );
+ setvbuf ( stderr, NULL, _IONBF, 0 );
+ fflush ( stdout );
+ fflush ( stderr );
+
+ printf ( "%s@LM_DEBUG@ Starting %s test at %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ),
+ program, time_stamp ( ybuf, BUFSIZ, 'Y' ));
+
+ if (( ace_root = getenv ( "ACE_ROOT" )) != NULL )
+ {
+ char buf[BUFSIZ];
+
+ strcpy ( buf, ace_root );
+#if defined (__hpux)
+ strcat ( buf, "/lib/libACE.sl" );
+#else
+ strcat ( buf, "/lib/libACE.so" );
+#endif /* (__hpux) */
+
+ handle = dlopen ( buf, RTLD_LAZY );
+ if ( handle == NULL )
+ {
+ // is it because of "No such file or directory" ?
+ if ( errno != ENOENT )
+ {
+ fprintf ( stderr,
+ "%s@LM_ERROR@ dlopen() returned NULL\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ));
+ fprintf ( stderr,
+ "%s@LM_ERROR@ dlerror() says: %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), dlerror ());
+ status = 1;
+ }
+ else
+ {
+ printf ( "%s@LM_DEBUG@ dlopen() did not find %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), buf);
+ status = 0;
+ }
+ }
+ else if ( dlclose ( handle ) != 0 )
+ {
+ fprintf ( stderr,
+ "%s@LM_ERROR@ dlclose() failed : %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), strerror ( errno ));
+ status = 1;
+ }
+ }
+ else
+ {
+ fprintf ( stderr,
+ "%s@LM_ERROR@ ACE_ROOT environment variable not set\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ));
+ status = 1;
+ }
+
+ fflush ( stdout );
+ fflush ( stderr );
+ fflush ( logfp );
+
+ fclose ( logfp );
+ }
+ else
+ {
+ // Couldn't go into the log file !!!
+ printf ( "%s@LM_DEBUG@ Starting %s test at %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ),
+ program, time_stamp ( ybuf, BUFSIZ, 'Y' ));
+
+ fprintf ( stderr,
+ "%s@LM_ERROR@ Could not open log/UnloadLibACE.log : %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ), strerror ( errno ));
+ status = 1;
+ }
+
+ printf ( "%s@LM_DEBUG@ Ending %s test at %s\n",
+ time_stamp ( tbuf, BUFSIZ, 'T' ),
+ program, time_stamp ( ybuf, BUFSIZ, 'Y' ));
+
+ fflush ( stderr );
+ fflush ( stdout );
+ fclose ( stdout );
+ fclose ( stderr );
+
+ exit ( status );
+ return 0;
+}
+#else
+# if defined (WIN32) && defined (ACE_USES_WCHAR)
+// Borrow include list from ace_wchar.h
+# if defined (ACE_HAS_WINCE)
+# include /**/ <wtypes.h>
+# elif !defined (__BORLANDC__)
+# include /**/ <wchar.h>
+# endif /* ACE_HAS_WINCE || __BORLANDC__ */
+
+int
+wmain ( int, wchar_t ** )
+#else
+int
+main ( int, char ** )
+#endif /* (WIN32) && (ACE_USES_WCHAR) */
+{
+ char const *const program = "UnloadLibACE";
+
+ FILE *logfp = NULL;
+
+ if (( logfp = fopen ( "log/UnloadLibACE.log", "w" )) != NULL )
+ {
+ fprintf ( logfp, "@LM_DEBUG@ Starting %s test\n", program);
+ fprintf ( logfp, "@LM_DEBUG@ %s test not implemented for this platform\n",
+ program);
+ fprintf ( logfp, "@LM_DEBUG@ Ending %s test\n", program);
+
+ fflush ( logfp );
+ fclose ( logfp );
+ }
+ return 0;
+}
+#endif /* UNLOAD_LIBACE_TEST */