From cvs-return-1396-apmail-apr-cvs-archive=apr.apache.org@apr.apache.org Thu Jun 07 23:27:42 2001 Return-Path: Delivered-To: apmail-apr-cvs-archive@apr.apache.org Received: (qmail 18484 invoked by uid 500); 7 Jun 2001 21:38:16 -0000 Mailing-List: contact cvs-help@apr.apache.org; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Reply-To: dev@apr.apache.org Delivered-To: mailing list cvs@apr.apache.org Received: (qmail 18458 invoked by uid 500); 7 Jun 2001 21:38:15 -0000 Delivered-To: apmail-apr-site-cvs@apache.org Date: 7 Jun 2001 21:38:14 -0000 Message-ID: <20010607213814.18448.qmail@apache.org> From: gregames@apache.org To: apr-site-cvs@apache.org Subject: cvs commit: apr-site/apr2_0intro/TstAprRoutines aprfile.cpp aprmemory.cpp aprmisc.cpp aprsocket.cpp aprthreads.cpp ReadMe.txt StdAfx.cpp StdAfx.h TstAprRoutines.cpp TstAprRoutines.dsp TstAprRoutines.plg gregames 01/06/07 14:38:14 Added: apr2_0intro/TstAprRoutines aprfile.cpp aprmemory.cpp aprmisc.cpp aprsocket.cpp aprthreads.cpp ReadMe.txt StdAfx.cpp StdAfx.h TstAprRoutines.cpp TstAprRoutines.dsp TstAprRoutines.plg Log: add sample APR test routines Submitted by: Christian Gross Reviewed by: Greg Ames Revision Changes Path 1.1 apr-site/apr2_0intro/TstAprRoutines/aprfile.cpp Index: aprfile.cpp =================================================================== #include "stdafx.h" #include "apr_file_io.h" #include "apr_general.h" #include "apr_strings.h" static apr_pool_t *context; void TstDirectory() { apr_dir_t *dir; apr_file_t *file = NULL; apr_size_t bytes; apr_finfo_t dirent; printf( "Opening the root directory\n"); if (apr_dir_open(&dir, "c:\\", context) != APR_SUCCESS) { printf( "Could not open the root directory\n"); exit( -1); } printf( "Reading the directory\n"); if ((apr_dir_read( &dirent, APR_FINFO_DIRENT, dir)) != APR_SUCCESS) { printf( "Could not read the directory\n"); exit( -1); } do { printf( "Entry is %s\n", dirent.name); } while (apr_dir_read( &dirent, APR_FINFO_DIRENT | APR_FINFO_TYPE | APR_FINFO_SIZE | APR_FINFO_MTIME, dir) == APR_SUCCESS); return; } void TstReadWriteFile() { char *buffer; char ch; int status; apr_file_t *fd; apr_status_t rv; apr_finfo_t finfo; buffer = apr_pstrdup(context, "Hello world"); // Open the file for writing printf( "Writing to a file \n"); apr_file_open( &fd, "c:\\filetest.txt", APR_WRITE | APR_CREATE, -1, context); int length = strlen(buffer); if( apr_file_write( fd, buffer, &length) != APR_SUCCESS) { printf( "Yikes could not write\n"); exit( -1); } else { printf( "Data (%s) was written to the file\n", buffer); } apr_file_close( fd); // Getting some information about the file rv = apr_stat(&finfo, "c:\\filetest.txt", APR_FINFO_NORM, context); if (rv != APR_SUCCESS && rv != APR_INCOMPLETE) { printf( "Could not get the file information\n"); exit(1); } printf( "File size %ld\n", finfo.size); // Open the file for reading printf( "Reading from the file\n"); status = apr_file_open( &fd, "c:\\filetest.txt", APR_READ, -1, context); while (!status) { status = apr_file_getc(&ch, fd); if (status == APR_EOF ) { printf( "\nAt the end of the file read\n"); } else if (status == APR_SUCCESS) { printf( "%c", ch); } } apr_file_close( fd); return; } void APRFiles() { // Create the pool context if (apr_pool_create(&context, NULL) != APR_SUCCESS) { fprintf(stderr, "Couldn't allocate context."); exit(-1); } TstReadWriteFile(); TstDirectory(); apr_pool_destroy( context); return; } 1.1 apr-site/apr2_0intro/TstAprRoutines/aprmemory.cpp Index: aprmemory.cpp =================================================================== #include "stdafx.h" #include "apr_strings.h" #include "apr_pools.h" static apr_pool_t *context; static apr_pool_t *subMemoryPool, *subSubMemoryPool; static apr_status_t StringClear(void *data) { // This function is called when apr_pool_destroy is called printf( "The data to manipulate is (%s)\n", (char *)data); return APR_SUCCESS; } void TstSubDataSetting() { char *buffer; char *retBuffer; if(( apr_pool_create( &subMemoryPool, context)) != APR_SUCCESS) { printf( "Could not create memory sub-pool\n"); exit( -1); } buffer = apr_pstrdup(subMemoryPool, "Hello World"); // Create a buffer reference that corresponds to a specific index apr_pool_userdata_set( buffer, "TEST", StringClear, subMemoryPool); apr_pool_userdata_get((void **)&retBuffer, "TEST", subMemoryPool); apr_pool_destroy( subMemoryPool); } void TstSubStringAllocation() { if(( apr_pool_create( &subMemoryPool, context)) != APR_SUCCESS) { printf( "Could not create memory sub-pool\n"); exit( -1); } // Example routines to show how to manipulate strings char *buffer; char *newBuffer; buffer = apr_pstrdup( subMemoryPool, "Hello world"); newBuffer = apr_pstrcat( subMemoryPool, buffer, " and yet more data", NULL); apr_pool_destroy( subMemoryPool); return; } void TstSubMemoryAllocation() { // This function calls the above function, but also copies // the parent properties, which is context, this calls the function // apr_pool_sub_make and sets the parent attributes as default if(( apr_pool_create( &subMemoryPool, context)) != APR_SUCCESS) { printf( "Could not create memory sub-pool\n"); exit( -1); } // Lets start by allocating memory char *buffer; // QUESTION... Is this thread safe???? No lock on block splitting // Flag ALLOC_USE_MALLOC uses malloc which would be thread safe if(( buffer = (char *)apr_palloc( subMemoryPool, 100)) == NULL) { printf( "Could not allocate memory\n"); exit( -1); } strcpy( buffer, "Hello world"); char *buffer2; // Lets play with the pool memory, by first "clearing" the pool apr_pool_clear( subMemoryPool); if(( buffer2 = (char *)apr_palloc( subMemoryPool, 100)) == NULL) { printf( "Could not allocate memory\n"); exit( -1); } if( buffer == buffer2) { printf( "wow they match (but we expected this)\n"); } // Now lets actually delete the pool memory, note that the above // function is called, but the memory is actually yanked apr_pool_destroy( subMemoryPool); // ********************************************************************* // WARNING by default this will work as APR is installed // Open up aprpools.h and uncomment the flags ALLOC_DEBUG and APR_POOL_DEBUG // Then the following function call will properly fail //if(( buffer2 = (char *)apr_palloc( subMemoryPool, 100)) == NULL) { // printf( "Could not allocate memory\n"); // exit( -1); //} // ********************************************************************* if(( apr_pool_create( &subMemoryPool, context)) != APR_SUCCESS) { printf( "Could not create memory sub-pool\n"); exit( -1); } // ********************************************************************* apr_pool_clear( context); // The next function only works if APR_POOL_DEBUG is enabled // The next set of functions do not work because apr_pool_clear actually // destroys the sub pools //if( apr_pool_is_ancestor( context, subMemoryPool) != false) { // printf( "Yes the pool have a parent child relationship\n"); //} // Now lets allocate from the sub pool //if(( buffer = (char *)apr_palloc( subMemoryPool, 100)) == NULL) { // printf( "Could not allocate memory\n"); // exit( -1); //} // ********************************************************************* } void TstSimpleMemoryAllocation() { char *buffer; if(( buffer = (char *)apr_palloc( context, 100)) == NULL) { printf( "Could not allocate memory\n"); exit( -1); } strcpy( buffer, "Hello world"); } void APRMemory() { // Create the pool context if (apr_pool_create(&context, NULL) != APR_SUCCESS) { printf( "Could not allocate context\n"); exit( -1); } TstSimpleMemoryAllocation(); TstSubMemoryAllocation(); TstSubStringAllocation(); TstSubDataSetting(); // Clear the pool apr_pool_destroy( context); return; } 1.1 apr-site/apr2_0intro/TstAprRoutines/aprmisc.cpp Index: aprmisc.cpp =================================================================== #include "stdafx.h" #include "apr_general.h" #include "apr_strings.h" #include "apr_thread_proc.h" #include "apr_dso.h" #include "apr_errno.h" static apr_pool_t *context; #define LIB_NAME "" #define FILE_NAME "C:\\projects\\ApacheAPR\\TstApr\\SampleDLL\\Debug\\sampledll.dll" typedef int (*SampleFunc)(void); void TstDSO() { apr_dso_handle_t *h = NULL; apr_dso_handle_sym_t func = NULL; apr_status_t status; SampleFunc function; int retval; char filename[256]; printf( "Loading the DSO\n"); if ((status = apr_dso_load(&h, FILE_NAME, context)) != APR_SUCCESS){ char my_error[256]; apr_strerror(status, my_error, sizeof(my_error)); printf( "%s!\n", my_error); exit (-1); } if ((status = apr_dso_sym(&func, h, "fnSampleDLL")) != APR_SUCCESS) { char my_error[256]; apr_dso_error(h, my_error, sizeof(my_error)); printf( "%s\n", my_error); exit (-1); } function = (SampleFunc)func; retval = (*function)(); if (apr_dso_unload(h) != APR_SUCCESS) { printf( "Failed unload!\n"); exit (-1); } } void APRMisc() { // Create the pool context if (apr_pool_create(&context, NULL) != APR_SUCCESS) { fprintf(stderr, "Couldn't allocate context."); exit(-1); } //TstDSO(); apr_pool_destroy( context); return; } 1.1 apr-site/apr2_0intro/TstAprRoutines/aprsocket.cpp Index: aprsocket.cpp =================================================================== #include "stdafx.h" #include "apr_general.h" #include "apr_strings.h" #include "apr_thread_proc.h" static apr_pool_t *context; void APRSocket() { // Create the pool context if (apr_pool_create(&context, NULL) != APR_SUCCESS) { fprintf(stderr, "Couldn't allocate context."); exit(-1); } apr_pool_destroy( context); return; } 1.1 apr-site/apr2_0intro/TstAprRoutines/aprthreads.cpp Index: aprthreads.cpp =================================================================== #include "stdafx.h" #include "apr_general.h" #include "apr_strings.h" #include "apr_thread_proc.h" #include "apr_lock.h" static apr_pool_t *context; static apr_lock_t *lock; static long counter = 25000; void DeleteData( void *data) { printf( "Initial Count is %ld\n", *((long *)data)); return; } void * APR_THREAD_FUNC ExThreadFunc1( void *data) { long *count; apr_threadkey_t *threadData; long initialCount = *((long *)data); if( apr_threadkey_private_create( &threadData, DeleteData, context) != APR_SUCCESS) { printf( "Could not create Private Data area"); exit( -1); } apr_threadkey_private_set( &initialCount, threadData); if( apr_threadkey_private_get( (void **)&count, threadData) != APR_SUCCESS) { printf( "Oops an error\n"); exit( -1); } int i; for (i = 0; i < *count; i++) { apr_lock_acquire(lock); counter ++; apr_lock_release(lock); } return NULL; } void * APR_THREAD_FUNC ExThreadFunc2( void *data) { while( counter > 0) { apr_lock_acquire( lock); counter --; apr_lock_release( lock); } return NULL; } void TstThreadWithLock() { apr_status_t status; apr_thread_t *thread1; apr_thread_t *thread2; long initialCount = 1000; status = apr_lock_create( &lock, APR_MUTEX, APR_INTRAPROCESS, "my.lock", context); if( apr_thread_create( &thread1, NULL, ExThreadFunc1, &initialCount, context) != APR_SUCCESS) { printf( "Could not create the thread\n"); exit( -1); } if( apr_thread_create( &thread2, NULL, ExThreadFunc2, NULL, context) != NULL) { printf( "Could not create the thread\n"); exit( -1); } apr_thread_join( &status, thread1); apr_thread_join( &status, thread2); } void * APR_THREAD_FUNC ExThreadFunc( void *data) { printf( "Hello world"); // Question: Does this really do anything return NULL; } void TstSimpleThread() { apr_thread_t *thread; if( apr_thread_create(&thread, NULL, ExThreadFunc, NULL, context) != NULL) { printf( "Could not create the thread\n"); exit( -1); } apr_status_t status; apr_thread_join( &status, thread); return; } void APRThreads() { // Create the pool context if (apr_pool_create(&context, NULL) != APR_SUCCESS) { fprintf(stderr, "Couldn't allocate context."); exit(-1); } TstSimpleThread(); TstThreadWithLock(); apr_pool_destroy( context); return; } 1.1 apr-site/apr2_0intro/TstAprRoutines/ReadMe.txt Index: ReadMe.txt =================================================================== ======================================================================== CONSOLE APPLICATION : TstAprRoutines ======================================================================== AppWizard has created this TstAprRoutines application for you. This file contains a summary of what you will find in each of the files that make up your TstAprRoutines application. TstAprRoutines.dsp This file (the project file) contains information at the project level and is used to build a single project or subproject. Other users can share the project (.dsp) file, but they should export the makefiles locally. TstAprRoutines.cpp This is the main application source file. ///////////////////////////////////////////////////////////////////////////// Other standard files: StdAfx.h, StdAfx.cpp These files are used to build a precompiled header (PCH) file named TstAprRoutines.pch and a precompiled types file named StdAfx.obj. ///////////////////////////////////////////////////////////////////////////// Other notes: AppWizard uses "TODO:" to indicate parts of the source code you should add to or customize. ///////////////////////////////////////////////////////////////////////////// 1.1 apr-site/apr2_0intro/TstAprRoutines/StdAfx.cpp Index: StdAfx.cpp =================================================================== // stdafx.cpp : source file that includes just the standard includes // TstAprRoutines.pch will be the pre-compiled header // stdafx.obj will contain the pre-compiled type information #include "stdafx.h" // TODO: reference any additional headers you need in STDAFX.H // and not in this file 1.1 apr-site/apr2_0intro/TstAprRoutines/StdAfx.h Index: StdAfx.h =================================================================== // stdafx.h : include file for standard system include files, // or project specific include files that are used frequently, but // are changed infrequently // #if !defined(AFX_STDAFX_H__12BC5F39_5451_438A_80A9_4BCA0493E6DA__INCLUDED_) #define AFX_STDAFX_H__12BC5F39_5451_438A_80A9_4BCA0493E6DA__INCLUDED_ #if _MSC_VER > 1000 #pragma once #endif // _MSC_VER > 1000 #include #include "apr_general.h" // TODO: reference additional headers your program requires here //{{AFX_INSERT_LOCATION}} // Microsoft Visual C++ will insert additional declarations immediately before the previous line. #endif // !defined(AFX_STDAFX_H__12BC5F39_5451_438A_80A9_4BCA0493E6DA__INCLUDED_) 1.1 apr-site/apr2_0intro/TstAprRoutines/TstAprRoutines.cpp Index: TstAprRoutines.cpp =================================================================== // TstAprRoutines.cpp : Defines the entry point for the console application. // #include "stdafx.h" void APRFiles(); void APRMemory(); void APRThreads(); void APRMisc(); // Routine used to cleanup the APR when exiting static void closeapr(void) { apr_terminate(); } int main(int argc, char* argv[]) { printf( "Initializing the APR\n"); if (apr_initialize() != APR_SUCCESS) { printf( "Could not initialize\n"); exit(-1); } atexit(closeapr); printf( "Testing APR file routines\n"); // Memory handling routines APRMemory(); // File handling routines APRFiles(); // Thread handling routines APRThreads(); // Misc handling routines APRMisc(); printf( "Done...\n"); return 0; } 1.1 apr-site/apr2_0intro/TstAprRoutines/TstAprRoutines.dsp Index: TstAprRoutines.dsp =================================================================== # Microsoft Developer Studio Project File - Name="TstAprRoutines" - Package Owner=<4> # Microsoft Developer Studio Generated Build File, Format Version 6.00 # ** DO NOT EDIT ** # TARGTYPE "Win32 (x86) Console Application" 0x0103 CFG=TstAprRoutines - Win32 Debug !MESSAGE This is not a valid makefile. To build this project using NMAKE, !MESSAGE use the Export Makefile command and run !MESSAGE !MESSAGE NMAKE /f "TstAprRoutines.mak". !MESSAGE !MESSAGE You can specify a configuration when running NMAKE !MESSAGE by defining the macro CFG on the command line. For example: !MESSAGE !MESSAGE NMAKE /f "TstAprRoutines.mak" CFG="TstAprRoutines - Win32 Debug" !MESSAGE !MESSAGE Possible choices for configuration are: !MESSAGE !MESSAGE "TstAprRoutines - Win32 Release" (based on "Win32 (x86) Console Application") !MESSAGE "TstAprRoutines - Win32 Debug" (based on "Win32 (x86) Console Application") !MESSAGE # Begin Project # PROP AllowPerConfigDependencies 0 # PROP Scc_ProjName "" # PROP Scc_LocalPath "" CPP=cl.exe RSC=rc.exe !IF "$(CFG)" == "TstAprRoutines - Win32 Release" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 0 # PROP BASE Output_Dir "Release" # PROP BASE Intermediate_Dir "Release" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 0 # PROP Output_Dir "Release" # PROP Intermediate_Dir "Release" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c # ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /c # ADD BASE RSC /l 0x1009 /d "NDEBUG" # ADD RSC /l 0x1009 /d "NDEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386 !ELSEIF "$(CFG)" == "TstAprRoutines - Win32 Debug" # PROP BASE Use_MFC 0 # PROP BASE Use_Debug_Libraries 1 # PROP BASE Output_Dir "Debug" # PROP BASE Intermediate_Dir "Debug" # PROP BASE Target_Dir "" # PROP Use_MFC 0 # PROP Use_Debug_Libraries 1 # PROP Output_Dir "Debug" # PROP Intermediate_Dir "Debug" # PROP Target_Dir "" # ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /Yu"stdafx.h" /FD /GZ /c # ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR /Yu"stdafx.h" /FD /GZ /c # ADD BASE RSC /l 0x1009 /d "_DEBUG" # ADD RSC /l 0x1009 /d "_DEBUG" BSC32=bscmake.exe # ADD BASE BSC32 /nologo # ADD BSC32 /nologo LINK32=link.exe # ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept # ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept !ENDIF # Begin Target # Name "TstAprRoutines - Win32 Release" # Name "TstAprRoutines - Win32 Debug" # Begin Group "Source Files" # PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat" # Begin Source File SOURCE=.\aprfile.cpp # End Source File # Begin Source File SOURCE=.\aprmemory.cpp # End Source File # Begin Source File SOURCE=.\aprmisc.cpp # End Source File # Begin Source File SOURCE=.\aprthreads.cpp # End Source File # Begin Source File SOURCE=.\StdAfx.cpp # ADD CPP /Yc"stdafx.h" # End Source File # Begin Source File SOURCE=.\TstAprRoutines.cpp # End Source File # End Group # Begin Group "Header Files" # PROP Default_Filter "h;hpp;hxx;hm;inl" # Begin Source File SOURCE=.\StdAfx.h # End Source File # End Group # Begin Group "Resource Files" # PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe" # End Group # Begin Group "Library Files" # PROP Default_Filter "" # Begin Source File SOURCE=..\..\..\bin\libapr.lib # End Source File # End Group # End Target # End Project 1.1 apr-site/apr2_0intro/TstAprRoutines/TstAprRoutines.plg Index: TstAprRoutines.plg ===================================================================
  

