mirror of
git://git.openembedded.org/meta-openembedded
synced 2026-01-01 13:58:06 +00:00
pgpool2: fix compiling for 32-bit arches
When compiling for 32-bit targets, two issues came to surface: 1. gcc was complaining that math.h is not included in snprintf, and some calls were implicitly defined. Added a patch that includes the required headers in snprintf.c file: | snprintf.c: In function 'fmtfloat': | snprintf.c:1232:13: error: implicit declaration of function 'isnan' [-Wimplicit-function-declaration] | 1232 | if (isnan(value)) | | ^~~~~ | snprintf.c:50:1: note: include '<math.h>' or provide a declaration of 'isnan' 2. The code passes a time_t argument to a function that expects a long. This works for 64-bit targets, because on those usually time_t is long. However on 32-bit systems time_t is usually long long, which makes compilation fail with the following error: | wd_json_data.c:540:66: error: passing argument 3 of 'json_get_long_value_for_key' from incompatible pointer type [-Wincompatible-pointer-types] | 540 | if (json_get_long_value_for_key(root, "StartupTimeSecs", &wdNode->startup_time.tv_sec)) | | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~ To account for this, add a new helper method in a patch that returns the required json value as a time_t value. The patches are in pending state, because the mailing list of the project is sufferring from technical problems - when the site loads, sign up attempts throw internal server errors. It is planned to submit the patches and to update the status once their infrastructure is back. Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com> Signed-off-by: Khem Raj <raj.khem@gmail.com>
This commit is contained in:
parent
550608a25d
commit
909985d1b9
|
|
@ -0,0 +1,83 @@
|
|||
From 523ca5546b0178be693943f2a3a880c0bd6ea239 Mon Sep 17 00:00:00 2001
|
||||
From: Gyorgy Sarvari <skandigraun@gmail.com>
|
||||
Date: Thu, 11 Sep 2025 12:36:29 +0200
|
||||
Subject: [PATCH] fix compiling on 32-bit systems
|
||||
|
||||
The timespec struct's tv_sec size can change between architectures.
|
||||
Usually on 64 bit systems it's long, but on 32 bit systems it is frequently long long.
|
||||
|
||||
When the watchdog is trying to get the uptime, it is trying to get the value
|
||||
as long - however on 32 bit systems this fails due to different time_t size:
|
||||
|
||||
| wd_json_data.c:540:66: error: passing argument 3 of 'json_get_long_value_for_key' from incompatible pointer type [-Wincompatible-pointer-types]
|
||||
| 540 | if (json_get_long_value_for_key(root, "StartupTimeSecs", &wdNode->startup_time.tv_sec))
|
||||
| | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
To account for this, introduce a new helper function to get a json value as
|
||||
a time_t type.
|
||||
|
||||
Upstream-Status: Pending [project ML registration is down]
|
||||
|
||||
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
|
||||
---
|
||||
src/include/utils/json.h | 5 +++--
|
||||
src/utils/json.c | 14 ++++++++++++++
|
||||
src/watchdog/wd_json_data.c | 2 +-
|
||||
3 files changed, 18 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/include/utils/json.h b/src/include/utils/json.h
|
||||
index 67cc0255a..93be83c3a 100644
|
||||
--- a/src/include/utils/json.h
|
||||
+++ b/src/include/utils/json.h
|
||||
@@ -311,10 +311,11 @@ extern "C"
|
||||
#endif
|
||||
|
||||
/* pgpool-II extensions */
|
||||
-json_value *json_get_value_for_key(json_value * source, const char *key);
|
||||
+json_value *json_get_value_for_key(json_value * source, const char *key);
|
||||
int json_get_int_value_for_key(json_value * source, const char *key, int *value);
|
||||
int json_get_long_value_for_key(json_value * source, const char *key, long *value);
|
||||
-char *json_get_string_value_for_key(json_value * source, const char *key);
|
||||
+char *json_get_string_value_for_key(json_value * source, const char *key);
|
||||
int json_get_bool_value_for_key(json_value * source, const char *key, bool *value);
|
||||
+int json_get_time_value_for_key(json_value * source, const char *key, time_t *value);
|
||||
|
||||
#endif
|
||||
diff --git a/src/utils/json.c b/src/utils/json.c
|
||||
index 319c8fdbf..bce99466c 100644
|
||||
--- a/src/utils/json.c
|
||||
+++ b/src/utils/json.c
|
||||
@@ -1204,6 +1204,20 @@ json_get_long_value_for_key(json_value * source, const char *key, long *value)
|
||||
return 0;
|
||||
}
|
||||
|
||||
+int
|
||||
+json_get_time_value_for_key(json_value * source, const char *key, time_t *value)
|
||||
+{
|
||||
+ json_value *jNode;
|
||||
+
|
||||
+ jNode = json_get_value_for_key(source, key);
|
||||
+ if (jNode == NULL)
|
||||
+ return -1;
|
||||
+ if (jNode->type != json_integer)
|
||||
+ return -1;
|
||||
+ *value = jNode->u.integer;
|
||||
+ return 0;
|
||||
+}
|
||||
+
|
||||
/*
|
||||
* pgpool extension:
|
||||
* returns string value if found for the key.
|
||||
diff --git a/src/watchdog/wd_json_data.c b/src/watchdog/wd_json_data.c
|
||||
index 474fc37a4..53053cd4b 100644
|
||||
--- a/src/watchdog/wd_json_data.c
|
||||
+++ b/src/watchdog/wd_json_data.c
|
||||
@@ -537,7 +537,7 @@ get_watchdog_node_from_json(char *json_data, int data_len, char **authkey)
|
||||
if (root == NULL || root->type != json_object)
|
||||
goto ERROR_EXIT;
|
||||
|
||||
- if (json_get_long_value_for_key(root, "StartupTimeSecs", &wdNode->startup_time.tv_sec))
|
||||
+ if (json_get_time_value_for_key(root, "StartupTimeSecs", &wdNode->startup_time.tv_sec))
|
||||
{
|
||||
bool escalated;
|
||||
long seconds_since_node_startup;
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
From c0b6ae020ad87040b5bc6fbae94fb815f10884d2 Mon Sep 17 00:00:00 2001
|
||||
From: Gyorgy Sarvari <skandigraun@gmail.com>
|
||||
Date: Thu, 11 Sep 2025 11:58:02 +0200
|
||||
Subject: [PATCH] snprintf: Add math.h to ensure isnan and isinf are defined
|
||||
|
||||
When building for 32-bit arm arch, compilation fails with the following error:
|
||||
| snprintf.c: In function 'fmtfloat':
|
||||
| snprintf.c:1232:13: error: implicit declaration of function 'isnan' [-Wimplicit-function-declaration]
|
||||
| 1232 | if (isnan(value))
|
||||
| | ^~~~~
|
||||
| snprintf.c:50:1: note: include '<math.h>' or provide a declaration of 'isnan'
|
||||
| 49 | #include "postgresql/server/port.h"
|
||||
| +++ |+#include <math.h>
|
||||
| 50 |
|
||||
| snprintf.c:1254:21: error: implicit declaration of function 'isinf' [-Wimplicit-function-declaration]
|
||||
| 1254 | if (isinf(value))
|
||||
| | ^~~~~
|
||||
| snprintf.c:1254:21: note: include '<math.h>' or provide a declaration of 'isinf'
|
||||
|
||||
To avoid the error, add math.h to snprintf.c.
|
||||
|
||||
Upstream-Status: Pending [project ML registration is down]
|
||||
|
||||
Signed-off-by: Gyorgy Sarvari <skandigraun@gmail.com>
|
||||
---
|
||||
src/parser/snprintf.c | 1 +
|
||||
1 file changed, 1 insertion(+)
|
||||
|
||||
diff --git a/src/parser/snprintf.c b/src/parser/snprintf.c
|
||||
index 6dd4a50..cce7951 100644
|
||||
--- a/src/parser/snprintf.c
|
||||
+++ b/src/parser/snprintf.c
|
||||
@@ -36,6 +36,7 @@
|
||||
#include "c.h"
|
||||
#endif
|
||||
|
||||
+#include <math.h>
|
||||
#include <stdarg.h>
|
||||
#include <stdio.h>
|
||||
#include <stdint.h>
|
||||
|
|
@ -12,6 +12,8 @@ LIC_FILES_CHKSUM = "file://COPYING;md5=e4b38de086d73e0521de0bbdbaa4a1a9"
|
|||
|
||||
SRC_URI = "https://www.pgpool.net/mediawiki/images/pgpool-II-${PV}.tar.gz \
|
||||
file://0001-Fix-build-error-when-build-this-file.patch \
|
||||
file://0001-snprintf-Add-math.h-to-ensure-isnan-and-isinf-are-de.patch \
|
||||
file://0001-fix-compiling-on-32-bit-systems.patch \
|
||||
file://define_SIGNAL_ARGS.patch \
|
||||
file://pgpool.sysconfig \
|
||||
file://pgpool.service \
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user