emacs-elpa-diffs
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[elpa] externals/pq 527e544165 46/63: Improve error handling on connecti


From: ELPA Syncer
Subject: [elpa] externals/pq 527e544165 46/63: Improve error handling on connection failure.
Date: Mon, 14 Feb 2022 23:24:26 -0500 (EST)

branch: externals/pq
commit 527e5441653e930405fc0dbd1794dd06a967500f
Author: Andreas Seltenreich <seltenreich@gmx.de>
Commit: Andreas Seltenreich <seltenreich@gmx.de>

    Improve error handling on connection failure.
    
    Closes #5
---
 pq.c | 39 +++++++++++++++++++++++----------------
 1 file changed, 23 insertions(+), 16 deletions(-)

diff --git a/pq.c b/pq.c
index ed4c2fc108..adf2dd58eb 100644
--- a/pq.c
+++ b/pq.c
@@ -61,6 +61,19 @@ static bool result_ok(emacs_env *env, PGresult *res)
   }
 }
 
+/* Raise error unless a PGConn is ok. */
+static bool connection_ok(emacs_env *env, PGconn *conn)
+{
+  if (PQstatus(conn) != CONNECTION_OK) {
+    const char *errmsg = PQerrorMessage(conn);
+    emacs_value errstring = env->make_string(env, errmsg, strlen(errmsg));
+    emacs_value Qpq_error = env->intern (env, "error");
+    env->non_local_exit_signal(env, Qpq_error, errstring);
+    return false;
+  }
+  return true;
+}
+
 static char *my_string_to_c(emacs_env *env, emacs_value string)
 {
   ptrdiff_t size;
@@ -87,16 +100,11 @@ Fpq_connectdb (emacs_env *env, ptrdiff_t nargs, 
emacs_value args[], void *data)
   char *conninfo = nargs ? my_string_to_c(env, args[0]) : "";
   PGconn *conn = PQconnectdb(conninfo);
 
-  if (PQstatus(conn) != CONNECTION_OK) {
-    const char *errmsg = PQerrorMessage(conn);
-    emacs_value errstring = env->make_string(env, errmsg, strlen(errmsg));
-    emacs_value Qpq_error = env->intern (env, "error");
-
-    env->non_local_exit_signal(env, Qpq_error, errstring);
-    if (nargs)
-      free(conninfo);
-    PQfinish(conn);
-    return Qnil;
+  if (!connection_ok(env, conn)) {
+       if (nargs)
+           free(conninfo);
+       PQfinish(conn);
+       return Qnil;
   }
 
   /* The emacs-module interface always expects utf8 strings */
@@ -153,6 +161,10 @@ Fpq_query (emacs_env *env, ptrdiff_t nargs, emacs_value 
args[], void *data)
     return Qnil;
   PGconn *conn = env->get_user_ptr(env, args[0]);
 
+  if (!connection_ok(env, conn)) {
+       return Qnil;
+  }
+
   int nParams = nargs - 2;
 
   char *command = my_string_to_c(env, args[1]);
@@ -242,12 +254,7 @@ Fpq_reset (emacs_env *env, ptrdiff_t nargs, emacs_value 
args[], void *data)
 
   PQreset(conn);
 
-  if (PQstatus(conn) != CONNECTION_OK) {
-    const char *errmsg = PQerrorMessage(conn);
-    emacs_value errstring = env->make_string(env, errmsg, strlen(errmsg));
-    emacs_value Qpq_error = env->intern (env, "error");
-
-    env->non_local_exit_signal(env, Qpq_error, errstring);
+  if (!connection_ok(env, conn)) {
     return Qnil;
   }
 



reply via email to

[Prev in Thread] Current Thread [Next in Thread]