LocaleRosterData: use BPathFinder to locate catalog add-ons

* Makes the code slightly simpler and more future proof.
This commit is contained in:
Adrien Destugues
2015-01-17 13:16:49 +01:00
parent 1ff0a2b51a
commit 658f64c3f1
+14 -30
View File
@@ -24,8 +24,10 @@
#include <Locale.h> #include <Locale.h>
#include <Node.h> #include <Node.h>
#include <Path.h> #include <Path.h>
#include <PathFinder.h>
#include <Roster.h> #include <Roster.h>
#include <String.h> #include <String.h>
#include <StringList.h>
#include <TimeZone.h> #include <TimeZone.h>
// ICU includes // ICU includes
@@ -333,36 +335,16 @@ LocaleRosterData::_InitializeCatalogAddOns()
defaultCatalogAddOnInfo->fCreateFunc = DefaultCatalog::Create; defaultCatalogAddOnInfo->fCreateFunc = DefaultCatalog::Create;
fCatalogAddOnInfos.AddItem((void*)defaultCatalogAddOnInfo); fCatalogAddOnInfos.AddItem((void*)defaultCatalogAddOnInfo);
directory_which folders[] = { BStringList folders;
B_USER_NONPACKAGED_ADDONS_DIRECTORY, BPathFinder::FindPaths(B_FIND_PATH_ADD_ONS_DIRECTORY, "locale/catalogs/",
B_USER_ADDONS_DIRECTORY, B_FIND_PATH_EXISTING_ONLY, folders);
B_SYSTEM_NONPACKAGED_ADDONS_DIRECTORY,
B_SYSTEM_ADDONS_DIRECTORY,
};
BPath addOnPath; BPath addOnPath;
BDirectory addOnFolder; BDirectory addOnFolder;
char buf[4096]; char buf[4096];
status_t err; status_t err;
for (uint32 f = 0; f < sizeof(folders) / sizeof(directory_which); ++f) { for (int32 f = 0; f < folders.CountStrings(); f++) {
find_directory(folders[f], &addOnPath); BString addOnFolderName = folders.StringAt(f);
BString addOnFolderName(addOnPath.Path());
addOnFolderName << "/locale/catalogs";
system_info info;
if (get_system_info(&info) == B_OK
&& (info.abi & B_HAIKU_ABI_MAJOR)
!= (B_HAIKU_ABI & B_HAIKU_ABI_MAJOR)) {
switch (B_HAIKU_ABI & B_HAIKU_ABI_MAJOR) {
case B_HAIKU_ABI_GCC_2:
addOnFolderName << "/gcc2";
break;
case B_HAIKU_ABI_GCC_4:
addOnFolderName << "/gcc4";
break;
}
}
err = addOnFolder.SetTo(addOnFolderName.String()); err = addOnFolder.SetTo(addOnFolderName.String());
if (err != B_OK) if (err != B_OK)
continue; continue;
@@ -374,12 +356,14 @@ LocaleRosterData::_InitializeCatalogAddOns()
BNode node; BNode node;
BEntry entry; BEntry entry;
dirent* dent; dirent* dent;
while ((count = addOnFolder.GetNextDirents((dirent*)buf, 4096)) > 0) { while ((count = addOnFolder.GetNextDirents((dirent*)buf, sizeof(buf)))
> 0) {
dent = (dirent*)buf; dent = (dirent*)buf;
while (count-- > 0) { while (count-- > 0) {
if (strcmp(dent->d_name, ".") && strcmp(dent->d_name, "..") if (strcmp(dent->d_name, ".") != 0
&& strcmp(dent->d_name, "gcc2") && strcmp(dent->d_name, "..") != 0
&& strcmp(dent->d_name, "gcc4")) { && strcmp(dent->d_name, "x86") != 0
&& strcmp(dent->d_name, "x86_gcc2") != 0) {
// we have found (what should be) a catalog-add-on: // we have found (what should be) a catalog-add-on:
eref.device = dent->d_pdev; eref.device = dent->d_pdev;
eref.directory = dent->d_pino; eref.directory = dent->d_pino;