void PetscSetupUtils::CommonSetup() { InitialisePetsc(); // Check that the working directory is correct, or many tests will fail std::string cwd = GetCurrentWorkingDirectory() + "/"; if (strcmp(cwd.c_str(), ChasteBuildRootDir()) != 0) { #define COVERAGE_IGNORE // Change directory std::cout << std::endl << "Changing directory from '" << cwd << "' to '" << ChasteBuildRootDir() << "'." << std::endl; EXPECT0(chdir, ChasteBuildRootDir()); std::cout << "CWD now: " << GetCurrentWorkingDirectory() << std::endl; #undef COVERAGE_IGNORE } #ifdef TEST_FOR_FPE // Give all PETSc enabled tests the ability to trap for divide-by-zero feenableexcept(FE_DIVBYZERO | FE_INVALID ); // Catch all SIGFPE signals and convert them to exceptions (before PETSc gets to them) struct sigaction sa; sa.sa_sigaction = FpeSignalToAbort; sa.sa_flags = SA_RESETHAND|SA_SIGINFO; sa.sa_restorer = 0; sigaction(SIGFPE, &sa, NULL); #endif }
std::string GetInstallPath() { // 1. Try command line argument auto path = std::string(gCustomOpenrctDataPath); if (!path.empty()) { path = Path::GetAbsolute(path); } else { // 2. Try ${exeDir}/data auto exePath = Platform::GetCurrentExecutablePath(); auto exeDirectory = Path::GetDirectory(exePath); path = Path::Combine(exeDirectory, "data"); if (!Path::DirectoryExists(path)) { // 3. Try standard system app directories path = FindInstallPath(); if (path.empty()) { // 4. Fallback to ${cwd}/data path = GetCurrentWorkingDirectory(); if (!path.empty()) { path = Path::Combine(path, "data"); } else { return "/"; } } } } return path; }
void TestArchiveLocationInfoMethods() throw(Exception) { // These throw because we are getting things before they are set. TS_ASSERT_THROWS_THIS(ArchiveLocationInfo::GetArchiveDirectory(), "ArchiveLocationInfo::mDirAbsPath has not been set"); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetMeshFilename(),"mesh"); //default value // To test exceptions (default value is now "mesh".) ArchiveLocationInfo::SetMeshFilename(""); TS_ASSERT_THROWS_THIS(ArchiveLocationInfo::GetMeshFilename(), "ArchiveLocationInfo::mMeshFilename has not been set"); ArchiveLocationInfo::SetMeshPathname("archive_dir", "mesh_name"); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetArchiveDirectory(), OutputFileHandler::GetChasteTestOutputDirectory() + "archive_dir/"); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetMeshFilename(), "mesh_name"); // With absolute path... ArchiveLocationInfo::SetMeshPathname(ArchiveLocationInfo::GetArchiveDirectory(), "mesh_name"); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetArchiveDirectory(), OutputFileHandler::GetChasteTestOutputDirectory() + "archive_dir/"); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetMeshFilename(), "mesh_name"); FileFinder dir("new_archive_dir", RelativeTo::CWD); ArchiveLocationInfo::SetArchiveDirectory(dir); ArchiveLocationInfo::SetMeshFilename("new_mesh_name"); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetArchiveDirectory(), GetCurrentWorkingDirectory() + "/new_archive_dir/"); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetMeshFilename(), "new_mesh_name"); // This gives the absolute path, since it isn't relative to CHASTE_TEST_OUTPUT TS_ASSERT_EQUALS(ArchiveLocationInfo::GetArchiveRelativePath(), GetCurrentWorkingDirectory() + "/new_archive_dir/"); TS_ASSERT(!ArchiveLocationInfo::GetIsDirRelativeToChasteTestOutput()); FileFinder dir2("relative_archive_dir", RelativeTo::ChasteTestOutput); ArchiveLocationInfo::SetArchiveDirectory(dir2); TS_ASSERT_EQUALS(ArchiveLocationInfo::GetArchiveRelativePath(), "relative_archive_dir/"); TS_ASSERT(ArchiveLocationInfo::GetIsDirRelativeToChasteTestOutput()); }
void LTFileOperations::GetUserDirectory(char const* pszGameName, char* pDirectoryBuffer, uint32 nDirectoryBufferSize) { if (LTStrEmpty(g_szUserDirectory)) { // set to the current working directory GetCurrentWorkingDirectory(pDirectoryBuffer, nDirectoryBufferSize); } else { // use the specified user directory LTStrCpy(pDirectoryBuffer, g_szUserDirectory, nDirectoryBufferSize); } // add a trailing slash LTStrCat(pDirectoryBuffer, "/", nDirectoryBufferSize); }
//---------------------------------------------------------------------------------------- void nsSpecialSystemDirectory::operator = (SystemDirectories aSystemSystemDirectory) //---------------------------------------------------------------------------------------- { SystemDirectoriesKey dirKey(aSystemSystemDirectory); SystemDirectoriesKey mozBinDirKey(Moz_BinDirectory); // This flag is used to tell whether or not we need to append something // onto the *this. Search for needToAppend to how it's used. // IT's VERY IMPORTANT that needToAppend is initialized to PR_TRUE. PRBool needToAppend = PR_TRUE; *this = (const char*)nsnull; switch (aSystemSystemDirectory) { case OS_DriveDirectory: #if defined (XP_WIN) { char path[_MAX_PATH]; PRInt32 len = GetWindowsDirectory( path, _MAX_PATH ); if (len) { if ( path[1] == ':' && path[2] == '\\' ) path[3] = 0; } *this = MakeUpperCase(path); } #elif defined(XP_OS2) { // printf( "*** Warning warning OS_DriveDirectory called for"); ULONG ulBootDrive = 0; char buffer[] = " :\\OS2\\"; DosQuerySysInfo( QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, &ulBootDrive, sizeof ulBootDrive); buffer[0] = 'A' - 1 + ulBootDrive; // duh, 1-based index... *this = buffer; #ifdef DEBUG printf( "Got OS_DriveDirectory: %s\n", buffer); #endif } #else *this = "/"; #endif break; case OS_TemporaryDirectory: #if defined (WINCE) { *this = "\\TEMP"; } #elif defined (XP_WIN) { char path[_MAX_PATH]; DWORD len = GetTempPath(_MAX_PATH, path); *this = MakeUpperCase(path); } #elif defined(XP_OS2) { char buffer[CCHMAXPATH] = ""; char *c = getenv( "TMP"); if( c) strcpy( buffer, c); else { c = getenv( "TEMP"); if( c) strcpy( buffer, c); } if( c) *this = buffer; // use exe's directory if not set else GetCurrentProcessDirectory(*this); } #elif defined(XP_UNIX) || defined(XP_BEOS) { static const char *tPath = nsnull; if (!tPath) { tPath = PR_GetEnv("TMPDIR"); if (!tPath || !*tPath) { tPath = PR_GetEnv("TMP"); if (!tPath || !*tPath) { tPath = PR_GetEnv("TEMP"); if (!tPath || !*tPath) { tPath = "/tmp/"; } } } } *this = tPath; } #endif break; case OS_CurrentProcessDirectory: GetCurrentProcessDirectory(*this); break; case OS_CurrentWorkingDirectory: GetCurrentWorkingDirectory(*this); break; case XPCOM_CurrentProcessComponentRegistry: { nsFileSpec *dirSpec = NULL; // if someone has called nsSpecialSystemDirectory::Set() if (systemDirectoriesLocations) { // look for the value for the argument key if (!(dirSpec = (nsFileSpec *)systemDirectoriesLocations->Get(&dirKey))) { // if not found, try Moz_BinDirectory dirSpec = (nsFileSpec *) systemDirectoriesLocations->Get(&mozBinDirKey); } else { // if the value is found for the argument key, // we don't need to append. needToAppend = PR_FALSE; } } if (dirSpec) { *this = *dirSpec; } else { GetCurrentProcessDirectory(*this); } if (needToAppend) { // XXX We need to unify these names across all platforms *this += "component.reg"; } } break; case XPCOM_CurrentProcessComponentDirectory: { nsFileSpec *dirSpec = NULL; // if someone has called nsSpecialSystemDirectory::Set() if (systemDirectoriesLocations) { // look for the value for the argument key if (!(dirSpec = (nsFileSpec *)systemDirectoriesLocations->Get(&dirKey))) { // if not found, try Moz_BinDirectory dirSpec = (nsFileSpec *) systemDirectoriesLocations->Get(&mozBinDirKey); } else { // if the value is found for the argument key, // we don't need to append. needToAppend = PR_FALSE; } } if (dirSpec) { *this = *dirSpec; } else { // <exedir>/Components GetCurrentProcessDirectory(*this); } if (needToAppend) { // XXX We need to unify these names across all platforms *this += "components"; } } break; case Moz_BinDirectory: { nsFileSpec *dirSpec = NULL; // if someone has called nsSpecialSystemDirectory::Set() if (systemDirectoriesLocations) { // look for the value for the argument key dirSpec = (nsFileSpec *) systemDirectoriesLocations->Get(&dirKey); } if (dirSpec) { *this = *dirSpec; } else { GetCurrentProcessDirectory(*this); } } break; #if defined (XP_WIN) case Win_SystemDirectory: { char path[_MAX_PATH]; PRInt32 len = GetSystemDirectory( path, _MAX_PATH ); // Need enough space to add the trailing backslash if (len > _MAX_PATH-2) break; path[len] = '\\'; path[len+1] = '\0'; *this = MakeUpperCase(path); break; } case Win_WindowsDirectory: { char path[_MAX_PATH]; PRInt32 len = GetWindowsDirectory( path, _MAX_PATH ); // Need enough space to add the trailing backslash if (len > _MAX_PATH-2) break; path[len] = '\\'; path[len+1] = '\0'; *this = MakeUpperCase(path); break; } case Win_HomeDirectory: { char path[_MAX_PATH]; if (GetEnvironmentVariable(TEXT("HOME"), path, _MAX_PATH) > 0) { PRInt32 len = PL_strlen(path); // Need enough space to add the trailing backslash if (len > _MAX_PATH - 2) break; path[len] = '\\'; path[len+1] = '\0'; *this = MakeUpperCase(path); break; } if (GetEnvironmentVariable(TEXT("HOMEDRIVE"), path, _MAX_PATH) > 0) { char temp[_MAX_PATH]; if (GetEnvironmentVariable(TEXT("HOMEPATH"), temp, _MAX_PATH) > 0) PL_strcatn(path, _MAX_PATH, temp); PRInt32 len = PL_strlen(path); // Need enough space to add the trailing backslash if (len > _MAX_PATH - 2) break; path[len] = '\\'; path[len+1] = '\0'; *this = MakeUpperCase(path); break; } } case Win_Desktop: { GetWindowsFolder(CSIDL_DESKTOP, *this); break; } case Win_Programs: { GetWindowsFolder(CSIDL_PROGRAMS, *this); break; } case Win_Controls: { GetWindowsFolder(CSIDL_CONTROLS, *this); break; } case Win_Printers: { GetWindowsFolder(CSIDL_PRINTERS, *this); break; } case Win_Personal: { GetWindowsFolder(CSIDL_PERSONAL, *this); break; } case Win_Favorites: { GetWindowsFolder(CSIDL_FAVORITES, *this); break; } case Win_Startup: { GetWindowsFolder(CSIDL_STARTUP, *this); break; } case Win_Recent: { GetWindowsFolder(CSIDL_RECENT, *this); break; } case Win_Sendto: { GetWindowsFolder(CSIDL_SENDTO, *this); break; } case Win_Bitbucket: { GetWindowsFolder(CSIDL_BITBUCKET, *this); break; } case Win_Startmenu: { GetWindowsFolder(CSIDL_STARTMENU, *this); break; } case Win_Desktopdirectory: { GetWindowsFolder(CSIDL_DESKTOPDIRECTORY, *this); break; } case Win_Drives: { GetWindowsFolder(CSIDL_DRIVES, *this); break; } case Win_Network: { GetWindowsFolder(CSIDL_NETWORK, *this); break; } case Win_Nethood: { GetWindowsFolder(CSIDL_NETHOOD, *this); break; } case Win_Fonts: { GetWindowsFolder(CSIDL_FONTS, *this); break; } case Win_Templates: { GetWindowsFolder(CSIDL_TEMPLATES, *this); break; } #ifndef WINCE case Win_Common_Startmenu: { GetWindowsFolder(CSIDL_COMMON_STARTMENU, *this); break; } case Win_Common_Programs: { GetWindowsFolder(CSIDL_COMMON_PROGRAMS, *this); break; } case Win_Common_Startup: { GetWindowsFolder(CSIDL_COMMON_STARTUP, *this); break; } case Win_Common_Desktopdirectory: { GetWindowsFolder(CSIDL_COMMON_DESKTOPDIRECTORY, *this); break; } case Win_Printhood: { GetWindowsFolder(CSIDL_PRINTHOOD, *this); break; } case Win_Cookies: { GetWindowsFolder(CSIDL_COOKIES, *this); break; } #endif // WINCE case Win_Appdata: { GetWindowsFolder(CSIDL_APPDATA, *this); break; } #endif // XP_WIN #if defined(XP_UNIX) case Unix_LocalDirectory: *this = "/usr/local/netscape/"; break; case Unix_LibDirectory: *this = "/usr/local/lib/netscape/"; break; case Unix_HomeDirectory: #ifdef VMS { char *pHome; pHome = getenv("HOME"); if (*pHome == '/') *this = pHome; else *this = decc$translate_vms(pHome); } #else *this = PR_GetEnv("HOME"); #endif break; #endif #ifdef XP_BEOS case BeOS_SettingsDirectory: { char path[MAXPATHLEN]; find_directory(B_USER_SETTINGS_DIRECTORY, 0, 0, path, MAXPATHLEN); // Need enough space to add the trailing backslash int len = strlen(path); if (len > MAXPATHLEN-2) break; path[len] = '/'; path[len+1] = '\0'; *this = path; break; } case BeOS_HomeDirectory: { char path[MAXPATHLEN]; find_directory(B_USER_DIRECTORY, 0, 0, path, MAXPATHLEN); // Need enough space to add the trailing backslash int len = strlen(path); if (len > MAXPATHLEN-2) break; path[len] = '/'; path[len+1] = '\0'; *this = path; break; } case BeOS_DesktopDirectory: { char path[MAXPATHLEN]; find_directory(B_DESKTOP_DIRECTORY, 0, 0, path, MAXPATHLEN); // Need enough space to add the trailing backslash int len = strlen(path); if (len > MAXPATHLEN-2) break; path[len] = '/'; path[len+1] = '\0'; *this = path; break; } case BeOS_SystemDirectory: { char path[MAXPATHLEN]; find_directory(B_BEOS_DIRECTORY, 0, 0, path, MAXPATHLEN); // Need enough space to add the trailing backslash int len = strlen(path); if (len > MAXPATHLEN-2) break; path[len] = '/'; path[len+1] = '\0'; *this = path; break; } #endif #ifdef XP_OS2 case OS2_SystemDirectory: { ULONG ulBootDrive = 0; char buffer[] = " :\\OS2\\System\\"; DosQuerySysInfo( QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, &ulBootDrive, sizeof ulBootDrive); buffer[0] = 'A' - 1 + ulBootDrive; // duh, 1-based index... *this = buffer; #ifdef DEBUG printf( "Got OS2_SystemDirectory: %s\n", buffer); #endif break; } case OS2_OS2Directory: { ULONG ulBootDrive = 0; char buffer[] = " :\\OS2\\"; DosQuerySysInfo( QSV_BOOT_DRIVE, QSV_BOOT_DRIVE, &ulBootDrive, sizeof ulBootDrive); buffer[0] = 'A' - 1 + ulBootDrive; // duh, 1-based index... *this = buffer; #ifdef DEBUG printf( "Got OS2_OS2Directory: %s\n", buffer); #endif break; } case OS2_HomeDirectory: { char *tPath = PR_GetEnv("MOZILLA_HOME"); /* If MOZILLA_HOME is not set, use GetCurrentProcessDirectory */ /* To ensure we get a long filename system */ if (!tPath || !*tPath) GetCurrentProcessDirectory(*this); else *this = tPath; PrfWriteProfileString(HINI_USERPROFILE, "Mozilla", "Home", *this); break; } case OS2_DesktopDirectory: { char szPath[CCHMAXPATH + 1]; BOOL fSuccess; fSuccess = WinQueryActiveDesktopPathname (szPath, sizeof(szPath)); int len = strlen (szPath); if (len > CCHMAXPATH -1) break; szPath[len] = '\\'; szPath[len + 1] = '\0'; #ifdef DEBUG if (fSuccess) { printf ("Got OS2_DesktopDirectory: %s\n", szPath); } else { printf ("Failed getting OS2_DesktopDirectory: %s\n", szPath); } #endif break; } #endif default: break; } }
void CellMLToSharedLibraryConverter::ConvertCellmlToSo(const std::string& rCellmlFullPath, const std::string& rCellmlFolder) { FileFinder tmp_folder; FileFinder build_folder; std::string old_cwd = GetCurrentWorkingDirectory(); // Check that the Chaste build tree exists FileFinder chaste_root("", RelativeTo::ChasteBuildRoot); if (!chaste_root.IsDir()) { EXCEPTION("No Chaste build tree found at '" << chaste_root.GetAbsolutePath() << "' - you need the source to use CellML models directly in Chaste."); } FileFinder component_dir(mComponentName, RelativeTo::ChasteBuildRoot); if (!component_dir.IsDir()) { EXCEPTION("Unable to convert CellML model: required Chaste component '" << mComponentName << "' does not exist in '" << chaste_root.GetAbsolutePath() << "'."); } // Try the conversion try { // Need to create a .so file from the CellML... if (PetscTools::AmMaster()) { // Create a temporary folder within heart/dynamic std::stringstream folder_name; folder_name << "dynamic/tmp_" << getpid() << "_" << time(NULL); #ifdef CHASTE_CMAKE ///todo: #2656 - ignoring all cmake-specific code, revise after cmake transition #define COVERAGE_IGNORE tmp_folder.SetPath(component_dir.GetAbsolutePath() + "/" + folder_name.str(), RelativeTo::Absolute); build_folder.SetPath(component_dir.GetAbsolutePath() + "/" + folder_name.str(), RelativeTo::Absolute); #undef COVERAGE_IGNORE #else tmp_folder.SetPath(component_dir.GetAbsolutePath() + "/" + folder_name.str(), RelativeTo::Absolute); build_folder.SetPath(component_dir.GetAbsolutePath() + "/build/" + ChasteBuildDirName() + "/" + folder_name.str(), RelativeTo::Absolute); #endif int ret = mkdir((tmp_folder.GetAbsolutePath()).c_str(), 0700); if (ret != 0) { EXCEPTION("Failed to create temporary folder '" << tmp_folder.GetAbsolutePath() << "' for CellML conversion: " << strerror(errno)); } // Copy the .cellml file (and any relevant others) into the temporary folder FileFinder cellml_file(rCellmlFullPath, RelativeTo::Absolute); FileFinder cellml_folder = cellml_file.GetParent(); std::string cellml_leaf_name = cellml_file.GetLeafNameNoExtension(); std::vector<FileFinder> cellml_files = cellml_folder.FindMatches(cellml_leaf_name + "*"); BOOST_FOREACH(const FileFinder& r_cellml_file, cellml_files) { r_cellml_file.CopyTo(tmp_folder); } #ifdef CHASTE_CMAKE ///todo: #2656 - ignoring all cmake-specific code, revise after cmake transition #define COVERAGE_IGNORE std::string cmake_lists_filename = tmp_folder.GetAbsolutePath() + "/CMakeLists.txt"; std::ofstream cmake_lists_filestream(cmake_lists_filename.c_str()); cmake_lists_filestream << "cmake_minimum_required(VERSION 2.8.10)\n" << "find_package(Chaste COMPONENTS " << mComponentName << ")\n" << "chaste_do_cellml(sources " << cellml_file.GetAbsolutePath() << " " << "ON)\n" << "set(CMAKE_LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR})\n" << "include_directories(${Chaste_THIRD_PARTY_INCLUDE_DIRS} ${Chaste_INCLUDE_DIRS})\n" << "add_library(" << cellml_leaf_name << " SHARED " << "${sources})\n" //"target_link_libraries(" << cellml_leaf_name << " ${Chaste_LIBRARIES})\n" ; cmake_lists_filestream.close(); std::string cmake_args = " -DCMAKE_PREFIX_PATH=" + chaste_root.GetAbsolutePath() + " -DCMAKE_BUILD_TYPE=" + ChasteBuildType() + " -DBUILD_SHARED_LIBS=ON" + " -DENABLE_CHASTE_TESTING=OFF" + " -DChaste_USE_SHARED_LIBS=ON"; EXPECT0(chdir, tmp_folder.GetAbsolutePath()); EXPECT0(system, "cmake" + cmake_args + " ."); EXPECT0(system, "cmake --build . --config " + ChasteBuildType()); #undef COVERAGE_IGNORE #else // Change to Chaste source folder EXPECT0(chdir, chaste_root.GetAbsolutePath()); // Run scons to generate C++ code and compile it to a .so EXPECT0(system, "scons --warn=no-all dyn_libs_only=1 build=" + ChasteBuildType() + " " + tmp_folder.GetAbsolutePath()); #endif FileFinder so_file(tmp_folder.GetAbsolutePath() + "/lib" + cellml_leaf_name + "." + msSoSuffix, RelativeTo::Absolute); EXCEPT_IF_NOT(so_file.Exists()); // CD back EXPECT0(chdir, old_cwd); // Copy the .so to the same folder as the original .cellml file FileFinder destination_folder(rCellmlFolder, RelativeTo::Absolute); so_file.CopyTo(destination_folder); if (mPreserveGeneratedSources) { // Copy generated source code as well std::vector<FileFinder> generated_files = build_folder.FindMatches("*.?pp"); BOOST_FOREACH(const FileFinder& r_generated_file, generated_files) { r_generated_file.CopyTo(destination_folder); } } // Delete the temporary folders build_folder.DangerousRemove(); tmp_folder.DangerousRemove(); }
bool InitAPRGlobalStorage (APRGlobalStorage *storage_p, apr_pool_t *pool_p, apr_hashfunc_t hash_fn, unsigned char *(*make_key_fn) (const void *data_p, uint32 raw_key_length, uint32 *key_len_p), void (*free_key_and_value_fn) (unsigned char *key_p, void *value_p), server_rec *server_p, const char *mutex_filename_s, const char *cache_id_s, const char *provider_name_s) { ap_socache_provider_t *provider_p = ap_lookup_provider (AP_SOCACHE_PROVIDER_GROUP, provider_name_s, AP_SOCACHE_PROVIDER_VERSION); if (provider_p) { apr_status_t status = apr_global_mutex_create (& (storage_p -> ags_mutex_p), mutex_filename_s, APR_THREAD_MUTEX_UNNESTED, pool_p); if (status == APR_SUCCESS) { char *current_dir_s = GetCurrentWorkingDirectory (); if (current_dir_s) { storage_p -> ags_largest_entry_memory_id = AllocateSharedMemory (current_dir_s, sizeof (unsigned int), 0644); FreeCopiedString (current_dir_s); if (storage_p -> ags_largest_entry_memory_id != -1) { storage_p -> ags_entries_p = apr_hash_make_custom (pool_p, hash_fn); if (storage_p -> ags_entries_p) { storage_p -> ags_pool_p = pool_p; storage_p -> ags_server_p = server_p; storage_p -> ags_make_key_fn = make_key_fn; storage_p -> ags_free_key_and_value_fn = free_key_and_value_fn; storage_p -> ags_cache_id_s = cache_id_s; storage_p -> ags_mutex_lock_filename_s = mutex_filename_s; storage_p -> ags_socache_instance_p = NULL; storage_p -> ags_socache_provider_p = provider_p; apr_pool_cleanup_register (pool_p, storage_p, (const void *) FreeAPRGlobalStorage, apr_pool_cleanup_null); return true; } /* if (storage_p -> ags_entries_p) */ else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to allocate shared memory hash table"); } FreeSharedMemory (storage_p -> ags_largest_entry_memory_id); } /* if (storage_p -> ags_largest_entry_memory_id != -1) */ else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to allocate shared memory for largest chunk size"); } } /* if (mem_key_s) */ else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to create memory key from \"%s\" and \".memory\"", cache_id_s); } apr_global_mutex_destroy (storage_p -> ags_mutex_p); storage_p -> ags_mutex_p = NULL; } /* if (status == APR_SUCCESS) */ else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to create global mutex for shared memory at %s", mutex_filename_s); } } /* if (provider_p) */ else { PrintErrors (STM_LEVEL_SEVERE, __FILE__, __LINE__, "Failed to find provider \"%s\"", provider_name_s ? provider_name_s : "NULL"); } return false; }