Author: rhs
Date: Wed Aug 21 15:16:19 2013
New Revision: 1516184

URL: http://svn.apache.org/r1516184
Log:
don't set an error for PN_OVERFLOW, this fixes PROTON-336, also fixed error 
accessors to be consistent

Added:
    qpid/proton/trunk/proton-c/src/tests/message.c
Modified:
    qpid/proton/trunk/examples/messenger/c/recv.c
    qpid/proton/trunk/examples/messenger/c/send.c
    
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
    qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm
    qpid/proton/trunk/proton-c/bindings/php/proton.php
    qpid/proton/trunk/proton-c/bindings/python/proton.py
    qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb
    qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb
    qpid/proton/trunk/proton-c/include/proton/message.h
    qpid/proton/trunk/proton-c/include/proton/messenger.h
    qpid/proton/trunk/proton-c/src/message/message.c
    qpid/proton/trunk/proton-c/src/messenger/messenger.c
    qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt
    qpid/proton/trunk/tests/tools/apps/c/msgr-common.h

Modified: qpid/proton/trunk/examples/messenger/c/recv.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/examples/messenger/c/recv.c?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/examples/messenger/c/recv.c (original)
+++ qpid/proton/trunk/examples/messenger/c/recv.c Wed Aug 21 15:16:19 2013
@@ -26,13 +26,13 @@
 #include <stdlib.h>
 #include <ctype.h>
 
