summaryrefslogtreecommitdiff
path: root/sal/osl/unx/profile.c
diff options
context:
space:
mode:
Diffstat (limited to 'sal/osl/unx/profile.c')
-rw-r--r--sal/osl/unx/profile.c2220
1 files changed, 0 insertions, 2220 deletions
diff --git a/sal/osl/unx/profile.c b/sal/osl/unx/profile.c
deleted file mode 100644
index 4a245c308..000000000
--- a/sal/osl/unx/profile.c
+++ /dev/null
@@ -1,2220 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*************************************************************************
- *
- * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
- *
- * Copyright 2000, 2010 Oracle and/or its affiliates.
- *
- * OpenOffice.org - a multi-platform office productivity suite
- *
- * This file is part of OpenOffice.org.
- *
- * OpenOffice.org is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Lesser General Public License version 3
- * only, as published by the Free Software Foundation.
- *
- * OpenOffice.org is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Lesser General Public License version 3 for more details
- * (a copy is included in the LICENSE file that accompanied this code).
- *
- * You should have received a copy of the GNU Lesser General Public License
- * version 3 along with OpenOffice.org. If not, see
- * <http://www.openoffice.org/license.html>
- * for a copy of the LGPLv3 License.
- *
- ************************************************************************/
-
-
-#include "system.h"
-#include "readwrite_helper.h"
-
-#include <osl/diagnose.h>
-#include <osl/profile.h>
-#include <osl/process.h>
-#include <osl/thread.h>
-#include <rtl/alloc.h>
-#include <osl/util.h>
-
-#define LINES_INI 32
-#define LINES_ADD 10
-#define SECTIONS_INI 5
-#define SECTIONS_ADD 3
-#define ENTRIES_INI 5
-#define ENTRIES_ADD 3
-
-
-#define STR_INI_EXTENSION "rc"
-#define STR_INI_METAHOME "?~"
-#define STR_INI_METASYS "?$"
-#define STR_INI_METACFG "?^"
-#define STR_INI_METAINS "?#"
-
-#define STR_INI_BOOLYES "yes"
-#define STR_INI_BOOLON "on"
-#define STR_INI_BOOLONE "1"
-#define STR_INI_BOOLNO "no"
-#define STR_INI_BOOLOFF "off"
-#define STR_INI_BOOLZERO "0"
-
-#define FLG_USER 0x00FF
-#define FLG_AUTOOPEN 0x0100
-#define FLG_MODIFIED 0x0200
-
-#define SVERSION_LOCATION STR_INI_METACFG
-#define SVERSION_FALLBACK STR_INI_METASYS
-#define SVERSION_NAME "sversion"
-#define SVERSION_SECTION "Versions"
-#define SVERSION_SOFFICE "StarOffice"
-#define SVERSION_PROFILE "sofficerc"
-#define SVERSION_OPTION "userid:"
-#define SVERSION_DIRS { "bin", "program" }
-#define SVERSION_USER "user"
-
-#define DEFAULT_PMODE (S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH)
-
-#define _BUILD_STR_(n) # n
-#define BUILD_STR(n) _BUILD_STR_(n)
-
-
-/*#define DEBUG_OSL_PROFILE*/
-/*#define TRACE_OSL_PROFILE*/
-
-/*****************************************************************************/
-/* Data Type Definition */
-/*****************************************************************************/
-
-typedef time_t osl_TStamp;
-
-typedef enum _osl_TLockMode
-{
- un_lock, read_lock, write_lock
-} osl_TLockMode;
-
-typedef struct _osl_TFile
-{
- int m_Handle;
- sal_Char* m_pReadPtr;
- sal_Char m_ReadBuf[512];
- sal_Char* m_pWriteBuf;
- sal_uInt32 m_nWriteBufLen;
- sal_uInt32 m_nWriteBufFree;
-} osl_TFile;
-
-typedef struct _osl_TProfileEntry
-{
- sal_uInt32 m_Line;
- sal_uInt32 m_Offset;
- sal_uInt32 m_Len;
-} osl_TProfileEntry;
-
-typedef struct _osl_TProfileSection
-{
- sal_uInt32 m_Line;
- sal_uInt32 m_Offset;
- sal_uInt32 m_Len;
- sal_uInt32 m_NoEntries;
- sal_uInt32 m_MaxEntries;
- osl_TProfileEntry* m_Entries;
-} osl_TProfileSection;
-
-
-/*
- Profile-data structure hidden behind oslProfile:
-*/
-typedef struct _osl_TProfileImpl
-{
- sal_uInt32 m_Flags;
- osl_TFile* m_pFile;
- osl_TStamp m_Stamp;
- sal_Char m_FileName[PATH_MAX + 1];
- sal_uInt32 m_NoLines;
- sal_uInt32 m_MaxLines;
- sal_uInt32 m_NoSections;
- sal_uInt32 m_MaxSections;
- sal_Char** m_Lines;
- osl_TProfileSection* m_Sections;
- pthread_mutex_t m_AccessLock;
- sal_Bool m_bIsValid;
-} osl_TProfileImpl;
-
-
-/*****************************************************************************/
-/* Static Module Function Declarations */
-/*****************************************************************************/
-
-static osl_TFile* openFileImpl(const sal_Char* pszFilename, oslProfileOption ProfileFlags);
-static osl_TStamp closeFileImpl(osl_TFile* pFile, oslProfileOption Flags);
-static sal_Bool OslProfile_lockFile(const osl_TFile* pFile, osl_TLockMode eMode);
-static sal_Bool OslProfile_rewindFile(osl_TFile* pFile, sal_Bool bTruncate);
-static osl_TStamp OslProfile_getFileStamp(osl_TFile* pFile);
-
-static sal_Char* OslProfile_getLine(osl_TFile* pFile);
-static sal_Bool OslProfile_putLine(osl_TFile* pFile, const sal_Char *pszLine);
-static sal_Char* stripBlanks(sal_Char* String, sal_uInt32* pLen);
-static sal_Char* addLine(osl_TProfileImpl* pProfile, const sal_Char* Line);
-static sal_Char* insertLine(osl_TProfileImpl* pProfile, const sal_Char* Line, sal_uInt32 LineNo);
-static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo);
-static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection,
- sal_uInt32 NoEntry, sal_uInt32 Line,
- sal_Char* Entry, sal_uInt32 Len);
-static sal_Bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection,
- int Line, sal_Char* Entry, sal_uInt32 Len);
-static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry);
-static sal_Bool addSection(osl_TProfileImpl* pProfile, int Line, const sal_Char* Section, sal_uInt32 Len);
-static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection);
-static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const sal_Char* Section,
- const sal_Char* Entry, sal_uInt32 *pNoEntry);
-static sal_Bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile);
-static sal_Bool storeProfile(osl_TProfileImpl* pProfile, sal_Bool bCleanup);
-static osl_TProfileImpl* acquireProfile(oslProfile Profile, sal_Bool bWriteable);
-static sal_Bool releaseProfile(osl_TProfileImpl* pProfile);
-
-static sal_Bool writeProfileImpl (osl_TFile* pFile);
-static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl*);
-static sal_Bool osl_ProfileSwapProfileNames(osl_TProfileImpl*);
-static void osl_ProfileGenerateExtension(sal_Char* pszFileName, sal_Char* pszExtension, sal_Char* pszTmpName);
-static oslProfile SAL_CALL osl_psz_openProfile(const sal_Char *pszProfileName, oslProfileOption Flags);
-
-/* implemented in file.c */
-extern oslFileError FileURLToPath( char *, size_t, rtl_uString* );
-
-/*****************************************************************************/
-/* Exported Module Functions */
-/*****************************************************************************/
-oslProfile SAL_CALL osl_openProfile(rtl_uString *ustrProfileName, oslProfileOption Options)
-{
- char profilePath[PATH_MAX] = "";
-
- if ( ustrProfileName != 0 && ustrProfileName->buffer[0] != 0 )
- FileURLToPath( profilePath, PATH_MAX, ustrProfileName );
-
- return osl_psz_openProfile( profilePath,Options );
-}
-
-
-static oslProfile SAL_CALL osl_psz_openProfile(const sal_Char *pszProfileName, oslProfileOption Flags)
-{
- osl_TFile* pFile;
- osl_TProfileImpl* pProfile;
- sal_Bool bRet = sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_openProfile\n");
-#endif
-
-#ifdef DEBUG_OSL_PROFILE
- Flags=osl_Profile_FLUSHWRITE;
-
- OSL_TRACE("opening '%s'\n",pszProfileName);
- if ( Flags == osl_Profile_DEFAULT )
- {
- OSL_TRACE("with osl_Profile_DEFAULT\n");
- }
- if ( Flags & osl_Profile_SYSTEM )
- {
- OSL_TRACE("with osl_Profile_SYSTEM\n");
- }
- if ( Flags & osl_Profile_READLOCK )
- {
- OSL_TRACE("with osl_Profile_READLOCK\n");
- }
- if ( Flags & osl_Profile_WRITELOCK )
- {
- OSL_TRACE("with osl_Profile_WRITELOCK\n");
- }
- if ( Flags & osl_Profile_FLUSHWRITE )
- {
- OSL_TRACE("with osl_Profile_FLUSHWRITE\n");
- }
-#endif
-
-
- if ( ( pFile = openFileImpl(pszProfileName, Flags ) ) == NULL )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_openProfile [not opened]\n");
-#endif
- return (NULL);
- }
-
-
- pProfile = (osl_TProfileImpl*)calloc(1, sizeof(osl_TProfileImpl));
-
- if ( pProfile == 0 )
- {
- closeFileImpl(pFile, Flags);
- return 0;
- }
-
- pProfile->m_Flags = Flags & FLG_USER;
-
- if ( Flags & ( osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) )
- {
- pProfile->m_pFile = pFile;
- }
-
- pthread_mutex_init(&(pProfile->m_AccessLock),PTHREAD_MUTEXATTR_DEFAULT);
- pProfile->m_bIsValid=sal_True;
-
- pProfile->m_Stamp = OslProfile_getFileStamp(pFile);
- bRet=loadProfile(pFile, pProfile);
- bRet &= realpath(pszProfileName, pProfile->m_FileName) != NULL;
- OSL_ASSERT(bRet);
-
- if (pProfile->m_pFile == NULL)
- closeFileImpl(pFile,pProfile->m_Flags);
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_openProfile [ok]\n");
-#endif
- return (pProfile);
-}
-
-sal_Bool SAL_CALL osl_closeProfile(oslProfile Profile)
-{
- osl_TProfileImpl* pProfile = (osl_TProfileImpl*)Profile;
- osl_TProfileImpl* pTmpProfile;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_closeProfile\n");
-#endif
-
- if ( Profile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_closeProfile [profile==0]\n");
-#endif
- return sal_False;
- }
-
- pthread_mutex_lock(&(pProfile->m_AccessLock));
-
- if ( pProfile->m_bIsValid == sal_False )
- {
- OSL_ASSERT(pProfile->m_bIsValid);
- pthread_mutex_unlock(&(pProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_closeProfile [not valid]\n");
-#endif
- return sal_False;
- }
-
- pProfile->m_bIsValid=sal_False;
-
- if ( ! ( pProfile->m_Flags & osl_Profile_READLOCK ) && ( pProfile->m_Flags & FLG_MODIFIED ) )
- {
- pTmpProfile = acquireProfile(Profile,sal_True);
-
- if ( pTmpProfile != 0 )
- {
- sal_Bool bRet = storeProfile(pTmpProfile, sal_True);
- OSL_ASSERT(bRet);
- (void)bRet;
- }
- }
- else
- {
- pTmpProfile = acquireProfile(Profile,sal_False);
- }
-
-
- if ( pTmpProfile == 0 )
- {
- pthread_mutex_unlock(&(pProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_closeProfile [pProfile==0]\n");
-#endif
- return sal_False;
- }
-
- pProfile = pTmpProfile;
-
- if (pProfile->m_pFile != NULL)
- closeFileImpl(pProfile->m_pFile,pProfile->m_Flags);
-
- pProfile->m_pFile = NULL;
- pProfile->m_FileName[0] = '\0';
-
- /* release whole profile data types memory */
- if ( pProfile->m_NoLines > 0)
- {
- unsigned int idx=0;
- if ( pProfile->m_Lines != 0 )
- {
- for ( idx = 0 ; idx < pProfile->m_NoLines ; ++idx)
- {
- if ( pProfile->m_Lines[idx] != 0 )
- {
- free(pProfile->m_Lines[idx]);
- pProfile->m_Lines[idx]=0;
- }
- }
- free(pProfile->m_Lines);
- pProfile->m_Lines=0;
- }
- if ( pProfile->m_Sections != 0 )
- {
- /*osl_TProfileSection* pSections=pProfile->m_Sections;*/
- for ( idx = 0 ; idx < pProfile->m_NoSections ; ++idx )
- {
- if ( pProfile->m_Sections[idx].m_Entries != 0 )
- {
- free(pProfile->m_Sections[idx].m_Entries);
- pProfile->m_Sections[idx].m_Entries=0;
- }
- }
- free(pProfile->m_Sections);
- pProfile->m_Sections=0;
- }
- }
-
- pthread_mutex_unlock(&(pProfile->m_AccessLock));
-
- pthread_mutex_destroy(&(pProfile->m_AccessLock));
-
- free(pProfile);
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_closeProfile [ok]\n");
-#endif
- return (sal_True);
-}
-
-
-sal_Bool SAL_CALL osl_flushProfile(oslProfile Profile)
-{
- osl_TProfileImpl* pProfile = (osl_TProfileImpl*) Profile;
- osl_TFile* pFile;
- sal_Bool bRet = sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_flushProfile()\n");
-#endif
-
- if ( pProfile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_flushProfile() [pProfile == 0]\n");
-#endif
- return sal_False;
- }
-
- pthread_mutex_lock(&(pProfile->m_AccessLock));
-
- if ( pProfile->m_bIsValid == sal_False )
- {
- OSL_ASSERT(pProfile->m_bIsValid);
- pthread_mutex_unlock(&(pProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_flushProfile [not valid]\n");
-#endif
- return sal_False;
- }
-
- pFile = pProfile->m_pFile;
- if ( !( pFile != 0 && pFile->m_Handle >= 0 ) )
- {
- pthread_mutex_unlock(&(pProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_flushProfile() [invalid file]\n");
-#endif
- return sal_False;
- }
-
- if ( pProfile->m_Flags & FLG_MODIFIED )
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("swapping to storeprofile\n");
-#endif
- bRet = storeProfile(pProfile,sal_False);
- OSL_ASSERT(bRet);
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_flushProfile() [ok]\n");
-#endif
- pthread_mutex_unlock(&(pProfile->m_AccessLock));
- return bRet;
-}
-
-static sal_Bool writeProfileImpl(osl_TFile* pFile)
-{
-#if OSL_DEBUG_LEVEL > 1
- unsigned int nLen=0;
-#endif
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_writeProfileImpl()\n");
-#endif
-
- if ( !( pFile != 0 && pFile->m_Handle >= 0 ) || ( pFile->m_pWriteBuf == 0 ) )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileImpl() [invalid args]\n");
-#endif
- return sal_False;
- }
-
-#if OSL_DEBUG_LEVEL > 1
- nLen=strlen(pFile->m_pWriteBuf);
- OSL_ASSERT(nLen == (pFile->m_nWriteBufLen - pFile->m_nWriteBufFree));
-#endif
-
- if ( !safeWrite(pFile->m_Handle, pFile->m_pWriteBuf, pFile->m_nWriteBufLen - pFile->m_nWriteBufFree) )
- {
- OSL_TRACE("write failed '%s'\n",strerror(errno));
- return (sal_False);
- }
-
- free(pFile->m_pWriteBuf);
- pFile->m_pWriteBuf=0;
- pFile->m_nWriteBufLen=0;
- pFile->m_nWriteBufFree=0;
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileImpl() [ok]\n");
-#endif
- return sal_True;
-}
-
-
-sal_Bool SAL_CALL osl_readProfileString(oslProfile Profile,
- const sal_Char* pszSection, const sal_Char* pszEntry,
- sal_Char* pszString, sal_uInt32 MaxLen,
- const sal_Char* pszDefault)
-{
- sal_uInt32 NoEntry;
- sal_Char* pStr=0;
- osl_TProfileSection* pSec;
- osl_TProfileImpl* pProfile=0;
- osl_TProfileImpl* pTmpProfile=0;
- sal_Bool bRet = sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_readProfileString\n");
-#endif
-
- pTmpProfile = (osl_TProfileImpl*) Profile;
-
- if ( pTmpProfile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_readProfileString [pTmpProfile==0]\n");
-#endif
- return sal_False;
- }
-
- pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
-
- if ( pTmpProfile->m_bIsValid == sal_False )
- {
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_readProfileString [not valid]\n");
-#endif
- return sal_False;
- }
-
- pProfile = acquireProfile(Profile, sal_False);
-
- if ( pProfile == NULL )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_readProfileString [pProfile==0]\n");
-#endif
- return (sal_False);
- }
-
- if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
- {
- if (((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) != NULL) &&
- (NoEntry < pSec->m_NoEntries) &&
- ((pStr = strchr(pProfile->m_Lines[pSec->m_Entries[NoEntry].m_Line],
- '=')) != NULL))
- {
- pStr++;
- }
- else
- {
- pStr=(sal_Char*)pszDefault;
- }
-
- if ( pStr != 0 )
- {
- pStr = stripBlanks(pStr, NULL);
- MaxLen = (MaxLen - 1 < strlen(pStr)) ? (MaxLen - 1) : strlen(pStr);
- pStr = stripBlanks(pStr, &MaxLen);
- strncpy(pszString, pStr, MaxLen);
- pszString[MaxLen] = '\0';
- }
- }
- else
- { /* not implemented */ }
-
-
- bRet=releaseProfile(pProfile);
- OSL_ASSERT(bRet);
- (void)bRet;
-
- if ( pStr == 0 )
- {
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_readProfileString [pStr==0]\n");
-#endif
- return sal_False;
- }
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_readProfileString [ok]\n");
-#endif
-
- return (sal_True);
-}
-
-
-sal_Bool SAL_CALL osl_readProfileBool(oslProfile Profile,
- const sal_Char* pszSection, const sal_Char* pszEntry,
- sal_Bool Default)
-{
- sal_Char Line[32];
- Line[0] = '\0';
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_readProfileBool\n");
-#endif
-
- if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), ""))
- {
- if ((strcasecmp(Line, STR_INI_BOOLYES) == 0) ||
- (strcasecmp(Line, STR_INI_BOOLON) == 0) ||
- (strcasecmp(Line, STR_INI_BOOLONE) == 0))
- Default = sal_True;
- else
- if ((strcasecmp(Line, STR_INI_BOOLNO) == 0) ||
- (strcasecmp(Line, STR_INI_BOOLOFF) == 0) ||
- (strcasecmp(Line, STR_INI_BOOLZERO) == 0))
- Default = sal_False;
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_readProfileBool [ok]\n");
-#endif
-
- return (Default);
-}
-
-
-sal_uInt32 SAL_CALL osl_readProfileIdent(oslProfile Profile,
- const sal_Char* pszSection, const sal_Char* pszEntry,
- sal_uInt32 FirstId, const sal_Char* Strings[],
- sal_uInt32 Default)
-{
- sal_uInt32 i;
- sal_Char Line[256];
- Line[0] = '\0';
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_readProfileIdent\n");
-#endif
-
- if (osl_readProfileString(Profile, pszSection, pszEntry, Line, sizeof(Line), ""))
- {
- i = 0;
- while (Strings[i] != NULL)
- {
- if (strcasecmp(Line, Strings[i]) == 0)
- {
- Default = i + FirstId;
- break;
- }
- i++;
- }
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_readProfileIdent [ok]\n");
-#endif
- return (Default);
-}
-
-sal_Bool SAL_CALL osl_writeProfileString(oslProfile Profile,
- const sal_Char* pszSection, const sal_Char* pszEntry,
- const sal_Char* pszString)
-{
- sal_uInt32 i;
- sal_Bool bRet = sal_False;
- sal_uInt32 NoEntry;
- sal_Char* pStr;
- sal_Char* Line = 0;
- osl_TProfileSection* pSec;
- osl_TProfileImpl* pProfile = 0;
- osl_TProfileImpl* pTmpProfile = 0;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_writeProfileString\n");
-#endif
-
- pTmpProfile = (osl_TProfileImpl*) Profile;
-
- if ( pTmpProfile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileString [pTmpProfile==0]\n");
-#endif
- return sal_False;
- }
-
- pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
-
- if ( pTmpProfile->m_bIsValid == sal_False )
- {
- OSL_ASSERT(pTmpProfile->m_bIsValid);
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileString [not valid]\n");
-#endif
- return sal_False;
- }
-
- pProfile=acquireProfile(Profile, sal_True);
-
- if (pProfile == NULL)
- {
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileString [pProfile==0]\n");
-#endif
- return (sal_False);
- }
-
- Line = (sal_Char*) malloc(strlen(pszEntry)+strlen(pszString)+48);
-
- if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
- {
- if ((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) == NULL)
- {
- Line[0] = '\0';
- addLine(pProfile, Line);
-
- Line[0] = '[';
- strcpy(&Line[1], pszSection);
- Line[1 + strlen(pszSection)] = ']';
- Line[2 + strlen(pszSection)] = '\0';
-
- if (((pStr = addLine(pProfile, Line)) == NULL) ||
- (! addSection(pProfile, pProfile->m_NoLines - 1, &pStr[1], strlen(pszSection))))
- {
- bRet=releaseProfile(pProfile);
- OSL_ASSERT(bRet);
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
- free(Line);
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileString [not added]\n");
-#endif
- return (sal_False);
- }
-
- pSec = &pProfile->m_Sections[pProfile->m_NoSections - 1];
- NoEntry = pSec->m_NoEntries;
- }
-
- Line[0] = '\0';
- strcpy(&Line[0], pszEntry);
- Line[0 + strlen(pszEntry)] = '=';
- strcpy(&Line[1 + strlen(pszEntry)], pszString);
-
- if (NoEntry >= pSec->m_NoEntries)
- {
- if (pSec->m_NoEntries > 0)
- i = pSec->m_Entries[pSec->m_NoEntries - 1].m_Line + 1;
- else
- i = pSec->m_Line + 1;
-
- if (((pStr = insertLine(pProfile, Line, i)) == NULL) ||
- (! addEntry(pProfile, pSec, i, pStr, strlen(pszEntry))))
- {
- bRet=releaseProfile(pProfile);
- OSL_ASSERT(bRet);
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
- free(Line);
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileString [not inserted]\n");
-#endif
- return (sal_False);
- }
-
- pProfile->m_Flags |= FLG_MODIFIED;
- }
- else
- {
- i = pSec->m_Entries[NoEntry].m_Line;
- free(pProfile->m_Lines[i]);
- pProfile->m_Lines[i] = strdup(Line);
- setEntry(pProfile, pSec, NoEntry, i, pProfile->m_Lines[i], strlen(pszEntry));
-
- pProfile->m_Flags |= FLG_MODIFIED;
- }
- }
- else {
- /* not implemented */
- }
-
- bRet = releaseProfile(pProfile);
- OSL_ASSERT(bRet);
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
- if ( Line!= 0 )
- {
- free(Line);
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileString [ok]\n");
-#endif
-
- return bRet;
-}
-
-
-sal_Bool SAL_CALL osl_writeProfileBool(oslProfile Profile,
- const sal_Char* pszSection, const sal_Char* pszEntry,
- sal_Bool Value)
-{
- sal_Bool bRet=sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_writeProfileBool\n");
-#endif
-
- if (Value)
- bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLONE);
- else
- bRet=osl_writeProfileString(Profile, pszSection, pszEntry, STR_INI_BOOLZERO);
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileBool [ok]\n");
-#endif
-
- return bRet;
-}
-
-
-sal_Bool SAL_CALL osl_writeProfileIdent(oslProfile Profile,
- const sal_Char* pszSection, const sal_Char* pszEntry,
- sal_uInt32 FirstId, const sal_Char* Strings[],
- sal_uInt32 Value)
-{
- int i, n;
- sal_Bool bRet=sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_writeProfileIdent\n");
-#endif
-
- for (n = 0; Strings[n] != NULL; n++);
-
- if ((i = Value - FirstId) >= n)
- bRet=sal_False;
- else
- bRet = osl_writeProfileString(Profile, pszSection, pszEntry, Strings[i]);
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_writeProfileIdent\n");
-#endif
- return bRet;
-}
-
-
-sal_Bool SAL_CALL osl_removeProfileEntry(oslProfile Profile,
- const sal_Char *pszSection, const sal_Char *pszEntry)
-{
- sal_uInt32 NoEntry;
- osl_TProfileSection* pSec;
- osl_TProfileImpl* pProfile = 0;
- osl_TProfileImpl* pTmpProfile = 0;
- sal_Bool bRet = sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_removeProfileEntry\n");
-#endif
-
- pTmpProfile = (osl_TProfileImpl*) Profile;
-
- if ( pTmpProfile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_removeProfileEntry [pProfile==0]\n");
-#endif
- return sal_False;
- }
-
- pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
-
- if ( pTmpProfile->m_bIsValid == sal_False )
- {
- OSL_ASSERT(pTmpProfile->m_bIsValid);
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_removeProfileEntry [not valid]\n");
-#endif
- return sal_False;
- }
-
-
- pProfile = acquireProfile(Profile, sal_True);
-
- if (pProfile == NULL)
- {
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_removeProfileEntry [pProfile==0]\n");
-#endif
- return (sal_False);
- }
-
-
- if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
- {
- if (((pSec = findEntry(pProfile, pszSection, pszEntry, &NoEntry)) != NULL) &&
- (NoEntry < pSec->m_NoEntries))
- {
- removeLine(pProfile, pSec->m_Entries[NoEntry].m_Line);
- removeEntry(pSec, NoEntry);
- if (pSec->m_NoEntries == 0)
- {
- removeLine(pProfile, pSec->m_Line);
-
- /* remove any empty separation line */
- if ((pSec->m_Line > 0) && (pProfile->m_Lines[pSec->m_Line - 1][0] == '\0'))
- removeLine(pProfile, pSec->m_Line - 1);
-
- removeSection(pProfile, pSec);
- }
-
- pProfile->m_Flags |= FLG_MODIFIED;
- }
- }
- else
- { /* not implemented */ }
-
-
- bRet = releaseProfile(pProfile);
- OSL_ASSERT(bRet);
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_removeProfileEntry [ok]\n");
-#endif
- return bRet;
-}
-
-
-sal_uInt32 SAL_CALL osl_getProfileSectionEntries(oslProfile Profile, const sal_Char *pszSection,
- sal_Char* pszBuffer, sal_uInt32 MaxLen)
-{
- sal_uInt32 i, n = 0;
- sal_uInt32 NoEntry;
- osl_TProfileSection* pSec;
- osl_TProfileImpl* pProfile = 0;
- osl_TProfileImpl* pTmpProfile = 0;
- sal_Bool bRet = sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_getProfileSectionEntries\n");
-#endif
-
- pTmpProfile = (osl_TProfileImpl*) Profile;
-
- if ( pTmpProfile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSectionEntries [pTmpProfile==0]\n");
-#endif
- return sal_False;
-
- }
-
- pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
-
- if ( pTmpProfile->m_bIsValid == sal_False )
- {
- OSL_ASSERT(pTmpProfile->m_bIsValid);
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSectionEntries [not valid]\n");
-#endif
-
- return sal_False;
- }
-
- pProfile = acquireProfile(Profile, sal_False);
-
- if (pProfile == NULL)
- {
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSectionEntries [pProfile=0]\n");
-#endif
-
- return (0);
- }
-
-
- if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
- {
- if ((pSec = findEntry(pProfile, pszSection, "", &NoEntry)) != NULL)
- {
- if (MaxLen != 0)
- {
- for (i = 0; i < pSec->m_NoEntries; i++)
- {
- if ((n + pSec->m_Entries[i].m_Len + 1) < MaxLen)
- {
- strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Entries[i].m_Line]
- [pSec->m_Entries[i].m_Offset], pSec->m_Entries[i].m_Len);
- n += pSec->m_Entries[i].m_Len;
- pszBuffer[n++] = '\0';
- }
- else
- break;
-
- }
-
- pszBuffer[n++] = '\0';
- }
- else
- {
- for (i = 0; i < pSec->m_NoEntries; i++)
- n += pSec->m_Entries[i].m_Len + 1;
-
- n += 1;
- }
- }
- else
- n = 0;
- }
- else {
- /* not implemented */
- }
-
- bRet=releaseProfile(pProfile);
- OSL_ASSERT(bRet);
- (void)bRet;
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSectionEntries [ok]\n");
-#endif
-
- return (n);
-}
-
-sal_uInt32 SAL_CALL osl_getProfileSections(oslProfile Profile, sal_Char* pszBuffer, sal_uInt32 MaxLen)
-{
- sal_uInt32 i, n = 0;
- osl_TProfileSection* pSec;
- osl_TProfileImpl* pProfile = 0;
- osl_TProfileImpl* pTmpProfile = 0;
- sal_Bool bRet = sal_False;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_getProfileSections\n");
-#endif
-
- pTmpProfile = (osl_TProfileImpl*) Profile;
-
- if ( pTmpProfile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSections [pTmpProfile==0]\n");
-#endif
- return sal_False;
- }
-
- pthread_mutex_lock(&(pTmpProfile->m_AccessLock));
-
- if ( pTmpProfile->m_bIsValid == sal_False )
- {
- OSL_ASSERT(pTmpProfile->m_bIsValid);
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSections [not valid]\n");
-#endif
- return sal_False;
- }
-
- pProfile = acquireProfile(Profile, sal_False);
-
- if (pProfile == NULL)
- {
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSections [pProfile==0]\n");
-#endif
- return (0);
- }
-
- if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
- {
- if (MaxLen != 0)
- {
- for (i = 0; i < pProfile->m_NoSections; i++)
- {
- pSec = &pProfile->m_Sections[i];
-
- if ((n + pSec->m_Len + 1) < MaxLen)
- {
- strncpy(&pszBuffer[n], &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset],
- pSec->m_Len);
- n += pSec->m_Len;
- pszBuffer[n++] = '\0';
- }
- else
- break;
- }
-
- pszBuffer[n++] = '\0';
- }
- else
- {
- for (i = 0; i < pProfile->m_NoSections; i++)
- n += pProfile->m_Sections[i].m_Len + 1;
-
- n += 1;
- }
- }
- else
- { /* not implemented */ }
-
-
- bRet=releaseProfile(pProfile);
- OSL_ASSERT(bRet);
- (void)bRet;
-
- pthread_mutex_unlock(&(pTmpProfile->m_AccessLock));
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_getProfileSections [ok]\n");
-#endif
-
- return (n);
-}
-
-/*****************************************************************************/
-/* Static Module Functions */
-/*****************************************************************************/
-
-static osl_TStamp OslProfile_getFileStamp(osl_TFile* pFile)
-{
- struct stat status;
-
- if ( (pFile->m_Handle < 0) || (fstat(pFile->m_Handle, &status) < 0) )
- {
- return (0);
- }
-
-
- return (status.st_mtime);
-}
-
-static sal_Bool OslProfile_lockFile(const osl_TFile* pFile, osl_TLockMode eMode)
-{
- struct flock lock;
- /* boring hack, but initializers for static vars must be constant */
- static sal_Bool bIsInitialized = sal_False;
- static sal_Bool bLockingDisabled;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In OslProfile_lockFile\n");
-#endif
-
- if ( !bIsInitialized )
- {
- sal_Char* pEnvValue;
- pEnvValue = getenv( "STAR_PROFILE_LOCKING_DISABLED" );
-
- if ( pEnvValue == 0 )
- {
- bLockingDisabled = sal_False;
-
- }
- else
- {
- bLockingDisabled = sal_True;
- }
-
- bIsInitialized = sal_True;
- }
-
- if (pFile->m_Handle < 0)
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out OslProfile_lockFile [invalid file handle]\n");
-#endif
- return (sal_False);
- }
-
-
- if ( bLockingDisabled )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out OslProfile_lockFile [locking disabled]\n");
-#endif
- return (sal_True);
- }
-
-
- lock.l_start = 0;
- lock.l_whence = SEEK_SET;
- lock.l_len = 0;
-
- switch (eMode)
- {
- case un_lock:
- lock.l_type = F_UNLCK;
- break;
-
- case read_lock:
- lock.l_type = F_RDLCK;
- break;
-
- case write_lock:
- lock.l_type = F_WRLCK;
- break;
- }
-
-#ifndef MACOSX // not MAC OSX
- if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 )
-#else
- /* Mac OSX will return ENOTSUP for webdav drives so we should ignore it */
- if ( fcntl(pFile->m_Handle, F_SETLKW, &lock) == -1 && errno != ENOTSUP )
-#endif /* MACOSX */
- {
- OSL_TRACE("fcntl returned -1 (%s)\n",strerror(errno));
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out OslProfile_lockFile [fcntl F_SETLKW]\n");
-#endif
- return sal_False;
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out OslProfile_lockFile [ok]\n");
-#endif
- return sal_True;
-}
-
-static osl_TFile* openFileImpl(const sal_Char* pszFilename, oslProfileOption ProfileFlags )
-{
- int Flags;
- osl_TFile* pFile = (osl_TFile*) calloc(1, sizeof(osl_TFile));
- sal_Bool bWriteable = sal_False;
-
- if ( ProfileFlags & ( osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE ) )
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("setting bWriteable to TRUE\n");
-#endif
- bWriteable=sal_True;
- }
-
- if (! bWriteable)
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("opening '%s' read only\n",pszFilename);
-#endif
-
- pFile->m_Handle = open(pszFilename, O_RDONLY);
- /* mfe: argghh!!! do not check if the file could be openend */
- /* default mode expects it that way!!! */
- }
- else
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("opening '%s' read/write\n",pszFilename);
-#endif
- if (((pFile->m_Handle = open(pszFilename, O_RDWR | O_CREAT | O_EXCL, DEFAULT_PMODE)) < 0) &&
- ((pFile->m_Handle = open(pszFilename, O_RDWR)) < 0))
- {
- free(pFile);
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out openFileImpl [open read/write]\n");
-#endif
- return (NULL);
- }
- }
-
- /* set close-on-exec flag */
- if ((Flags = fcntl(pFile->m_Handle, F_GETFD, 0)) != -1)
- {
- Flags |= FD_CLOEXEC;
- fcntl(pFile->m_Handle, F_SETFD, Flags);
- }
-
- pFile->m_pWriteBuf=0;
- pFile->m_nWriteBufFree=0;
- pFile->m_nWriteBufLen=0;
-
- if ( ProfileFlags & (osl_Profile_WRITELOCK | osl_Profile_READLOCK ) )
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("locking '%s' file\n",pszFilename);
-#endif
- OslProfile_lockFile(pFile, bWriteable ? write_lock : read_lock);
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out openFileImpl [ok]\n");
-#endif
- return (pFile);
-}
-
-static osl_TStamp closeFileImpl(osl_TFile* pFile, oslProfileOption Flags)
-{
- osl_TStamp stamp = 0;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In closeFileImpl\n");
-#endif
-
- if ( pFile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out closeFileImpl [pFile == 0]\n");
-#endif
- return stamp;
- }
-
- if ( pFile->m_Handle >= 0 )
- {
- stamp = OslProfile_getFileStamp(pFile);
-
- if ( Flags & (osl_Profile_WRITELOCK | osl_Profile_WRITELOCK ) )
- {
- OslProfile_lockFile(pFile, un_lock);
- }
-
- close(pFile->m_Handle);
- pFile->m_Handle = -1;
- }
-
-
- if ( pFile->m_pWriteBuf )
- {
- free(pFile->m_pWriteBuf);
- }
-
- free(pFile);
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out closeFileImpl [ok]\n");
-#endif
-
- return(stamp);
-}
-
-static sal_Bool OslProfile_rewindFile(osl_TFile* pFile, sal_Bool bTruncate)
-{
- sal_Bool bRet = sal_True;
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In osl_OslProfile_rewindFile\n");
-#endif
-
- if (pFile->m_Handle >= 0)
- {
- pFile->m_pReadPtr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf);
-
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("rewinding\n");
-#endif
- bRet = (lseek(pFile->m_Handle, SEEK_SET, 0L) == 0L);
-
- if (bTruncate)
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("truncating\n");
-#endif
- bRet &= (ftruncate(pFile->m_Handle, 0L) == 0);
- }
-
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out osl_OslProfile_rewindFile [ok]\n");
-#endif
- return bRet;
-}
-
-
-static sal_Char* OslProfile_getLine(osl_TFile* pFile)
-{
- int Max, Free, Bytes, nLineBytes = 0;
- sal_Char* pChr;
- sal_Char* pLine = NULL;
- sal_Char* pNewLine;
-
- if ( pFile == 0 )
- {
- return 0;
- }
-
- if (pFile->m_Handle < 0)
- return NULL;
-
- do
- {
- Bytes = sizeof(pFile->m_ReadBuf) - (pFile->m_pReadPtr - pFile->m_ReadBuf);
-
- if (Bytes <= 1)
- {
- /* refill buffer */
- memcpy(pFile->m_ReadBuf, pFile->m_pReadPtr, Bytes);
- pFile->m_pReadPtr = pFile->m_ReadBuf;
-
- Free = sizeof(pFile->m_ReadBuf) - Bytes;
-
- if ((Max = read(pFile->m_Handle, &pFile->m_ReadBuf[Bytes], Free)) < 0)
- {
- OSL_TRACE("read failed '%s'\n",strerror(errno));
-
- if( pLine )
- rtl_freeMemory( pLine );
- pLine = NULL;
- break;
- }
-
- if (Max < Free)
- {
- if ((Max == 0) && ! pLine)
- break;
-
- pFile->m_ReadBuf[Bytes + Max] = '\0';
- }
- }
-
- for (pChr = pFile->m_pReadPtr;
- (*pChr != '\n') && (*pChr != '\r') && (*pChr != '\0') &&
- (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1));
- pChr++);
-
- Max = pChr - pFile->m_pReadPtr;
- pNewLine = (sal_Char*) rtl_allocateMemory( nLineBytes + Max + 1 );
- if( pLine )
- {
- memcpy( pNewLine, pLine, nLineBytes );
- rtl_freeMemory( pLine );
- }
- memcpy(pNewLine+nLineBytes, pFile->m_pReadPtr, Max);
- nLineBytes += Max;
- pNewLine[ nLineBytes ] = 0;
- pLine = pNewLine;
-
- if (pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf) - 1))
- {
- if (*pChr != '\0')
- {
- if ((pChr[0] == '\r') && (pChr[1] == '\n'))
- pChr += 2;
- else
- pChr += 1;
- }
-
- if ((pChr < (pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf))) &&
- (*pChr == '\0'))
- pChr = pFile->m_ReadBuf + sizeof(pFile->m_ReadBuf);
-
- /* setting Max to -1 indicates terminating read loop */
- Max = -1;
- }
-
- pFile->m_pReadPtr = pChr;
- }
- while (Max > 0);
-
- return pLine;
-}
-
-static sal_Bool OslProfile_putLine(osl_TFile* pFile, const sal_Char *pszLine)
-{
- unsigned int Len = strlen(pszLine);
-
-#ifdef DEBUG_OSL_PROFILE
- int strLen=0;
-#endif
-
- if ( pFile == 0 || pFile->m_Handle < 0 )
- {
- return (sal_False);
- }
-
- if ( pFile->m_pWriteBuf == 0 )
- {
- pFile->m_pWriteBuf = (sal_Char*) malloc(Len+3);
- pFile->m_nWriteBufLen = Len+3;
- pFile->m_nWriteBufFree = Len+3;
- }
- else
- {
- if ( pFile->m_nWriteBufFree <= Len + 3 )
- {
- sal_Char* pTmp;
-
- pTmp=(sal_Char*) realloc(pFile->m_pWriteBuf,( ( pFile->m_nWriteBufLen + Len ) * 2) );
- if ( pTmp == 0 )
- {
- return sal_False;
- }
- pFile->m_pWriteBuf = pTmp;
- pFile->m_nWriteBufFree = pFile->m_nWriteBufFree + pFile->m_nWriteBufLen + ( 2 * Len );
- pFile->m_nWriteBufLen = ( pFile->m_nWriteBufLen + Len ) * 2;
- memset( (pFile->m_pWriteBuf) + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ), 0, pFile->m_nWriteBufFree);
- }
- }
-
-
-
- memcpy(pFile->m_pWriteBuf + ( pFile->m_nWriteBufLen - pFile->m_nWriteBufFree ),pszLine,Len+1);
-#ifdef DEBUG_OSL_PROFILE
- strLen = strlen(pFile->m_pWriteBuf);
-#endif
- pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len]='\n';
- pFile->m_pWriteBuf[pFile->m_nWriteBufLen - pFile->m_nWriteBufFree + Len + 1]='\0';
-
- pFile->m_nWriteBufFree-=Len+1;
-
- return sal_True;
-}
-
-/* platform specific end */
-
-static sal_Char* stripBlanks(sal_Char* String, sal_uInt32* pLen)
-{
- if ( ( pLen != NULL ) && ( *pLen != 0 ) )
- {
- while ((String[*pLen - 1] == ' ') || (String[*pLen - 1] == '\t'))
- (*pLen)--;
-
- while ( (*String == ' ') || (*String == '\t') )
- {
- String++;
- (*pLen)--;
- }
- }
- else
- while ( (*String == ' ') || (*String == '\t') )
- String++;
-
- return (String);
-}
-
-static sal_Char* addLine(osl_TProfileImpl* pProfile, const sal_Char* Line)
-{
- if (pProfile->m_NoLines >= pProfile->m_MaxLines)
- {
- if (pProfile->m_Lines == NULL)
- {
- pProfile->m_MaxLines = LINES_INI;
- pProfile->m_Lines = (sal_Char **)malloc(pProfile->m_MaxLines * sizeof(sal_Char *));
- memset(pProfile->m_Lines,0,pProfile->m_MaxLines * sizeof(sal_Char *));
- }
- else
- {
- unsigned int idx=0;
- unsigned int oldmax=pProfile->m_MaxLines;
-
- pProfile->m_MaxLines += LINES_ADD;
- pProfile->m_Lines = (sal_Char **)realloc(pProfile->m_Lines,
- pProfile->m_MaxLines * sizeof(sal_Char *));
- for ( idx = oldmax ; idx < pProfile->m_MaxLines ; ++idx )
- {
- pProfile->m_Lines[idx]=0;
- }
- }
-
- if (pProfile->m_Lines == NULL)
- {
- pProfile->m_NoLines = 0;
- pProfile->m_MaxLines = 0;
- return (NULL);
- }
-
- }
-
- if ( pProfile->m_Lines != 0 && pProfile->m_Lines[pProfile->m_NoLines] != 0 )
- {
- free(pProfile->m_Lines[pProfile->m_NoLines]);
- }
- pProfile->m_Lines[pProfile->m_NoLines++] = strdup(Line);
-
- return (pProfile->m_Lines[pProfile->m_NoLines - 1]);
-}
-
-static sal_Char* insertLine(osl_TProfileImpl* pProfile, const sal_Char* Line, sal_uInt32 LineNo)
-{
- if (pProfile->m_NoLines >= pProfile->m_MaxLines)
- {
- if (pProfile->m_Lines == NULL)
- {
- pProfile->m_MaxLines = LINES_INI;
- pProfile->m_Lines = (sal_Char **)malloc(pProfile->m_MaxLines * sizeof(sal_Char *));
- memset(pProfile->m_Lines,0,pProfile->m_MaxLines * sizeof(sal_Char *));
- }
- else
- {
- pProfile->m_MaxLines += LINES_ADD;
- pProfile->m_Lines = (sal_Char **)realloc(pProfile->m_Lines,
- pProfile->m_MaxLines * sizeof(sal_Char *));
-
- memset(&pProfile->m_Lines[pProfile->m_NoLines],
- 0,
- (pProfile->m_MaxLines - pProfile->m_NoLines - 1) * sizeof(sal_Char*));
- }
-
- if (pProfile->m_Lines == NULL)
- {
- pProfile->m_NoLines = 0;
- pProfile->m_MaxLines = 0;
- return (NULL);
- }
- }
-
- LineNo = LineNo > pProfile->m_NoLines ? pProfile->m_NoLines : LineNo;
-
- if (LineNo < pProfile->m_NoLines)
- {
- sal_uInt32 i, n;
- osl_TProfileSection* pSec;
-
- memmove(&pProfile->m_Lines[LineNo + 1], &pProfile->m_Lines[LineNo],
- (pProfile->m_NoLines - LineNo) * sizeof(sal_Char *));
-
-
- /* adjust line references */
- for (i = 0; i < pProfile->m_NoSections; i++)
- {
- pSec = &pProfile->m_Sections[i];
-
- if (pSec->m_Line >= LineNo)
- pSec->m_Line++;
-
- for (n = 0; n < pSec->m_NoEntries; n++)
- if (pSec->m_Entries[n].m_Line >= LineNo)
- pSec->m_Entries[n].m_Line++;
- }
- }
-
- pProfile->m_NoLines++;
-
- pProfile->m_Lines[LineNo] = strdup(Line);
-
- return (pProfile->m_Lines[LineNo]);
-}
-
-static void removeLine(osl_TProfileImpl* pProfile, sal_uInt32 LineNo)
-{
- if (LineNo < pProfile->m_NoLines)
- {
- free(pProfile->m_Lines[LineNo]);
- pProfile->m_Lines[LineNo]=0;
- if (pProfile->m_NoLines - LineNo > 1)
- {
- sal_uInt32 i, n;
- osl_TProfileSection* pSec;
-
- memmove(&pProfile->m_Lines[LineNo], &pProfile->m_Lines[LineNo + 1],
- (pProfile->m_NoLines - LineNo - 1) * sizeof(sal_Char *));
-
- memset(&pProfile->m_Lines[pProfile->m_NoLines - 1],
- 0,
- (pProfile->m_MaxLines - pProfile->m_NoLines) * sizeof(sal_Char*));
-
- /* adjust line references */
- for (i = 0; i < pProfile->m_NoSections; i++)
- {
- pSec = &pProfile->m_Sections[i];
-
- if (pSec->m_Line > LineNo)
- pSec->m_Line--;
-
- for (n = 0; n < pSec->m_NoEntries; n++)
- if (pSec->m_Entries[n].m_Line > LineNo)
- pSec->m_Entries[n].m_Line--;
- }
- }
- else
- {
- pProfile->m_Lines[LineNo] = 0;
- }
-
- pProfile->m_NoLines--;
- }
-
- return;
-}
-
-static void setEntry(osl_TProfileImpl* pProfile, osl_TProfileSection* pSection,
- sal_uInt32 NoEntry, sal_uInt32 Line,
- sal_Char* Entry, sal_uInt32 Len)
-{
- Entry = stripBlanks(Entry, &Len);
- pSection->m_Entries[NoEntry].m_Line = Line;
- pSection->m_Entries[NoEntry].m_Offset = Entry - pProfile->m_Lines[Line];
- pSection->m_Entries[NoEntry].m_Len = Len;
-
- return;
-}
-
-static sal_Bool addEntry(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection,
- int Line, sal_Char* Entry, sal_uInt32 Len)
-{
- if (pSection != NULL)
- {
- if (pSection->m_NoEntries >= pSection->m_MaxEntries)
- {
- if (pSection->m_Entries == NULL)
- {
- pSection->m_MaxEntries = ENTRIES_INI;
- pSection->m_Entries = (osl_TProfileEntry *)malloc(
- pSection->m_MaxEntries * sizeof(osl_TProfileEntry));
- }
- else
- {
- pSection->m_MaxEntries += ENTRIES_ADD;
- pSection->m_Entries = (osl_TProfileEntry *)realloc(pSection->m_Entries,
- pSection->m_MaxEntries * sizeof(osl_TProfileEntry));
- }
-
- if (pSection->m_Entries == NULL)
- {
- pSection->m_NoEntries = 0;
- pSection->m_MaxEntries = 0;
- return (sal_False);
- }
- }
-
- pSection->m_NoEntries++;
-
- Entry = stripBlanks(Entry, &Len);
- setEntry(pProfile, pSection, pSection->m_NoEntries - 1, Line,
- Entry, Len);
-
- return (sal_True);
- }
-
- return (sal_False);
-}
-
-static void removeEntry(osl_TProfileSection *pSection, sal_uInt32 NoEntry)
-{
- if (NoEntry < pSection->m_NoEntries)
- {
- if (pSection->m_NoEntries - NoEntry > 1)
- {
- memmove(&pSection->m_Entries[NoEntry],
- &pSection->m_Entries[NoEntry + 1],
- (pSection->m_NoEntries - NoEntry - 1) * sizeof(osl_TProfileEntry));
- pSection->m_Entries[pSection->m_NoEntries - 1].m_Line=0;
- pSection->m_Entries[pSection->m_NoEntries - 1].m_Offset=0;
- pSection->m_Entries[pSection->m_NoEntries - 1].m_Len=0;
- }
-
- pSection->m_NoEntries--;
- }
-
- return;
-}
-
-static sal_Bool addSection(osl_TProfileImpl* pProfile, int Line, const sal_Char* Section, sal_uInt32 Len)
-{
- if (pProfile->m_NoSections >= pProfile->m_MaxSections)
- {
- if (pProfile->m_Sections == NULL)
- {
- pProfile->m_MaxSections = SECTIONS_INI;
- pProfile->m_Sections = (osl_TProfileSection *)malloc(pProfile->m_MaxSections * sizeof(osl_TProfileSection));
- memset(pProfile->m_Sections,0,pProfile->m_MaxSections * sizeof(osl_TProfileSection));
- }
- else
- {
- unsigned int idx=0;
- unsigned int oldmax=pProfile->m_MaxSections;
-
- pProfile->m_MaxSections += SECTIONS_ADD;
- pProfile->m_Sections = (osl_TProfileSection *)realloc(pProfile->m_Sections,
- pProfile->m_MaxSections * sizeof(osl_TProfileSection));
- for ( idx = oldmax ; idx < pProfile->m_MaxSections ; ++idx )
- {
- pProfile->m_Sections[idx].m_Entries=0;
- }
- }
-
- if (pProfile->m_Sections == NULL)
- {
- pProfile->m_NoSections = 0;
- pProfile->m_MaxSections = 0;
- return (sal_False);
- }
- }
-
- pProfile->m_NoSections++;
-
- if ( pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries != 0 )
- {
- free(pProfile->m_Sections[(pProfile->m_NoSections) - 1].m_Entries);
- }
- pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = NULL;
- pProfile->m_Sections[pProfile->m_NoSections - 1].m_NoEntries = 0;
- pProfile->m_Sections[pProfile->m_NoSections - 1].m_MaxEntries = 0;
-
- pProfile->m_Sections[pProfile->m_NoSections - 1].m_Line = Line;
- pProfile->m_Sections[pProfile->m_NoSections - 1].m_Offset = Section - pProfile->m_Lines[Line];
- pProfile->m_Sections[pProfile->m_NoSections - 1].m_Len = Len;
-
- return (sal_True);
-}
-
-static void removeSection(osl_TProfileImpl* pProfile, osl_TProfileSection *pSection)
-{
- sal_uInt32 Section;
-
- if ((Section = pSection - pProfile->m_Sections) < pProfile->m_NoSections)
- {
- free (pSection->m_Entries);
- pSection->m_Entries=0;
- if (pProfile->m_NoSections - Section > 1)
- {
- memmove(&pProfile->m_Sections[Section], &pProfile->m_Sections[Section + 1],
- (pProfile->m_NoSections - Section - 1) * sizeof(osl_TProfileSection));
-
- memset(&pProfile->m_Sections[pProfile->m_NoSections - 1],
- 0,
- (pProfile->m_MaxSections - pProfile->m_NoSections) * sizeof(osl_TProfileSection));
- pProfile->m_Sections[pProfile->m_NoSections - 1].m_Entries = 0;
- }
- else
- {
- pSection->m_Entries = 0;
- }
-
- pProfile->m_NoSections--;
- }
-
- return;
-}
-
-static osl_TProfileSection* findEntry(osl_TProfileImpl* pProfile, const sal_Char* Section,
- const sal_Char* Entry, sal_uInt32 *pNoEntry)
-{
-static sal_uInt32 Sect = 0;
- sal_uInt32 i, n;
- sal_uInt32 Len;
- const sal_Char* pStr;
- osl_TProfileSection* pSec=0;
-
- Len = strlen(Section);
-
- n = Sect;
-
- for (i = 0; i < pProfile->m_NoSections; i++)
- {
- n %= pProfile->m_NoSections;
- pSec = &pProfile->m_Sections[n];
- if ((Len == pSec->m_Len) &&
- (strncasecmp(Section, &pProfile->m_Lines[pSec->m_Line][pSec->m_Offset], pSec->m_Len)
- == 0))
- break;
- n++;
- }
-
- Sect = n;
-
- if (i < pProfile->m_NoSections)
- {
- Len = strlen(Entry);
-
- *pNoEntry = pSec->m_NoEntries;
-
- for (i = 0; i < pSec->m_NoEntries; i++)
- {
- pStr = &pProfile->m_Lines[pSec->m_Entries[i].m_Line]
- [pSec->m_Entries[i].m_Offset];
- if ((Len == pSec->m_Entries[i].m_Len) &&
- (strncasecmp(Entry, pStr, pSec->m_Entries[i].m_Len)
- == 0))
- {
- *pNoEntry = i;
- break;
- }
- }
- }
- else
- pSec = NULL;
-
- return (pSec);
-}
-
-static sal_Bool loadProfile(osl_TFile* pFile, osl_TProfileImpl* pProfile)
-{
- sal_uInt32 i;
- sal_Char* pStr;
- sal_Char* pChar;
-
- sal_Char* pLine;
- sal_Char* bWasAdded = NULL;
-
- pProfile->m_NoLines = 0;
- pProfile->m_NoSections = 0;
-
- if ( pFile == 0 )
- {
- return sal_False;
- }
-
- if ( pProfile == 0 )
- {
- return sal_False;
- }
-
- OSL_VERIFY(OslProfile_rewindFile(pFile, sal_False));
-
- while ( ( pLine=OslProfile_getLine(pFile) ) != 0 )
- {
- bWasAdded = addLine( pProfile, pLine );
- rtl_freeMemory( pLine );
- OSL_ASSERT(bWasAdded);
- if ( ! bWasAdded )
- return (sal_False);
- }
-
- for (i = 0; i < pProfile->m_NoLines; i++)
- {
- pStr = (sal_Char *)stripBlanks(pProfile->m_Lines[i], NULL);
-
- if ((*pStr == '\0') || (*pStr == ';'))
- continue;
-
- if ((*pStr != '[') || ((pChar = strrchr(pStr, ']')) == NULL) ||
- ((pChar - pStr) <= 2))
- {
- /* insert entry */
-
- if (pProfile->m_NoSections < 1)
- continue;
-
- if ((pChar = strchr(pStr, '=')) == NULL)
- pChar = pStr + strlen(pStr);
-
- if (! addEntry(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1],
- i, pStr, pChar - pStr))
- {
- OSL_ASSERT(0);
- continue;
- }
-
- }
- else
- {
- /* new section */
-
- if (! addSection(pProfile, i, pStr + 1, pChar - pStr - 1))
- {
- OSL_ASSERT(0);
- continue;
- }
-
- }
- }
-
- return (sal_True);
-}
-
-static sal_Bool storeProfile(osl_TProfileImpl* pProfile, sal_Bool bCleanup)
-{
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In storeProfile\n");
-#endif
-
- if (pProfile->m_Lines != NULL)
- {
- if (pProfile->m_Flags & FLG_MODIFIED)
- {
- sal_uInt32 i;
-
- osl_TFile* pTmpFile = osl_openTmpProfileImpl(pProfile);
-
- if ( pTmpFile == 0 )
- {
- return sal_False;
- }
-
- OSL_VERIFY(OslProfile_rewindFile(pTmpFile, sal_True));
-
- for ( i = 0 ; i < pProfile->m_NoLines ; i++ )
- {
- OSL_VERIFY(OslProfile_putLine(pTmpFile, pProfile->m_Lines[i]));
- }
-
- if ( ! writeProfileImpl(pTmpFile) )
- {
- if ( pTmpFile->m_pWriteBuf != 0 )
- {
- free(pTmpFile->m_pWriteBuf);
- }
-
- pTmpFile->m_pWriteBuf=0;
- pTmpFile->m_nWriteBufLen=0;
- pTmpFile->m_nWriteBufFree=0;
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out storeProfile [not flushed]\n");
-#endif
- closeFileImpl(pTmpFile,pProfile->m_Flags);
-
- return sal_False;
- }
-
- pProfile->m_Flags &= ~FLG_MODIFIED;
-
- closeFileImpl(pProfile->m_pFile,pProfile->m_Flags);
- closeFileImpl(pTmpFile,pProfile->m_Flags);
-
- osl_ProfileSwapProfileNames(pProfile);
-
- pProfile->m_pFile = openFileImpl(pProfile->m_FileName,pProfile->m_Flags);
-
- }
-
- if (bCleanup)
- {
- while (pProfile->m_NoLines > 0)
- removeLine(pProfile, pProfile->m_NoLines - 1);
-
- free(pProfile->m_Lines);
- pProfile->m_Lines = NULL;
- pProfile->m_NoLines = 0;
- pProfile->m_MaxLines = 0;
-
- while (pProfile->m_NoSections > 0)
- removeSection(pProfile, &pProfile->m_Sections[pProfile->m_NoSections - 1]);
-
- free(pProfile->m_Sections);
- pProfile->m_Sections = NULL;
- pProfile->m_NoSections = 0;
- pProfile->m_MaxSections = 0;
- }
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out storeProfile [ok]\n");
-#endif
- return (sal_True);
-}
-
-
-static osl_TFile* osl_openTmpProfileImpl(osl_TProfileImpl* pProfile)
-{
- osl_TFile* pFile=0;
- sal_Char* pszExtension = "tmp";
- sal_Char pszTmpName[PATH_MAX];
- oslProfileOption PFlags=0;
-
- pszTmpName[0] = '\0';
-
- /* generate tmp profilename */
- osl_ProfileGenerateExtension(pProfile->m_FileName,pszExtension,pszTmpName);
-
- if ( pszTmpName[0] == 0 )
- {
- return 0;
- }
-
- if ( ! ( pProfile->m_Flags & osl_Profile_READLOCK ) )
- {
- PFlags |= osl_Profile_WRITELOCK;
- }
-
- /* open this file */
- pFile = openFileImpl(pszTmpName,pProfile->m_Flags | PFlags);
-
-
- /* return new pFile */
- return pFile;
-}
-
-static sal_Bool osl_ProfileSwapProfileNames(osl_TProfileImpl* pProfile)
-{
- sal_Bool bRet = sal_False;
-
- sal_Char pszBakFile[PATH_MAX];
- sal_Char pszTmpFile[PATH_MAX];
- sal_Char pszIniFile[PATH_MAX];
-
- pszBakFile[0] = '\0';
- pszTmpFile[0] = '\0';
- pszIniFile[0] = '\0';
-
- osl_ProfileGenerateExtension(pProfile->m_FileName,"bak",pszBakFile);
-
- strcpy(pszIniFile,pProfile->m_FileName);
-
- osl_ProfileGenerateExtension(pProfile->m_FileName,"tmp",pszTmpFile);
-
- /* unlink bak */
- unlink( pszBakFile );
-
- /* rename ini bak */
- rename( pszIniFile, pszBakFile );
-
- /* rename tmp ini */
- rename( pszTmpFile, pszIniFile );
-
- return bRet;
-}
-
-
-static void osl_ProfileGenerateExtension(sal_Char* pszFileName, sal_Char* pszExtension, sal_Char* pszTmpName)
-{
-
- strcpy(pszTmpName,pszFileName);
- strcat(pszTmpName,".");
- strcat(pszTmpName,pszExtension);
-
- return;
-}
-
-
-static osl_TProfileImpl* acquireProfile(oslProfile Profile, sal_Bool bWriteable)
-{
- osl_TProfileImpl* pProfile = (osl_TProfileImpl*)Profile;
- oslProfileOption PFlags=0;
-
- if ( bWriteable )
- {
- PFlags = osl_Profile_DEFAULT | osl_Profile_WRITELOCK;
- }
- else
- {
- PFlags = osl_Profile_DEFAULT;
- }
-
-
- if (pProfile == NULL)
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("AUTOOPEN MODE\n");
-#endif
-
- if ( ( pProfile = (osl_TProfileImpl*) osl_openProfile(0, PFlags ) ) != NULL )
- {
- pProfile->m_Flags |= FLG_AUTOOPEN;
- }
- }
- else
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("try to acquire\n");
-#endif
-
- if (! (pProfile->m_Flags & osl_Profile_SYSTEM))
- {
- if (! (pProfile->m_Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE )))
- {
- osl_TStamp Stamp;
-
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("Profile acquire DEFAULT MODE\n");
-#endif
- if (! (pProfile->m_pFile = openFileImpl(pProfile->m_FileName, pProfile->m_Flags | PFlags )))
- return NULL;
-
- Stamp = OslProfile_getFileStamp(pProfile->m_pFile);
-
- if (memcmp(&Stamp, &(pProfile->m_Stamp), sizeof(osl_TStamp)))
- {
- sal_Bool bRet=sal_False;
-
- pProfile->m_Stamp = Stamp;
-
- bRet=loadProfile(pProfile->m_pFile, pProfile);
- OSL_ASSERT(bRet);
- (void)bRet;
- }
- }
- else
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("Profile acquire READ/WRITELOCK MODE\n");
-#endif
- /* A readlock file could not be written */
- if ((pProfile->m_Flags & osl_Profile_READLOCK) && bWriteable)
- {
- return (NULL);
- }
- }
- }
- }
-
- return (pProfile);
-}
-
-static sal_Bool releaseProfile(osl_TProfileImpl* pProfile)
-{
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("In releaseProfile\n");
-#endif
-
- if ( pProfile == 0 )
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out releaseProfile [profile==0]\n");
-#endif
- return sal_False;
- }
-
- if (pProfile->m_Flags & FLG_AUTOOPEN)
- {
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out releaseProfile [AUTOOPEN]\n");
-#endif
- return (osl_closeProfile((oslProfile)pProfile));
- }
- else
- {
-#ifdef DEBUG_OSL_PROFILE
- OSL_TRACE("DEFAULT MODE\n");
-#endif
- if (! (pProfile->m_Flags & (osl_Profile_READLOCK | osl_Profile_WRITELOCK | osl_Profile_FLUSHWRITE )))
- {
- if (pProfile->m_Flags & FLG_MODIFIED)
- {
- sal_Bool bRet=storeProfile(pProfile, sal_False);
- OSL_ASSERT(bRet);
- (void)bRet;
- }
-
- closeFileImpl(pProfile->m_pFile,pProfile->m_Flags);
- pProfile->m_pFile = NULL;
- }
- }
-
-#ifdef TRACE_OSL_PROFILE
- OSL_TRACE("Out releaseProfile [ok]\n");
-#endif
- return (sal_True);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */