* Build fix under Haiku (the two max() arguments had different types).

* Improved error reporting in WriteToFile().
* UpdateAttributes() was called twice in WriteToFile().
* Cleanup.


git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@34249 a95241bf-73f2-0310-859d-f6bbb57e9c96
This commit is contained in:
Axel Dörfler 2009-11-25 17:12:06 +00:00
parent 2f1e464a8c
commit 47f5a0f86b
1 changed files with 47 additions and 56 deletions

View File

@ -31,21 +31,16 @@
using std::auto_ptr;
using std::min;
using std::max;
using std::pair;
/*
* This file implements the default catalog-type for the opentracker locale
* kit. Alternatively, this could be used as a full add-on, but currently this
* is provided as part of liblocale.so.
*/
/*! This file implements the default catalog-type for the opentracker locale
kit. Alternatively, this could be used as a full add-on, but currently this
is provided as part of liblocale.so.
*/
/*
* several attributes/resource-IDs used within the Locale Kit:
*/
// several attributes/resource-IDs used within the Locale Kit:
const char *kCatLangAttr = "BEOS:LOCALE_LANGUAGE";
// name of catalog language, lives in every catalog file
const char *kCatSigAttr = "BEOS:LOCALE_SIGNATURE";
@ -60,12 +55,11 @@ static int16 kCatArchiveVersion = 1;
// version of the catalog archive structure, bump this if you change it!
/*
* constructs a DefaultCatalog with given signature and language and reads
* the catalog from disk.
* InitCheck() will be B_OK if catalog could be loaded successfully, it will
* give an appropriate error-code otherwise.
*/
/*! Constructs a DefaultCatalog with given signature and language and reads
the catalog from disk.
InitCheck() will be B_OK if catalog could be loaded successfully, it will
give an appropriate error-code otherwise.
*/
DefaultCatalog::DefaultCatalog(const char *signature, const char *language,
uint32 fingerprint)
:
@ -78,12 +72,11 @@ DefaultCatalog::DefaultCatalog(const char *signature, const char *language,
}
/*
* constructs a DefaultCatalog and reads it from the resources of the
* given entry-ref (which usually is an app- or add-on-file).
* InitCheck() will be B_OK if catalog could be loaded successfully, it will
* give an appropriate error-code otherwise.
*/
/*! Constructs a DefaultCatalog and reads it from the resources of the
given entry-ref (which usually is an app- or add-on-file).
InitCheck() will be B_OK if catalog could be loaded successfully, it will
give an appropriate error-code otherwise.
*/
DefaultCatalog::DefaultCatalog(entry_ref *appOrAddOnRef)
:
BHashMapCatalog("", "", 0)
@ -95,11 +88,10 @@ DefaultCatalog::DefaultCatalog(entry_ref *appOrAddOnRef)
}
/*
* constructs an empty DefaultCatalog with given sig and language.
* This is used for editing/testing purposes.
* InitCheck() will always be B_OK.
*/
/*! Constructs an empty DefaultCatalog with given sig and language.
This is used for editing/testing purposes.
InitCheck() will always be B_OK.
*/
DefaultCatalog::DefaultCatalog(const char *path, const char *signature,
const char *language)
:
@ -168,10 +160,9 @@ DefaultCatalog::ReadFromFile(const char *path)
}
/*
* this method is not currently being used, but it may be useful in the
* future...
*/
/*! This method is not currently being used, but it may be useful in the
future...
*/
status_t
DefaultCatalog::ReadFromAttribute(entry_ref *appOrAddOnRef)
{
@ -192,34 +183,35 @@ DefaultCatalog::WriteToFile(const char *path)
BFile catalogFile;
if (path)
fPath = path;
status_t res = catalogFile.SetTo(fPath.String(),
status_t status = catalogFile.SetTo(fPath.String(),
B_WRITE_ONLY | B_CREATE_FILE | B_ERASE_FILE);
if (res != B_OK)
return res;
if (status != B_OK)
return status;
BMallocIO mallocIO;
mallocIO.SetBlockSize(max(fCatMap.Size()*20, 256));
mallocIO.SetBlockSize(max_c(fCatMap.Size() * 20, 256));
// set a largish block-size in order to avoid reallocs
res = Flatten(&mallocIO);
if (res == B_OK) {
ssize_t wsz;
wsz = catalogFile.Write(mallocIO.Buffer(), mallocIO.BufferLength());
if (wsz != (ssize_t)mallocIO.BufferLength())
return B_FILE_ERROR;
status = Flatten(&mallocIO);
if (status != B_OK)
return status;
// set mimetype-, language- and signature-attributes:
UpdateAttributes(catalogFile);
}
if (res == B_OK)
UpdateAttributes(catalogFile);
return res;
ssize_t bytesWritten
= catalogFile.Write(mallocIO.Buffer(), mallocIO.BufferLength());
if (bytesWritten < 0)
return bytesWritten;
if (bytesWritten != (ssize_t)mallocIO.BufferLength())
return B_IO_ERROR;
// set mimetype-, language- and signature-attributes:
UpdateAttributes(catalogFile);
return B_OK;
}
/*
* this method is not currently being used, but it may be useful in the
* future...
*/
/*! This method is not currently being used, but it may be useful in the
future...
*/
status_t
DefaultCatalog::WriteToAttribute(entry_ref *appOrAddOnRef)
{
@ -234,10 +226,9 @@ DefaultCatalog::WriteToResource(entry_ref *appOrAddOnRef)
}
/*
* writes mimetype, language-name and signature of catalog into the
* catalog-file.
*/
/*! Writes mimetype, language-name and signature of catalog into the
catalog-file.
*/
void
DefaultCatalog::UpdateAttributes(BFile& catalogFile)
{