-#define check(messenger)                                         \
-  {                                                              \
-    if(pn_messenger_errno(messenger))                            \
-    {                                                            \
-      die(__FILE__, __LINE__, pn_messenger_error(messenger));    \
-    }                                                            \
-  }                                                              \
+#define check(messenger)                                                     \
+  {                                                                          \
+    if(pn_messenger_errno(messenger))                                        \
+    {                                                                        \
+      die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \
+    }                                                                        \
+  }                                                                          \
 
 void die(const char *file, int line, const char *message)
 {

Modified: qpid/proton/trunk/examples/messenger/c/send.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/examples/messenger/c/send.c?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/examples/messenger/c/send.c (original)
+++ qpid/proton/trunk/examples/messenger/c/send.c Wed Aug 21 15:16:19 2013
@@ -27,13 +27,13 @@
 #include <string.h>
 #include <ctype.h>
 
-#define check(messenger)                                         \
-  {                                                              \
-    if(pn_messenger_errno(messenger))                            \
-    {                                                            \
-      die(__FILE__, __LINE__, pn_messenger_error(messenger));    \
-    }                                                            \
-  }                                                              \
+#define check(messenger)                                                     \
+  {                                                                          \
+    if(pn_messenger_errno(messenger))                                        \
+    {                                                                        \
+      die(__FILE__, __LINE__, pn_error_text(pn_messenger_error(messenger))); \
+    }                                                                        \
+  }                                                                          \
 
 void die(const char *file, int line, const char *message)
 {

Modified: 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
 (original)
+++ 
qpid/proton/trunk/proton-c/bindings/java/src/main/java/org/apache/qpid/proton/messenger/jni/JNIMessenger.java
 Wed Aug 21 15:16:19 2013
@@ -277,7 +277,7 @@ class JNIMessenger implements Messenger
     {
         if(errorCode != 0 && errorCode != Proton.PN_INPROGRESS)
         {
-            String errorMessage = Proton.pn_messenger_error(_impl);
+            String errorMessage = 
Proton.pn_error_text(Proton.pn_messenger_error(_impl));
             if(errorCode == Proton.PN_TIMEOUT)
             {
                 throw new TimeoutException(errorMessage);

Modified: qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm 
(original)
+++ qpid/proton/trunk/proton-c/bindings/perl/lib/qpid/proton/Messenger.pm Wed 
Aug 21 15:16:19 2013
@@ -92,7 +92,7 @@ sub get_incoming_window {
 
 sub get_error {
     my ($self) = @_;
-    return cproton_perl::pn_messenger_error($self->{_impl});
+    return 
cproton_perl::pn_error_text(cproton_perl::pn_messenger_error($self->{_impl}));
 }
 
 sub get_errno {

Modified: qpid/proton/trunk/proton-c/bindings/php/proton.php
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/php/proton.php?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/php/proton.php (original)
+++ qpid/proton/trunk/proton-c/bindings/php/proton.php Wed Aug 21 15:16:19 2013
@@ -58,7 +58,7 @@ class Messenger
     if ($value < 0) {
       $exc = code2exc($value);
       if ($exc == null) $exc = "MessengerException";
-      throw new $exc("[$value]: " . pn_messenger_error($this->impl));
+      throw new $exc("[$value]: " . 
pn_error_text(pn_messenger_error($this->impl)));
     } else {
       return $value;
     }

Modified: qpid/proton/trunk/proton-c/bindings/python/proton.py
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/python/proton.py?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/python/proton.py (original)
+++ qpid/proton/trunk/proton-c/bindings/python/proton.py Wed Aug 21 15:16:19 
2013
@@ -235,7 +235,7 @@ class Messenger(object):
       if (err == PN_INPROGRESS):
         return
       exc = EXCEPTIONS.get(err, MessengerException)
-      raise exc("[%s]: %s" % (err, pn_messenger_error(self._mng)))
+      raise exc("[%s]: %s" % (err, 
pn_error_text(pn_messenger_error(self._mng))))
     else:
       return err
 

Modified: qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb 
(original)
+++ qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/message.rb Wed Aug 
21 15:16:19 2013
@@ -155,7 +155,7 @@ module Qpid
       # Returns the most recent error message.
       #
       def error
-        Cproton.pn_message_error(@impl)
+        Cproton.pn_error_text(Cproton.pn_message_error(@impl))
       end
 
       # Returns whether there is currently an error reported.

Modified: qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb 
(original)
+++ qpid/proton/trunk/proton-c/bindings/ruby/lib/qpid_proton/messenger.rb Wed 
Aug 21 15:16:19 2013
@@ -98,7 +98,7 @@ module Qpid
       # Returns the most recent error message.
       #
       def error
-        Cproton.pn_messenger_error(@impl)
+        Cproton.pn_error_text(Cproton.pn_messenger_error(@impl))
       end
 
       # Starts the +Messenger+, allowing it to begin sending and

Modified: qpid/proton/trunk/proton-c/include/proton/message.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/message.h?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/message.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/message.h Wed Aug 21 15:16:19 2013
@@ -25,6 +25,7 @@
 #include <proton/import_export.h>
 #include <proton/types.h>
 #include <proton/codec.h>
+#include <proton/error.h>
 #include <sys/types.h>
 #ifndef __cplusplus
 #include <stdbool.h>
@@ -50,7 +51,7 @@ PN_EXTERN void           pn_message_free
 
 PN_EXTERN void           pn_message_clear(pn_message_t *msg);
 PN_EXTERN int            pn_message_errno(pn_message_t *msg);
-PN_EXTERN const char *   pn_message_error(pn_message_t *msg);
+PN_EXTERN pn_error_t    *pn_message_error(pn_message_t *msg);
 
 PN_EXTERN bool           pn_message_is_inferred(pn_message_t *msg);
 PN_EXTERN int            pn_message_set_inferred(pn_message_t *msg, bool 
inferred);

Modified: qpid/proton/trunk/proton-c/include/proton/messenger.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/include/proton/messenger.h?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/include/proton/messenger.h (original)
+++ qpid/proton/trunk/proton-c/include/proton/messenger.h Wed Aug 21 15:16:19 
2013
@@ -172,10 +172,10 @@ PN_EXTERN int pn_messenger_errno(pn_mess
  *
  * @param[in] messenger the messenger to check for errors
  *
- * @return a descriptive error message or NULL if no error has
- *         occurred
+ * @return a pointer to the messenger's error descriptor
+ * @see error.h
  */
-PN_EXTERN const char *pn_messenger_error(pn_messenger_t *messenger);
+PN_EXTERN pn_error_t *pn_messenger_error(pn_messenger_t *messenger);
 
 /** Gets the outgoing window for a Messenger. @see
  * ::pn_messenger_set_outgoing_window

Modified: qpid/proton/trunk/proton-c/src/message/message.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/message/message.c?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/message/message.c (original)
+++ qpid/proton/trunk/proton-c/src/message/message.c Wed Aug 21 15:16:19 2013
@@ -387,10 +387,10 @@ int pn_message_errno(pn_message_t *msg)
   return pn_error_code(msg->error);
 }
 
-const char *pn_message_error(pn_message_t *msg)
+pn_error_t *pn_message_error(pn_message_t *msg)
 {
   assert(msg);
-  return pn_error_text(msg->error);
+  return msg->error;
 }
 
 bool pn_message_is_inferred(pn_message_t *msg)
@@ -839,9 +839,14 @@ int pn_message_encode(pn_message_t *msg,
 
   size_t remaining = *size;
   ssize_t encoded = pn_data_encode(msg->data, bytes, remaining);
-  if (encoded < 0)
-    return pn_error_format(msg->error, encoded, "data error: %s",
-                           pn_data_error(msg->data));
+  if (encoded < 0) {
+    if (encoded == PN_OVERFLOW) {
+      return encoded;
+    } else {
+      return pn_error_format(msg->error, encoded, "data error: %s",
+                             pn_data_error(msg->data));
+    }
+  }
 
   bytes += encoded;
   remaining -= encoded;

Modified: qpid/proton/trunk/proton-c/src/messenger/messenger.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/messenger/messenger.c?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/messenger/messenger.c (original)
+++ qpid/proton/trunk/proton-c/src/messenger/messenger.c Wed Aug 21 15:16:19 
2013
@@ -332,13 +332,10 @@ int pn_messenger_errno(pn_messenger_t *m
   }
 }
 
-const char *pn_messenger_error(pn_messenger_t *messenger)
+pn_error_t *pn_messenger_error(pn_messenger_t *messenger)
 {
-  if (messenger) {
-    return pn_error_text(messenger->error);
-  } else {
-    return NULL;
-  }
+  assert(messenger);
+  return messenger->error;
 }
 
 void pn_messenger_flow(pn_messenger_t *messenger)
@@ -504,7 +501,7 @@ void pn_messenger_endpoints(pn_messenger
     if (pn_delivery_readable(d)) {
       int err = pni_pump_in(messenger, 
pn_terminus_get_address(pn_link_source(link)), link);
       if (err) {
-        fprintf(stderr, "%s\n", pn_messenger_error(messenger));
+        fprintf(stderr, "%s\n", pn_error_text(messenger->error));
       }
     }
     d = pn_work_next(d);

Modified: qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt (original)
+++ qpid/proton/trunk/proton-c/src/tests/CMakeLists.txt Wed Aug 21 15:16:19 2013
@@ -26,4 +26,14 @@ set_target_properties (
   )
 pn_c_files (object.c)
 
+add_executable (c-message-tests message.c)
+target_link_libraries (c-message-tests qpid-proton)
+set_target_properties (
+  c-message-tests
+  PROPERTIES
+  COMPILE_FLAGS "${COMPILE_WARNING_FLAGS} ${COMPILE_PLATFORM_FLAGS}"
+  )
+pn_c_files (message.c)
+
 add_test (c-object-tests c-object-tests)
+add_test (c-message-tests c-message-tests)

Added: qpid/proton/trunk/proton-c/src/tests/message.c
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/proton-c/src/tests/message.c?rev=1516184&view=auto
==============================================================================
--- qpid/proton/trunk/proton-c/src/tests/message.c (added)
+++ qpid/proton/trunk/proton-c/src/tests/message.c Wed Aug 21 15:16:19 2013
@@ -0,0 +1,46 @@
+/*
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ *
+ */
+
+#include <stdarg.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <proton/error.h>
+#include <proton/message.h>
+
+#define assert(E) ((E) ? 0 : (abort(), 0))
+
+static void test_overflow_error()
+{
+  pn_message_t *message = pn_message();
+  char buf[8];
+  size_t size = 8;
+
+  int err = pn_message_encode(message, buf, &size);
+  assert(err == PN_OVERFLOW);
+  assert(pn_message_errno(message) == 0);
+}
+
+int main(int argc, char **argv)
+{
+  test_overflow_error();
+  return 0;
+}

Modified: qpid/proton/trunk/tests/tools/apps/c/msgr-common.h
URL: 
http://svn.apache.org/viewvc/qpid/proton/trunk/tests/tools/apps/c/msgr-common.h?rev=1516184&r1=1516183&r2=1516184&view=diff
==============================================================================
--- qpid/proton/trunk/tests/tools/apps/c/msgr-common.h (original)
+++ qpid/proton/trunk/tests/tools/apps/c/msgr-common.h Wed Aug 21 15:16:19 2013
@@ -50,7 +50,7 @@ pn_timestamp_t msgr_now();
 void parse_password( const char *, char ** );
 
 #define check_messenger(m)  \
-  { check(pn_messenger_errno(m) == 0, pn_messenger_error(m)) }
+  { check(pn_messenger_errno(m) == 0, pn_error_text(pn_messenger_error(m))) }
 
 #define check( expression, message )  \
   { if (!(expression)) msgr_die(__FILE__,__LINE__, message); }



---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to