summaryrefslogtreecommitdiff
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/Host_IO-POSIX.cpp2
-rw-r--r--source/SafeStringAPIs.cpp10
-rw-r--r--source/UnicodeConversions.cpp16
-rw-r--r--source/XMPFiles_IO.cpp12
-rw-r--r--source/XMP_LibUtils.cpp39
-rw-r--r--source/XMP_LibUtils.hpp54
-rw-r--r--source/XMP_ProgressTracker.hpp3
7 files changed, 72 insertions, 64 deletions
diff --git a/source/Host_IO-POSIX.cpp b/source/Host_IO-POSIX.cpp
index 420b468..5f71a28 100644
--- a/source/Host_IO-POSIX.cpp
+++ b/source/Host_IO-POSIX.cpp
@@ -357,7 +357,7 @@ XMP_Uns32 Host_IO::Read ( Host_IO::FileRef refNum, void * buffer, XMP_Uns32 coun
ssize_t bytesRead = read ( refNum, buffer, count );
if ( bytesRead == -1 ) XMP_Throw ( "Host_IO::Read, read failure", kXMPErr_ReadError );
- return bytesRead;
+ return static_cast<XMP_Uns32>( bytesRead );
} // Host_IO::Read
diff --git a/source/SafeStringAPIs.cpp b/source/SafeStringAPIs.cpp
index 41f09e4..0e7b224 100644
--- a/source/SafeStringAPIs.cpp
+++ b/source/SafeStringAPIs.cpp
@@ -407,8 +407,8 @@ CONDITIONAL_STATIC SafeInt32 makepath_safe(char* path, size_t size, const char*
static char *reverse_string_safe(char *str, size_t size)
{
- int head = 0;
- int tail = strnlen_safe(str, size) - 1;
+ size_t head = 0;
+ size_t tail = strnlen_safe(str, size) - 1;
while (head < tail)
{
char temp = str[head];
@@ -607,15 +607,15 @@ CONDITIONAL_STATIC char * gets_safe(char* buffer, size_t size)
char* pointer = buffer;
char ch;
size_t count = size;
- ch = getchar();
- while(ch != EOF && ch != '\n')
+ ch = (char)getchar();
+ while(ch != (char)EOF && ch != '\n')
{
if(count > 0)
{
count--;
*pointer++ = ch;
}
- ch = getchar();
+ ch = (char)getchar();
}
if(count == 0)
{
diff --git a/source/UnicodeConversions.cpp b/source/UnicodeConversions.cpp
index b4de085..39e4413 100644
--- a/source/UnicodeConversions.cpp
+++ b/source/UnicodeConversions.cpp
@@ -274,7 +274,7 @@ extern void ToUTF16 ( const UTF8Unit * utf8In, size_t utf8Len, std::string * utf
while ( utf8Len > 0 ) {
Converter ( utf8In, utf8Len, u16Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf16Str->append ( (const char *)u16Buffer, writeCount*2 );
utf8In += readCount;
utf8Len -= readCount;
@@ -295,7 +295,7 @@ extern void ToUTF16Native ( const UTF8Unit * utf8In, size_t utf8Len, std::string
while ( utf8Len > 0 ) {
UTF8_to_UTF16Nat ( utf8In, utf8Len, u16Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf16Str->append ( (const char *)u16Buffer, writeCount*2 );
utf8In += readCount;
utf8Len -= readCount;
@@ -319,7 +319,7 @@ extern void ToUTF32 ( const UTF8Unit * utf8In, size_t utf8Len, std::string * utf
while ( utf8Len > 0 ) {
Converter ( utf8In, utf8Len, u32Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf32Str->append ( (const char *)u32Buffer, writeCount*4 );
utf8In += readCount;
utf8Len -= readCount;
@@ -340,7 +340,7 @@ extern void ToUTF32Native ( const UTF8Unit * utf8In, size_t utf8Len, std::string
while ( utf8Len > 0 ) {
UTF8_to_UTF32Nat ( utf8In, utf8Len, u32Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf32Str->append ( (const char *)u32Buffer, writeCount*4 );
utf8In += readCount;
utf8Len -= readCount;
@@ -364,7 +364,7 @@ extern void FromUTF16 ( const UTF16Unit * utf16In, size_t utf16Len, std::string
while ( utf16Len > 0 ) {
Converter ( utf16In, utf16Len, u8Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf8Str->append ( (const char *)u8Buffer, writeCount );
utf16In += readCount;
utf16Len -= readCount;
@@ -385,7 +385,7 @@ extern void FromUTF16Native ( const UTF16Unit * utf16In, size_t utf16Len, std::s
while ( utf16Len > 0 ) {
UTF16Nat_to_UTF8 ( utf16In, utf16Len, u8Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf8Str->append ( (const char *)u8Buffer, writeCount );
utf16In += readCount;
utf16Len -= readCount;
@@ -409,7 +409,7 @@ extern void FromUTF32 ( const UTF32Unit * utf32In, size_t utf32Len, std::string
while ( utf32Len > 0 ) {
Converter ( utf32In, utf32Len, u8Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf8Str->append ( (const char *)u8Buffer, writeCount );
utf32In += readCount;
utf32Len -= readCount;
@@ -430,7 +430,7 @@ extern void FromUTF32Native ( const UTF32Unit * utf32In, size_t utf32Len, std::s
while ( utf32Len > 0 ) {
UTF32Nat_to_UTF8 ( utf32In, utf32Len, u8Buffer, kBufferSize, &readCount, &writeCount );
- if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadXML );
+ if ( writeCount == 0 ) UC_Throw ( "Incomplete Unicode at end of string", kXMPErr_BadUnicode );
utf8Str->append ( (const char *)u8Buffer, writeCount );
utf32In += readCount;
utf32Len -= readCount;
diff --git a/source/XMPFiles_IO.cpp b/source/XMPFiles_IO.cpp
index 6de8666..3d3c45e 100644
--- a/source/XMPFiles_IO.cpp
+++ b/source/XMPFiles_IO.cpp
@@ -1,4 +1,4 @@
-// =================================================================================================
+ // =================================================================================================
// ADOBE SYSTEMS INCORPORATED
// Copyright 2010 Adobe Systems Incorporated
// All Rights Reserved
@@ -18,22 +18,22 @@
#define EMPTY_FILE_PATH ""
-#define XMP_FILESIO_STATIC_START try { int a;
+#define XMP_FILESIO_STATIC_START try { /* int a;*/
#define XMP_FILESIO_STATIC_END1(errorCallbackPtr, filePath, severity) \
- a = 1; \
+ /*a = 1;*/ \
} catch ( XMP_Error & error ) { \
if ( (errorCallbackPtr) != NULL ) (errorCallbackPtr)->NotifyClient ( (severity), error, (filePath) ); \
else throw; \
}
-#define XMP_FILESIO_START try { int b;
+#define XMP_FILESIO_START try { /*int b;*/
#define XMP_FILESIO_END1(severity) \
- b = 1; \
+ /*b = 1;*/ \
} catch ( XMP_Error & error ) { \
if ( errorCallback != NULL ) errorCallback->NotifyClient ( (severity), error, filePath.c_str() ); \
else throw; \
}
#define XMP_FILESIO_END2(filePath, severity) \
- b = 1; \
+ /* b = 1;*/ \
} catch ( XMP_Error & error ) { \
if ( errorCallback != NULL ) errorCallback->NotifyClient ( (severity), error, (filePath) ); \
else throw; \
diff --git a/source/XMP_LibUtils.cpp b/source/XMP_LibUtils.cpp
index 8d62e74..e27ea30 100644
--- a/source/XMP_LibUtils.cpp
+++ b/source/XMP_LibUtils.cpp
@@ -35,45 +35,6 @@ extern "C" void Terminate_LibUtils(){
}
// =================================================================================================
-// Error notifications
-// =================================================================================================
-
-bool GenericErrorCallback::CheckLimitAndSeverity ( XMP_ErrorSeverity severity ) const
-{
-
- if ( this->limit == 0 ) return true; // Always notify if the limit is zero.
- if ( severity < this->topSeverity ) return false; // Don't notify, don't count.
-
- if ( severity > this->topSeverity ) {
- this->topSeverity = severity;
- this->notifications = 0;
- }
-
- this->notifications += 1;
- return (this->notifications <= this->limit);
-
-} // GenericErrorCallback::CheckLimitAndSeverity
-
-// =================================================================================================
-
-void GenericErrorCallback::NotifyClient ( XMP_ErrorSeverity severity, XMP_Error & error, XMP_StringPtr filePath /*= 0 */ ) const
-{
- bool notifyClient = CanNotify() && !error.IsNotified();
- bool returnAndRecover (severity == kXMPErrSev_Recoverable);
-
- if ( notifyClient ) {
- error.SetNotified();
- notifyClient = CheckLimitAndSeverity ( severity );
- if ( notifyClient ) {
- returnAndRecover &= ClientCallbackWrapper( filePath, severity, error.GetID(), error.GetErrMsg() );
- }
- }
-
- if ( ! returnAndRecover ) XMP_Error_Throw ( error );
-
-}
-
-// =================================================================================================
// Thread synchronization locks
// =================================================================================================
diff --git a/source/XMP_LibUtils.hpp b/source/XMP_LibUtils.hpp
index 38b0279..e4477fa 100644
--- a/source/XMP_LibUtils.hpp
+++ b/source/XMP_LibUtils.hpp
@@ -72,6 +72,8 @@ extern "C" void Terminate_LibUtils();
#define XMP_Throw_Verbose(msg,e,id) XMP_Throw(msg, id)
#endif
+#define XMP_Error_Throw(error) { AnnounceThrow (error.GetErrMsg()); throw error; }
+
class GenericErrorCallback {
public:
// Abstract base class for XMPCore and XMPFiles internal error notification support. Needed so
@@ -88,18 +90,60 @@ public:
void Clear() { this->notifications = 0; this->limit = 1; this->topSeverity = kXMPErrSev_Recoverable; };
- bool CheckLimitAndSeverity (XMP_ErrorSeverity severity ) const;
+ bool CheckLimitAndSeverity (XMP_ErrorSeverity severity ) const
+ {
+
+ if ( this->limit == 0 ) return true; // Always notify if the limit is zero.
+ if ( severity < this->topSeverity ) return false; // Don't notify, don't count.
+
+ if ( severity > this->topSeverity ) {
+ this->topSeverity = severity;
+ this->notifications = 0;
+ }
+
+ this->notifications += 1;
+ return (this->notifications <= this->limit);
+
+ } // GenericErrorCallback::CheckLimitAndSeverity
// Const so they can be used with const XMPMeta and XMPFiles objects.
- void NotifyClient ( XMP_ErrorSeverity severity, XMP_Error & error, XMP_StringPtr filePath = 0 ) const;
+ void NotifyClient ( XMP_ErrorSeverity severity, XMP_Error & error, XMP_StringPtr filePath = 0 ) const
+ {
+
+ bool notifyClient = CanNotify() && !error.IsNotified();
+ bool returnAndRecover (severity == kXMPErrSev_Recoverable);
+
+ if ( notifyClient ) {
+ error.SetNotified();
+ notifyClient = CheckLimitAndSeverity ( severity );
+ if ( notifyClient ) {
+ returnAndRecover &= ClientCallbackWrapper( filePath, severity, error.GetID(), error.GetErrMsg() );
+ }
+ }
+
+ if ( ! returnAndRecover ) XMP_Error_Throw ( error );
+
+ } // GenericErrorCallback::NotifyClient
virtual bool CanNotify ( ) const = 0;
virtual bool ClientCallbackWrapper ( XMP_StringPtr filePath, XMP_ErrorSeverity severity, XMP_Int32 cause, XMP_StringPtr messsage ) const = 0;
};
-#define XMP_Error_Throw(error) { AnnounceThrow (error.GetErrMsg()); throw error; }
+// -------------------------------------------------------------------------------------------------
+struct ErrorCallbackBox
+{
+ XMPFiles_ErrorCallbackWrapper wrapperProc;
+ XMPFiles_ErrorCallbackProc clientProc;
+ void * context;
+ XMP_Uns32 limit;
+
+ ErrorCallbackBox( XMPFiles_ErrorCallbackWrapper wrapperProcedure,
+ XMPFiles_ErrorCallbackProc clientProcedure,
+ void * contextPtr,
+ XMP_Uns32 limit32 ): wrapperProc(wrapperProcedure), clientProc(clientProcedure), context(contextPtr), limit(limit32) { }
+};
// -------------------------------------------------------------------------------------------------
@@ -195,8 +239,8 @@ public:
#define HaveAtomicIncrDecr 1
typedef int32_t XMP_AtomicCounter;
- #define XMP_AtomicIncrement(x) OSAtomicIncrement32 ( &(x) )
- #define XMP_AtomicDecrement(x) OSAtomicDecrement32 ( &(x) )
+ #define XMP_AtomicIncrement(x) OSAtomicIncrement32Barrier ( &(x) )
+ #define XMP_AtomicDecrement(x) OSAtomicDecrement32Barrier ( &(x) )
typedef pthread_mutex_t XMP_BasicMutex;
diff --git a/source/XMP_ProgressTracker.hpp b/source/XMP_ProgressTracker.hpp
index b6776fb..14b5d54 100644
--- a/source/XMP_ProgressTracker.hpp
+++ b/source/XMP_ProgressTracker.hpp
@@ -45,6 +45,9 @@ public:
void AddTotalWork ( float workIncrement );
void AddWorkDone ( float workIncrement );
void WorkComplete();
+ CallbackInfo * GetCallbackInfo() {
+ return ( (&cbInfo) ? (&cbInfo) : NULL);
+ }
bool WorkInProgress() { return this->workInProgress; };