Build Log

--------------------Configuration: TstAprRoutines - Win32 Debug--------------------

Command Lines

Creating temporary file "C:\DOCUME~1\cgross\LOCALS~1\Temp\RSP16.tmp" with contents [ /nologo /MLd /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /FR"Debug/" /Fp"Debug/TstAprRoutines.pch" /Yu"stdafx.h" /Fo"Debug/" /Fd"Debug/" /FD /GZ /c "C:\projects\ApacheAPR\TstApr\TstAprRoutines\aprmisc.cpp" "C:\projects\ApacheAPR\TstApr\TstAprRoutines\TstAprRoutines.cpp" ] Creating command line "cl.exe @C:\DOCUME~1\cgross\LOCALS~1\Temp\RSP16.tmp" Creating temporary file "C:\DOCUME~1\cgross\LOCALS~1\Temp\RSP17.tmp" with contents [ kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /incremental:yes /pdb:"Debug/TstAprRoutines.pdb" /debug /machine:I386 /out:"Debug/TstAprRoutines.exe" /pdbtype:sept .\Debug\aprfile.obj .\Debug\aprmemory.obj .\Debug\aprmisc.obj .\Debug\aprthreads.obj .\Debug\StdAfx.obj .\Debug\TstAprRoutines.obj ..\..\..\bin\libapr.lib ] Creating command line "link.exe @C:\DOCUME~1\cgross\LOCALS~1\Temp\RSP17.tmp"

Output Window

Compiling... aprmisc.cpp C:\projects\ApacheAPR\TstApr\TstAprRoutines\aprmisc.cpp(21) : warning C4101: 'filename' : unreferenced local variable TstAprRoutines.cpp Generating Code... Linking... Creating command line "bscmake.exe /nologo /o"Debug/TstAprRoutines.bsc" .\Debug\StdAfx.sbr .\Debug\aprfile.sbr .\Debug\aprmemory.sbr .\Debug\aprmisc.sbr .\Debug\aprthreads.sbr .\Debug\TstAprRoutines.sbr" Creating browse info file...

Output Window

Results

TstAprRoutines.exe - 0 error(s), 1 warning(s)