summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorRich Megginson <rmeggins@redhat.com>2010-02-25 08:46:32 -0700
committerRich Megginson <rmeggins@redhat.com>2010-02-25 10:14:48 -0700
commit2cc5ac4e6de01c75d3b974146fde7f41a77b0268 (patch)
tree5fdc15421e9014bf845ca85cad20efd77080fd58 /lib
parent1ce1a045b77d2726ab1cb52a3e5ad943976d0fa8 (diff)
downloadds-2cc5ac4e6de01c75d3b974146fde7f41a77b0268.tar.gz
ds-2cc5ac4e6de01c75d3b974146fde7f41a77b0268.tar.xz
ds-2cc5ac4e6de01c75d3b974146fde7f41a77b0268.zip
problems linking with -z defs
https://bugzilla.redhat.com/show_bug.cgi?id=506206 Resolves: bug 506206 Bug Description: problems linking with -z defs Reviewed by: nhosoi (Thanks!) Branch: HEAD Fix Description: Some platforms (debian) and some build checking tools (rpmlint, others) link with -z defs to look for any undefined references at link time. We had several of these in various directory server objects. 1) all of the plugins need to link against libslapd.la 2) most of the plugins need to link against ldapcsdk and nspr 3) the pwdstorage plugin needs to link against LIBCRYPT, which is platform dependent 4) various other link fixes Platforms tested: RHEL5 x86_64 Flag Day: yes - autotool file changes Doc impact: no
Diffstat (limited to 'lib')
-rw-r--r--lib/libsi18n/coreres.c141
-rw-r--r--lib/libsi18n/coreres.h52
-rw-r--r--lib/libsi18n/getlang.c330
-rw-r--r--lib/libsi18n/getstrmem.c160
-rw-r--r--lib/libsi18n/getstrprop.c85
-rw-r--r--lib/libsi18n/propset.c442
-rw-r--r--lib/libsi18n/propset.h80
7 files changed, 14 insertions, 1276 deletions
diff --git a/lib/libsi18n/coreres.c b/lib/libsi18n/coreres.c
deleted file mode 100644
index e20d07a6..00000000
--- a/lib/libsi18n/coreres.c
+++ /dev/null
@@ -1,141 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- *
- * This Program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception.
- *
- *
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include "i18n.h"
-
-#include "propset.h"
-
-#include "coreres.h"
-
-Resource* core_res_init_resource(const char* path, const char* package)
-{
- PropertiesSet *propset;
- char *directory;
- char *filename;
- char *file_path;
- char *p, *q;
- char *filep;
- Resource *hres;
-
- /*********************
- Create full path information
- eg. ./es40/admin and cgi.bin.start ==>
- ./es40/admin/cgi/bin/start.properties
- **********************/
- file_path = (char *) malloc (strlen(path) + strlen(package) + 20);
-
-
- strcpy(file_path, path);
- if (path[strlen(path)-1] != '/')
- strcat(file_path, "/");
-
- p = file_path + strlen(file_path);
- q = (char *) package;
-
- filep = p - 1;
-
- /* Append package to file_path
- p: end positon of path + 1
- q: start position of package
- */
- while (q && *q) {
- if (*q == '.') {
- filep = q;
- *p ++ = '/';
- }
- else
- *p ++ = *q ++;
-
- }
- *p = '\0';
-
- *filep = '\0';
- filename = filep + 1;
- directory = file_path;
-
- propset = PropertiesInit (directory, filename);
-
- if (propset == NULL)
- return NULL;
-
- hres = (Resource *) malloc(sizeof(Resource));
- memset(hres, 0, sizeof(Resource));
-
- hres->path = strdup(file_path);
- hres->propset = propset;
-
- if (file_path)
- free (file_path);
-
- return hres;
-}
-
-const char *core_res_getstring(Resource *hres, char *key, ACCEPT_LANGUAGE_LIST lang)
-{
-
- if (key == NULL)
- return NULL;
-
- if (hres) {
- return PropertiesGetString(hres->propset, key, lang);
- }
-
- return NULL;
-}
-
-void core_res_destroy_resource(Resource *hres)
-{
- if (hres) {
- if (hres->path)
- free(hres->path);
- if (hres->package)
- free(hres->package);
- PropertiesDestroy(hres->propset);
-
- free(hres);
- }
-}
-
diff --git a/lib/libsi18n/coreres.h b/lib/libsi18n/coreres.h
deleted file mode 100644
index 8ad815a4..00000000
--- a/lib/libsi18n/coreres.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- *
- * This Program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception.
- *
- *
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifndef CORERES_H
-#define CORERES_H
-
-#include "i18n.h"
-
-Resource* core_res_init_resource(const char* path, const char* package);
-const char *core_res_getstring(Resource *hres, char *key, ACCEPT_LANGUAGE_LIST lang);
-void core_res_destroy_resource(Resource *hres);
-
-#endif
diff --git a/lib/libsi18n/getlang.c b/lib/libsi18n/getlang.c
deleted file mode 100644
index f8cb649b..00000000
--- a/lib/libsi18n/getlang.c
+++ /dev/null
@@ -1,330 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- *
- * This Program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception.
- *
- *
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-
-#include "libadmin/libadmin.h"
-
-
-#include "i18n.h"
-
-/*********************************************************************
- strReplace replaces the first instance of from in target with to.
- from can be "": to is inserted at start of target.
- to can be "": from is removed from target.
- if from is not found, 0 is returned; else 1 is returned.
- *********************************************************************/
-
-static int
-strReplace(char* target,char* from,char* to)
-{
- /* replace /from/to/ in target */
-
- char* pFrom;
- char* pOldTail;
- int lenTo;
-
- pFrom = strstr(target,from);
- if (pFrom) {
- pOldTail = pFrom+strlen(from);
- lenTo = strlen(to);
- memmove(pFrom+lenTo,pOldTail,strlen(pOldTail)+1);
- memcpy(pFrom,to,lenTo);
- return 1;
- }
-
- return 0;
-}
-
-/*********************************************************************
- statFileDir is a wrapper to stat() that strips trailing slashes
- because stat() on Windows seems to return -1 otherwise.
-*********************************************************************/
-
-int
-statFileDir(const char *path, struct stat *info) {
- int ret, pathlen;
- char *newpath = strdup(path);
-
- if(newpath == NULL)
- return -1;
-
- for (pathlen = (strlen(newpath) - 1); pathlen >= 0; pathlen--) {
- if (newpath[pathlen] == '/' || newpath[pathlen] == '\\') {
- newpath[pathlen] = '\0';
- } else {
- break;
- }
- }
-
- ret = stat(newpath, info);
-
- if (newpath)
- free(newpath);
-
- return ret;
-}
-
-/*********************************************************************
- GetLanguage is reserved for future use. These APIs are not belong
- to this file. It needs to be moved to somewhere which knows what's
- the current language setting.
- *********************************************************************/
-
-static char emptyString[] = "";
-
-static char client_language[128] = "en";
-static char admin_language[128] = "en";
-static char default_language[128] = "en";
-
-void
-SetLanguage(int type, char *language)
-{
- switch(type) {
- case CLIENT_LANGUAGE:
- if (language)
- strcpy(client_language, language);
- break;
- case ADMIN_LANGUAGE:
- if (language)
- strcpy(admin_language, language);
- break;
- case DEFAULT_LANGUAGE:
- if (language)
- strcpy(default_language, language);
- break;
- }
- return ;
-}
-
-
-
-char*
-GetClientLanguage(void)
-{
- if (client_language)
- return client_language;
- else
- return emptyString;
-}
-
-char*
-GetAdminLanguage(void)
-{
- if (admin_language)
- return admin_language;
- else
- return emptyString;
-}
-
-char*
-GetDefaultLanguage(void)
-{
- if (default_language)
- return default_language;
- else
- return "en";
-}
-
-/*********************************************************************
- GetFileForLanguage looks for a file in the appropriate language.
- *********************************************************************/
-
-NSAPI_PUBLIC
-int
-GetFileForLanguage(char* filePath,char* language,char* existingFilePath)
-{
- /* Input: filePath,language
- * filePath is of the form "/xxx/xxx/$$LANGDIR/xxx/xxx/filename"
- * or of the form "/xxx/xxx/xxx/xxx/filename".
- * filename may or may not have an extension.
- * language is an Accept-Language list; each language-range will be
- * tried as a subdirectory name and possibly as a filename modifier.
- * "*" is ignored - default always provided if needed.
- * "-" is replaced by "_".
- * $$LANGDIR is a special string replaced by language. It is optional.
- * For the default case, $$LANGDIR/ is replaced by nothing
- * (so // is not created).
- *
- * Returned: existingPath
- * existingFilePath is the path of a satisfactory, existing file.
- * if no file is found, an empty string "" is returned.
- *
- * int returned: -1 if no file found (existingFilePath = "")
- * 0 if default file is returned
- * 1 if language file is returned (any in list)
- *
- * Example:
- * filePath = "/path/$$LANGDIR/filename.ext"
- * language = "language"
- * GetDefaultLanguage() --> "default"
- * LANG_DELIMIT = "_"
- *
- * 1. Try: "/path/language/filename.ext"
- * 2. Try: "/path/filename_language.ext"
- * 3. Try: "/path/default/filename.ext"
- * 4. Try: "/path/filename_default.ext"
- * 5. Try: "/path/filename.ext"
- * else: ""
- *
- * Example:
- * language = "en-us;q=0.6,ja;q=0.8,en-ca"
- *
- * 1. Try: "/path/en-ca/filename.ext"
- * 2. Try: "/path/filename_en_ca.ext"
- * 3. Try: "/path/ja/filename.ext"
- * 4. Try: "/path/filename_ja.ext"
- * 5. Try: "/path/en_us/filename.ext"
- * 6. Try: "/path/filename_en_us.ext"
- * 7. Try: "/path/default/filename.ext"
- * 8. Try: "/path/filename_default.ext"
- * 9. Try: "/path/filename.ext"
- * else: ""
- *
- */
-
-#define LANG_DELIMIT '_'
-
- int pattern;
- char* pDot;
- char* pSlash;
-
- /* PRFileInfo info; */
- struct stat info;
-
- char lang_modifier[MAX_ACCEPT_LENGTH+1];
-
- ACCEPT_LANGUAGE_LIST acceptLanguageList;
- int numLang;
- int iLang;
- int iCase;
-
-
- /* escape in case XP_InitStringDatabase has not been called */
- if (filePath==NULL) {
- *existingFilePath = '\0';
- return -1;
- }
-
- pattern = (strstr(filePath,"$$LANGDIR/")!=NULL);
-
- for ( iCase=1 ; iCase>=0 ; iCase-- ) {
- if (iCase==1) { /* iCase=1 tries requested language */
- numLang = XP_AccLangList(language,acceptLanguageList);
- } else { /* iCase=0 tries default language */
- numLang = XP_AccLangList(GetDefaultLanguage(),acceptLanguageList);
- }
-
- for ( iLang=0 ; iLang<numLang ; iLang++ ) {
-
- /* Try: /path/language/filename.ext */
- if (pattern) {
- strcpy(existingFilePath,filePath);
- strReplace(existingFilePath,"$$LANGDIR",acceptLanguageList[iLang]);
-
- if (statFileDir(existingFilePath,&info)==0) {
- return iCase;
- }
-
- /*
- if (PR_GetFileInfo(existingFilePath,&info)==PR_SUCCESS) {
- return iCase;
- }
- */
- }
-
- /* Try: /path/filename_language.ext */
- {
- strcpy(existingFilePath,filePath);
- strReplace(existingFilePath,"$$LANGDIR/",emptyString);
- pDot = strrchr(existingFilePath,'.');
- pSlash = strrchr(existingFilePath,'/');
- if (pSlash>=pDot) {
- pDot = strchr(existingFilePath,'\0');
- }
- sprintf(lang_modifier,"%c%s",LANG_DELIMIT,acceptLanguageList[iLang]);
- strReplace(pDot,emptyString,lang_modifier);
-
- if (statFileDir(existingFilePath,&info)==0) {
- return iCase;
- }
-
- /*
- if (PR_GetFileInfo(existingFilePath,&info)==PR_SUCCESS) {
- return iCase;
- }
- */
- }
- }
- }
-
- /* Try: /path/filename.ext */
- {
- strcpy(existingFilePath,filePath);
- strReplace(existingFilePath,"$$LANGDIR/",emptyString);
-
- if (statFileDir(existingFilePath,&info)==0) {
- return 0;
- }
-
- /*
- if (PR_GetFileInfo(existingFilePath,&info)==PR_SUCCESS) {
- return 0;
- }
- */
- }
-
- /* Else: */
- *existingFilePath = '\0';
- return -1;
-}
-
-
-
-
-
-
diff --git a/lib/libsi18n/getstrmem.c b/lib/libsi18n/getstrmem.c
deleted file mode 100644
index 2beb3472..00000000
--- a/lib/libsi18n/getstrmem.c
+++ /dev/null
@@ -1,160 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- *
- * This Program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception.
- *
- *
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-
-#include <stdio.h>
-#include <string.h>
-
-#define COMPILE_STRINGS_IN_MEMORY
-
-static char emptyString[] = "";
-
-#ifdef COMPILE_STRINGS_IN_MEMORY
-
-typedef struct DATABIN {
- char* pLibraryName;
- char** pArrayOfLibraryStrings;
- unsigned numberOfStringsInLibrary;
- } DATABIN;
-
-#include "getstrmem.h"
-
-#endif
-
-#if 0 /* Example of getstrmem.h */
- /* It is intended that this header file be generated by program dblink */
-
- #define NUM_BUCKETS 2 /* must be power of 2 */
-
- /* strings in library libalpha */
- static char* libalpha[] = {
- "",
- "libalpha string 1",
- "libalpha string 2",
- "libalpha string 3",
- "libalpha string 4",
- emptyString };
-
- /* strings in library libbeta */
- static char* libbeta[] = {
- "",
- "libbeta string 1",
- "libbeta string 2",
- emptyString };
-
- /* libraries in bucket for hashKey==0 */
- static struct DATABIN bucket0[] = {
- {emptyString, NULL, 0}};
-
- /* libraries in bucket for hashKey==1 */
- static struct DATABIN bucket1[] = {
- {"libalpha", libalpha, 5},
- {"libbeta", libbeta, 3},
- {emptyString, NULL, 0}};
-
- /* array of buckets */
- static struct DATABIN* buckets[NUM_BUCKETS] = {
- bucket0,
- bucket1 };
-
-#endif /* end of example getstrmem.h */
-
-#define BUCKET_MASK NUM_BUCKETS-1
-
-char*
-XP_GetStringFromMemory(char* strLibraryName,int iToken)
-{
- /*
- * In memory model called by XP_GetStringFromDatabase
- * does not use database (nsres, et al.).
- *
- * This function uses hash table for library lookup
- * and direct lookup for string.
- *
- * This function is thread safe.
- */
-
-#ifdef COMPILE_STRINGS_IN_MEMORY
-
- unsigned hashKey;
- int found = 0;
- unsigned uToken = iToken;
- char* cPtr;
- DATABIN* pBucket;
-
- /* calculate hash key */
- hashKey = 0;
- cPtr = strLibraryName;
- while (*cPtr) {
- hashKey += *(cPtr++);
- }
- hashKey &= BUCKET_MASK;
-
- /* get bucket for this hash key */
- pBucket = buckets[hashKey];
-
- /* search overflow buckets */
- while (*(pBucket->pLibraryName)!='\0') {
- if (strcmp(pBucket->pLibraryName,strLibraryName)==0) {
- found = 1;
- break;
- }
- pBucket++;
- }
-
- if (!found) {
- return emptyString;
- }
-
- if (uToken<=pBucket->numberOfStringsInLibrary) {
- return pBucket->pArrayOfLibraryStrings[uToken];
- } else {
- /* string token out of range */
- return emptyString;
- }
-
-#else
-
- return emptyString;
-
-#endif
-}
diff --git a/lib/libsi18n/getstrprop.c b/lib/libsi18n/getstrprop.c
index 4a5ab04b..c63d6ba1 100644
--- a/lib/libsi18n/getstrprop.c
+++ b/lib/libsi18n/getstrprop.c
@@ -49,77 +49,7 @@
#include "getstrmem.h"
-#include "coreres.h"
-
-Resource *hResource = NULL;
-char empty_string[] = "";
-
-char*
-XP_GetStringFromMemory(char* strLibraryName,int iToken);
-
-
-
-void
-XP_InitStringDatabase(char* pathCWD, char* databaseName)
-{
- hResource = core_res_init_resource (pathCWD, databaseName);
-}
-
-char *XP_GetPropertyString(char* strLibraryName,int iToken, ACCEPT_LANGUAGE_LIST lang)
-{
- char *key_name;
- char *result = NULL;
-
- if (hResource == NULL)
- return NULL;
-
- /*creating the key*/
- key_name=(char*)malloc(strlen(strLibraryName) + 10);
- sprintf(key_name, "%s-%d", strLibraryName, iToken);
- if(key_name == NULL)
- return NULL;
-
- result = (char *) core_res_getstring(hResource, key_name, lang) ;
-
- if (key_name)
- free (key_name);
-
- if (result == NULL)
- return empty_string;
- else
- return result ;
-}
-
-char*
-XP_GetStringFromDatabase(char* strLibraryName,
- char* strLanguage,
- int key)
-{
- char *result = NULL;
- ACCEPT_LANGUAGE_LIST alanglist;
- int n;
-
- /*
- * display first choice language if available, otherwise
- * use default which is english in most case
- */
- if (hResource) {
- n = XP_AccLangList (strLanguage, alanglist);
- if (n >= MAX_ACCEPT_LANGUAGE)
- alanglist[MAX_ACCEPT_LANGUAGE-1][0] = '\0';
- else
- alanglist[n][0] = '\0';
- result = XP_GetPropertyString(strLibraryName, key, alanglist);
- }
-
- /* we should never come here. */
- if (result == NULL)
- result = XP_GetStringFromMemory(strLibraryName,key);
- return result;
-}
-
-
-char*
+static char*
XP_GetStringFromMemory(char* strLibraryName,int iToken)
{
/*
@@ -171,3 +101,16 @@ XP_GetStringFromMemory(char* strLibraryName,int iToken)
}
}
+
+char*
+XP_GetStringFromDatabase(char* strLibraryName,
+ char* strLanguage,
+ int key)
+{
+ char *result = NULL;
+
+ /* we use memory strings only in ds. */
+ if (result == NULL)
+ result = XP_GetStringFromMemory(strLibraryName,key);
+ return result;
+}
diff --git a/lib/libsi18n/propset.c b/lib/libsi18n/propset.c
deleted file mode 100644
index 87b98854..00000000
--- a/lib/libsi18n/propset.c
+++ /dev/null
@@ -1,442 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- *
- * This Program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception.
- *
- *
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <sys/stat.h>
-#include <ctype.h>
-#include "i18n.h"
-
-#include "txtfile.h"
-#include "reshash.h"
-#include "propset.h"
-
-int PropertiesLoadFileToHash(PropertiesSet *propset, char *language);
-char *GetProertiesFilename(char *directory, char *file, char *language);
-int PropertiesLanguageStatus(PropertiesSet *propset, char *language);
-int PropertiesSetLangStatus(LanguageStatus *langstatus, char *language, int status);
-int unicode_to_UTF8(unsigned int wch, char *utf8);
-char *decode_ascii(char *src);
-
-
-PropertiesSet * PropertiesInit(char *directory, char *file)
-{
- struct stat buf;
- char * file_path;
- PropertiesSet *propset = NULL;
- PropertiesSet *result = NULL;
- ResHash *reshash;
-
- file_path = (char *) malloc (strlen(directory) + strlen(file) + 20);
-
- strcpy(file_path, directory);
- strcat(file_path, "/");
- strcat(file_path, file);
- strcat(file_path, ".properties");
-
- if (stat(file_path, &buf) == 0) {
- propset = (PropertiesSet *) malloc(sizeof(PropertiesSet));
- memset(propset, 0, sizeof(PropertiesSet));
- reshash = (ResHash *) ResHashCreate(file);
-
- if (reshash) {
- propset->langlist = (LanguageStatus *) malloc(sizeof(LanguageStatus));
- memset(propset->langlist, 0, sizeof(LanguageStatus));
-
- propset->res = reshash;
- propset->directory = strdup(directory);
- propset->filename = strdup(file);
- PropertiesLoadFileToHash(propset, NULL);
- result = propset;
- }
- }
-
- if (file_path)
- free (file_path);
-
- return result;
-}
-
-
-char *GetProertiesFilename(char *directory, char *file, char *language)
-{
- char *filepath;
-
- if (language && *language == '\0')
- filepath = (char *) malloc(strlen(directory) + strlen(file) + strlen(language) + 20);
- else
- filepath = (char *) malloc(strlen(directory) + strlen(file) + 20);
-
- strcpy(filepath, directory);
- if (filepath[strlen(filepath) - 1] != '/')
- strcat(filepath, "/");
- strcat(filepath, file);
- if (language && *language != '\0') {
- strcat(filepath, "_");
- strcat(filepath, language);
- }
- strcat(filepath, ".properties");
-
- return filepath;
-}
-
-/*
- PropertiesLoadToHash
-
- Opens property file and save data to hash table
-
- Input
- propfile: handle
- file: full path with file extension
-
- return:
- 0: SUCCESS
- 1: FAIL
-*/
-
-int PropertiesLoadFileToHash(PropertiesSet *propset, char *language)
-{
- TEXTFILE *hfile;
- char *filepath;
- char *p, *q;
- int n;
- char linebuf[1000];
- int st;
-
- st = PropertiesLanguageStatus(propset, language);
- if (st == LANGUAGE_INVALID)
- return 1;
- else if (st == LANGUAGE_LOAD)
- return 0;
-
- filepath = GetProertiesFilename(propset->directory, propset->filename, language);
-
- if ((hfile = OpenTextFile (filepath, TEXT_OPEN_FOR_READ)) == NULL) {
- PropertiesSetLangStatus(propset->langlist, language, LANGUAGE_INVALID);
- return 1;
- }
-
- while ((n = ReadTextLine(hfile, linebuf)) >= 0) {
- if (n == 0)
- continue;
-
- p = linebuf;
- /* strip leading spaces */
- while (*p == ' ' || *p == '\t')
- p ++;
- /* skip comment line */
- if (*p == '\0' || *p == '#' || *p == '=')
- continue;
-
- q = strchr (linebuf, '=');
- if (q) {
- char *key, *value, *newvalue;
-
- *q = '\0';
- key = p;
- value = q + 1;
- /* strip trailing space for key */
- p = key + strlen(key) - 1;
- while (*p == ' ' || *p == '\t') {
- *p = '\0';
- p --;
- }
-
- /* decode Unicode escape value */
- newvalue = decode_ascii(value);
-
- if (newvalue) {
- ResHashAdd(propset->res, key, newvalue, language);
- free(newvalue);
- }
- else
- ResHashAdd(propset->res, key, value, language);
- }
- }
- PropertiesSetLangStatus(propset->langlist, language, LANGUAGE_LOAD);
- return 0;
-}
-
-/*
- PropertiesIsLoaded
-
- Test if current properties associated with language
- is loaded or not.
-
- return:
- 1: SUCCESS
- 0: FAIL
- */
-
-int PropertiesLanguageStatus(PropertiesSet *propset, char *language)
-{
- LanguageStatus *plang;
-
- plang = propset->langlist;
- if (language == NULL || *language == '\0') {
- return plang->status;
- }
-
- plang = plang->next;
-
- while (plang) {
- if (strcmp(plang->language, language) == 0) {
- return plang->status;
- }
- plang = plang->next;
- }
- return LANGUAGE_NONE;
-}
-
-int PropertiesSetLangStatus(LanguageStatus *langlist, char *language, int status)
-{
- LanguageStatus *plang, *prev;
- LanguageStatus *langstatus;
-
- if (language == NULL || *language == '\0') {
- langlist->status = status;
- return 0;
- }
-
- prev = plang = langlist;
- plang = plang->next;
-
- while (plang) {
- if (strcmp(plang->language, language) == 0) {
- plang->status = status;
- return 0;
- }
- prev = plang;
- plang = plang->next;
- }
-
- langstatus = (LanguageStatus *) malloc(sizeof(LanguageStatus));
- memset (langstatus, 0, sizeof(LanguageStatus));
- langstatus->language = strdup(language);
- langstatus->status = status;
- prev->next = langstatus;
-
- return 0;
-}
-
-
-/***
- PropertiesOpenFile
-
- return 0: loaded
- 1: fail to load file associated with the language
-
-
- */
-int PropertiesOpenFile(PropertiesSet *propset, char *language)
-{
- int status;
- status = PropertiesLanguageStatus(propset, language);
-
- if (status == LANGUAGE_NONE)
- return PropertiesLoadFileToHash (propset, language);
- else if (status == LANGUAGE_INVALID)
- return 1;
- else
- return 0;
-}
-
-const char *PropertiesGetString(PropertiesSet *propset, char *key, ACCEPT_LANGUAGE_LIST acceptlangauge)
-{
- int i;
- char *language = NULL;
-
- i = 0;
- while (acceptlangauge[i][0]) {
- if (PropertiesOpenFile(propset, acceptlangauge[i]) == 0) {
- language = acceptlangauge[i];
- break;
- }
- i ++;
- }
-
- return ResHashSearch(propset->res, key, language);
-}
-void PropertiesDestroy(PropertiesSet *propset)
-{
- LanguageStatus *langattrib, *next;
-
- if (propset) {
- if (propset->path)
- free(propset->path);
- if (propset->directory)
- free(propset->directory);
- if (propset->filename)
- free(propset->filename);
-
- ResHashDestroy(propset->res);
-
- langattrib = propset->langlist;
- while (langattrib) {
- next = langattrib->next;
- if (langattrib->language)
- free(langattrib->language);
- free(langattrib);
- langattrib = next;
- }
- }
-}
-
-
-char *decode_ascii(char *src)
-{
- int i;
- char utf8[10];
- int state = 0;
- int digit = 0;
- int digit_count = 0;
- char *result, *p, *q;
-
- if (src == NULL || *src == '\0')
- return NULL;
-
- if (strchr(src, '\\') == NULL)
- return NULL;
-
- result = (char *) malloc(strlen(src) + 1);
-
- p = src;
- q = result;
-
- for (;*p; p++) {
- char ch;
- int n;
- if (state == BACKSLASH_U) {
- ch = toupper(*p);
- if (ch >= '0' && ch <= '9') {
- digit = digit * 16 + (ch - '0');
- digit_count ++;
- }
- else if (ch >= 'A' && ch <= 'F') {
- digit = digit * 16 + (ch - 'A' + 10);
- digit_count ++;
- }
- else {
- n = unicode_to_UTF8(digit, utf8);
- for (i = 0; i < n; i++)
- *q ++ = utf8[i];
- *q ++ = *p;
- state = 0;
- digit_count = 0;
- }
-
- if (digit_count == 4) {
- n = unicode_to_UTF8(digit, utf8);
- for (i = 0; i < n; i++)
- *q ++ = utf8[i];
- state = 0;
- }
- }
- else if (state == BACKSLASH) {
- if (*p == 'u') {
- state = BACKSLASH_U;
- digit = 0;
- digit_count = 0;
- continue;
- }
- else if (*p == 'n') {
- *q++ = '\n';
- state = 0;
- }
- else if (*p == 'r') {
- *q++ = '\r';
- state = 0;
- }
- else {
- *q++ = '\\';
- *q++ = *p;
- state = 0;
- }
- }
- else if (*p == '\\') {
- state = BACKSLASH;
- continue;
- }
- else {
- *q++ = *p;
- state = 0;
- }
- }
- *q = '\0';
- return result;
-}
-
-
-int unicode_to_UTF8(unsigned int wch, char *utf8)
-{
- unsigned char hibyte, lobyte, mibyte;
-
- if (wch <= 0x7F) {
- /* 0000 007F ==> 0xxxxxxx */
- utf8[0] = (unsigned char) wch ;
- utf8[1] = '\0';
- return 1;
- }
- else if (wch <= 0x7FF) {
- /* 0000 07FF ==> 110xxxxx 10xxxxxx */
- lobyte = wch & 0x3F;
- hibyte = (wch >> 6) & 0x1F;
-
- utf8[0] = 0xC0 | hibyte;
- utf8[1] = 0x80 | lobyte;
- utf8[2] = '\0';
- return 2;
- }
- else {
- /* FFFF ==> 1110xxxx 10xxxxxx 10xxxxxx */
- lobyte = wch & 0x3F;
- mibyte = (wch >> 6) & 0x3F;
- hibyte = (wch >> 12) & 0xF;
-
- utf8[0] = 0xE0 | hibyte;
- utf8[1] = 0x80 | mibyte;
- utf8[2] = 0x80 | lobyte;
- utf8[3] = '\0';
- return 3;
- }
-}
diff --git a/lib/libsi18n/propset.h b/lib/libsi18n/propset.h
deleted file mode 100644
index 8ef0df96..00000000
--- a/lib/libsi18n/propset.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/** BEGIN COPYRIGHT BLOCK
- * This Program is free software; you can redistribute it and/or modify it under
- * the terms of the GNU General Public License as published by the Free Software
- * Foundation; version 2 of the License.
- *
- * This Program 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 General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License along with
- * this Program; if not, write to the Free Software Foundation, Inc., 59 Temple
- * Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * In addition, as a special exception, Red Hat, Inc. gives You the additional
- * right to link the code of this Program with code not covered under the GNU
- * General Public License ("Non-GPL Code") and to distribute linked combinations
- * including the two, subject to the limitations in this paragraph. Non-GPL Code
- * permitted under this exception must only link to the code of this Program
- * through those well defined interfaces identified in the file named EXCEPTION
- * found in the source code files (the "Approved Interfaces"). The files of
- * Non-GPL Code may instantiate templates or use macros or inline functions from
- * the Approved Interfaces without causing the resulting work to be covered by
- * the GNU General Public License. Only Red Hat, Inc. may make changes or
- * additions to the list of Approved Interfaces. You must obey the GNU General
- * Public License in all respects for all of the Program code and other code used
- * in conjunction with the Program except the Non-GPL Code covered by this
- * exception. If you modify this file, you may extend this exception to your
- * version of the file, but you are not obligated to do so. If you do not wish to
- * provide this exception without modification, you must delete this exception
- * statement from your version and license this file solely under the GPL without
- * exception.
- *
- *
- * Copyright (C) 2001 Sun Microsystems, Inc. Used by permission.
- * Copyright (C) 2005 Red Hat, Inc.
- * All rights reserved.
- * END COPYRIGHT BLOCK **/
-
-#ifdef HAVE_CONFIG_H
-# include <config.h>
-#endif
-
-#ifndef PROPSET_H
-#define PROPSET_H
-
-#include "reshash.h"
-
-
-enum {
- LANGUAGE_NONE = 0,
- LANGUAGE_LOAD,
- LANGUAGE_INVALID
-} ;
-
-enum {
- BACKSLASH = 1,
- BACKSLASH_U
-};
-
-
-typedef struct LanguageStatusS {
- char *language;
- int status;
- struct LanguageStatusS *next;
-} LanguageStatus;
-
-typedef struct PropertiesSet {
- char *path;
- char *directory;
- char *filename;
- LanguageStatus *langlist;
- ResHash *res;
-} PropertiesSet;
-
-
-PropertiesSet * PropertiesInit(char *directory, char *file);
-const char *PropertiesGetString(PropertiesSet *propset, char *key, ACCEPT_LANGUAGE_LIST acceptlangauge);
-void PropertiesDestroy(PropertiesSet *propfile);
-
-#endif