cunixprefutils.cpp
上传用户:zhongxx05
上传日期:2007-06-06
资源大小:33641k
文件大小:5k
源码类别:

Symbian

开发平台:

C/C++

  1. /* ***** BEGIN LICENSE BLOCK ***** 
  2.  * Version: RCSL 1.0/RPSL 1.0 
  3.  *  
  4.  * Portions Copyright (c) 1995-2002 RealNetworks, Inc. All Rights Reserved. 
  5.  *      
  6.  * The contents of this file, and the files included with this file, are 
  7.  * subject to the current version of the RealNetworks Public Source License 
  8.  * Version 1.0 (the "RPSL") available at 
  9.  * http://www.helixcommunity.org/content/rpsl unless you have licensed 
  10.  * the file under the RealNetworks Community Source License Version 1.0 
  11.  * (the "RCSL") available at http://www.helixcommunity.org/content/rcsl, 
  12.  * in which case the RCSL will apply. You may also obtain the license terms 
  13.  * directly from RealNetworks.  You may not use this file except in 
  14.  * compliance with the RPSL or, if you have a valid RCSL with RealNetworks 
  15.  * applicable to this file, the RCSL.  Please see the applicable RPSL or 
  16.  * RCSL for the rights, obligations and limitations governing use of the 
  17.  * contents of the file.  
  18.  *  
  19.  * This file is part of the Helix DNA Technology. RealNetworks is the 
  20.  * developer of the Original Code and owns the copyrights in the portions 
  21.  * it created. 
  22.  *  
  23.  * This file, and the files included with this file, is distributed and made 
  24.  * available on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER 
  25.  * EXPRESS OR IMPLIED, AND REALNETWORKS HEREBY DISCLAIMS ALL SUCH WARRANTIES, 
  26.  * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, FITNESS 
  27.  * FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. 
  28.  * 
  29.  * Technology Compatibility Kit Test Suite(s) Location: 
  30.  *    http://www.helixcommunity.org/content/tck 
  31.  * 
  32.  * Contributor(s): 
  33.  *  
  34.  * ***** END LICENSE BLOCK ***** */ 
  35. #include <stdlib.h>
  36. #include <string.h>
  37. #include <sys/stat.h>
  38. #include <sys/types.h>
  39. #include <ctype.h>
  40. #include "dbcs.h"
  41. //#include "machdep.h"
  42. #if defined (_SOLARIS) || defined (_FREEBSD) || defined (_OPENBSD) || defined (_NETBSD)
  43. #include <dirent.h>
  44. #elif defined (__hpux)
  45. #include <sys/dirent.h>
  46. #else
  47. #include <sys/dir.h>
  48. #endif 
  49. #include "cunixprefutils.h"
  50. #include "hxver.h"
  51. ////////////////////////////////////////////////////////////////////////////////////////////
  52. // This function determins the location of the preferences file. If the directory that it
  53. // determins doesn't exist, it will create it.
  54. // /////////////////////////////////////////////////////////////////////////////////////////
  55. void CUnixPrefUtils::GetUserHomeDirectory(uid_t uid, CHXString &dir)
  56. {
  57.     struct passwd *passwd = NULL;
  58.     if ( passwd = getpwuid( uid ) )
  59.     {
  60. dir = passwd->pw_dir ;
  61.     }
  62.     else
  63.     {
  64. if (getenv("HOME"))
  65. {
  66.     dir = getenv("HOME");
  67. }
  68. else
  69. {
  70.     dir = "/tmp/";
  71. }
  72.     }
  73. }
  74. void CUnixPrefUtils::GetPrefPath(char* pszPrefPath, int nLength, const char* pszCompanyName)
  75. {
  76. //prefs file should be in user's home directory
  77. #if defined(_BEOS) /* PJG -- Can someone take care of integrating this into GetUserHomeDirectory?  I dont have a beos box... */
  78. BPath   settingsPath;
  79. if (find_directory(B_COMMON_SETTINGS_DIRECTORY, &settingsPath) == B_OK)
  80. {
  81. if( strlen(settingsPath.Path()) < nLength)
  82.        strcpy( pzPrefPath, settingsPath.Path() ); /* Flawfinder: ignore */
  83. }
  84. else
  85. {
  86. char* pszTemp = getenv( "HOME" );
  87. if( strlen(pszTemp) < nLength)
  88. strcpy( pszPrefPath,  pszTemp); /* Flawfinder: ignore */
  89. }
  90. #else
  91. CHXString dir;
  92. GetUserHomeDirectory(getuid(), dir);
  93. if( strlen(dir) < nLength)
  94.     ::strcpy( pszPrefPath, dir ); /* Flawfinder: ignore */
  95. #endif /* _BEOS */
  96. if(!pszCompanyName)
  97. {
  98. if( (strlen(pszPrefPath) + strlen(HXVER_COMMUNITY) + 3) < nLength)
  99.         {
  100. strcat(pszPrefPath, "/."); /* Flawfinder: ignore */
  101. strcat(pszPrefPath, HXVER_COMMUNITY); /* Flawfinder: ignore */
  102.         }
  103.     }
  104. else if( (strlen(pszPrefPath) + strlen(pszCompanyName) + 2) < nLength)
  105. {
  106.      char* pszTempCompName = new char[strlen(pszCompanyName) + 1];
  107. strcpy(pszTempCompName, pszCompanyName); /* Flawfinder: ignore */
  108.     //remove any , or space
  109. char * pComa = (char*) HXFindChar(pszTempCompName, ',');
  110. if(pComa)
  111. {
  112. *pComa = '';
  113. }
  114.     pComa = (char*) HXFindChar(pszTempCompName, ' ');
  115.         if(pComa)
  116.         {
  117.          *pComa = '';
  118.         }
  119. //Let's make the company name caps insensitive since we don't know if it will come in caps or not.
  120. for(int i=0; i<strlen(pszTempCompName); i++)
  121.         pszTempCompName[i] = tolower((int)pszTempCompName[i]);
  122. strcat(pszPrefPath, "/."); /* Flawfinder: ignore */
  123. strcat( pszPrefPath, pszTempCompName ); /* Flawfinder: ignore */
  124. delete[] pszTempCompName;
  125. }
  126. DIR* pDir = NULL;
  127. pDir = opendir(pszPrefPath);
  128. if (pDir)
  129. {
  130.     closedir(pDir); //Directory exists.
  131. }
  132. else
  133. {
  134. mkdir(pszPrefPath, 0755);
  135. }
  136. }     
  137. void
  138. CUnixPrefUtils::CleanEnv()
  139.  {
  140.         char **ppSrc = environ;
  141.         char **ppDest = environ;
  142.         while (*ppSrc)
  143.         {
  144.             if (*ppDest && !strnicmp(*ppDest, "rmapref_", 8))
  145.             {
  146.                 HX_VECTOR_DELETE(*ppDest);
  147.                 *ppDest = *ppSrc++;
  148.             }
  149.             else
  150.             {
  151.                 *ppDest++ = *ppSrc++;
  152.             }
  153.         }
  154.         *ppDest = 0;
  155.  }