/************************************************************** * * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. * *************************************************************/ #ifndef _OSL_PROFILE_HXX_ #define _OSL_PROFILE_HXX_ #include "profile.h" #include #include #include namespace osl { typedef oslProfileOption ProfileOption; const int Profile_DEFAULT = osl_Profile_DEFAULT; const int Profile_SYSTEM = osl_Profile_SYSTEM; /* use system depended functinality */ const int Profile_READLOCK = osl_Profile_READLOCK; /* lock file for reading */ const int Profile_WRITELOCK = osl_Profile_WRITELOCK; /* lock file for writing */ /** Deprecated API. @deprecated */ class Profile { oslProfile profile; public: /** Open or create a configuration profile. @return 0 if the profile could not be created, otherwise a handle to the profile. */ Profile(const rtl::OUString strProfileName, oslProfileOption Options = Profile_DEFAULT ) { profile = osl_openProfile(strProfileName.pData, Options); if( ! profile ) throw std::exception(); } /** Close the opened profile an flush all data to the disk. @param Profile handle to a opened profile. */ ~Profile() { osl_closeProfile(profile); } sal_Bool flush() { return osl_flushProfile(profile); } rtl::OString readString( const rtl::OString& rSection, const rtl::OString& rEntry, const rtl::OString& rDefault) { sal_Char aBuf[1024]; return osl_readProfileString( profile, rSection.getStr(), rEntry.getStr(), aBuf, sizeof( aBuf ), rDefault.getStr() ) ? rtl::OString( aBuf ) : rtl::OString(); } sal_Bool readBool( const rtl::OString& rSection, const rtl::OString& rEntry, sal_Bool bDefault ) { return osl_readProfileBool( profile, rSection.getStr(), rEntry.getStr(), bDefault ); } sal_uInt32 readIdent(const rtl::OString& rSection, const rtl::OString& rEntry, sal_uInt32 nFirstId, const std::list< rtl::OString >& rStrings, sal_uInt32 nDefault) { int nItems = rStrings.size(); const sal_Char** pStrings = new const sal_Char*[ nItems+1 ]; std::list< rtl::OString >::const_iterator it = rStrings.begin(); nItems = 0; while( it != rStrings.end() ) { pStrings[ nItems++ ] = (*it).getStr(); ++it; } pStrings[ nItems ] = NULL; sal_uInt32 nRet = osl_readProfileIdent( profile, rSection.getStr(), rEntry.getStr(), nFirstId, pStrings, nDefault); delete[] pStrings; return nRet; } sal_Bool writeString(const rtl::OString& rSection, const rtl::OString& rEntry, const rtl::OString& rString) { return osl_writeProfileString( profile, rSection.getStr(), rEntry.getStr(), rString.getStr()); } sal_Bool writeBool(const rtl::OString& rSection, const rtl::OString& rEntry, sal_Bool Value) { return osl_writeProfileBool( profile, rSection.getStr(), rEntry.getStr(), Value); } sal_Bool writeIdent(const rtl::OString& rSection, const rtl::OString& rEntry, sal_uInt32 nFirstId, const std::list< rtl::OString >& rStrings, sal_uInt32 nValue) { int nItems = rStrings.size(); const sal_Char** pStrings = new const sal_Char*[ nItems+1 ]; std::list< rtl::OString >::const_iterator it = rStrings.begin(); nItems = 0; while( it != rStrings.end() ) { pStrings[ nItems++ ] = (*it).getStr(); ++it; } pStrings[ nItems ] = NULL; sal_Bool bRet = osl_writeProfileIdent( profile, rSection.getStr(), rEntry.getStr(), nFirstId, pStrings, nValue ); delete[] pStrings; return bRet; } /** Acquire the mutex, block if already acquired by another thread. @param Profile handle to a opened profile. @return False if section or entry could not be found. */ sal_Bool removeEntry(const rtl::OString& rSection, const rtl::OString& rEntry) { return osl_removeProfileEntry( profile, rSection.getStr(), rEntry.getStr()); } /** Get all entries belonging to the specified section. @param Profile handle to a opened profile. @return Pointer to a array of pointers. */ std::list< rtl::OString > getSectionEntries(const rtl::OString& rSection ) { std::list< rtl::OString > aEntries; // count buffer size necessary int n = osl_getProfileSectionEntries( profile, rSection.getStr(), NULL, 0 ); if( n > 1 ) { sal_Char* pBuf = new sal_Char[ n+1 ]; osl_getProfileSectionEntries( profile, rSection.getStr(), pBuf, n+1 ); int nLen; for( n = 0; ( nLen = strlen( pBuf+n ) ); n += nLen+1 ) aEntries.push_back( rtl::OString( pBuf+n ) ); delete[] pBuf; } return aEntries; } /** Get all section entries @param Profile handle to a opened profile. @return Pointer to a array of pointers. */ std::list< rtl::OString > getSections() { std::list< rtl::OString > aSections; // count buffer size necessary int n = osl_getProfileSections( profile, NULL, 0 ); if( n > 1 ) { sal_Char* pBuf = new sal_Char[ n+1 ]; osl_getProfileSections( profile, pBuf, n+1 ); int nLen; for( n = 0; ( nLen = strlen( pBuf+n ) ); n += nLen+1 ) aSections.push_back( rtl::OString( pBuf+n ) ); delete[] pBuf; } return aSections; } }; } #endif /* _OSL_PROFILE_HXX_ */