From: Florian Forster Date: Sat, 21 Jan 2012 17:01:24 +0000 (+0100) Subject: oracle plugin: Improve the error printing function. X-Git-Tag: collectd-4.10.5~2 X-Git-Url: https://git.octo.it/?p=collectd.git;a=commitdiff_plain;h=f6fa5e18f901664a445699b54cf0afe5a3078176 oracle plugin: Improve the error printing function. Change-Id: Ie52c80bd4a686b403037c97383176adf3e701419 --- diff --git a/src/oracle.c b/src/oracle.c index 3fe21254..145fc1f4 100644 --- a/src/oracle.c +++ b/src/oracle.c @@ -1,6 +1,7 @@ /** * collectd - src/oracle.c - * Copyright (C) 2008,2009 Florian octo Forster + * Copyright (C) 2008,2009 noris network AG + * Copyright (C) 2012 Florian octo Forster * * 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 @@ -41,7 +42,7 @@ * affiliates. Other names may be trademarks of their respective owners. * * Authors: - * Florian octo Forster + * Florian octo Forster **/ #include "collectd.h" @@ -91,32 +92,44 @@ static void o_report_error (const char *where, /* {{{ */ sb4 error_code; int status; - status = OCIErrorGet (eh, /* record number = */ 1, - /* sqlstate = */ NULL, - &error_code, - (text *) &buffer[0], - (ub4) sizeof (buffer), - OCI_HTYPE_ERROR); - buffer[sizeof (buffer) - 1] = 0; - - if (status == OCI_SUCCESS) + /* An operation may cause / return multiple errors. Loop until we have + * handled all errors available. */ + while (42) { - size_t buffer_length; + memset (buffer, 0, sizeof (buffer)); + error_code = -1; + + status = OCIErrorGet (eh, /* record number = */ 1, + /* sqlstate = */ NULL, + &error_code, + (text *) &buffer[0], + (ub4) sizeof (buffer), + OCI_HTYPE_ERROR); + buffer[sizeof (buffer) - 1] = 0; + + if (status == OCI_NO_DATA) + return; - buffer_length = strlen (buffer); - while ((buffer_length > 0) && (buffer[buffer_length - 1] < 32)) + if (status == OCI_SUCCESS) { - buffer_length--; - buffer[buffer_length] = 0; - } + size_t buffer_length; - ERROR ("oracle plugin: %s: %s failed: %s", - where, what, buffer); - } - else - { - ERROR ("oracle plugin: %s: %s failed. Additionally, OCIErrorGet failed with status %i.", - where, what, status); + buffer_length = strlen (buffer); + while ((buffer_length > 0) && (buffer[buffer_length - 1] < 32)) + { + buffer_length--; + buffer[buffer_length] = 0; + } + + ERROR ("oracle plugin: %s: %s failed: %s", + where, what, buffer); + } + else + { + ERROR ("oracle plugin: %s: %s failed. Additionally, OCIErrorGet failed with status %i.", + where, what, status); + return; + } } } /* }}} void o_report_error */