[Asterisk-code-review] time: add support for time64 libcs (asterisk[master])
Philip Prindeville
asteriskteam at digium.com
Sun Feb 13 20:16:25 CST 2022
Philip Prindeville has uploaded this change for review. ( https://gerrit.asterisk.org/c/asterisk/+/18013 )
Change subject: time: add support for time64 libcs
......................................................................
time: add support for time64 libcs
On 32-bit low-end platforms, unnecessary promotions to 64-bit values
can be expensive, especially if division is subsequently involved
(such as during base10 formatting, etc). We also want to avoid any
potential loss-of-precision when down-converting back in the opposite
direction.
Lastly, a 64-bit integer formats as 20 digits at most in base10.
Don't need to have any 100 byte buffers to hold that.
ASTERISK-29674 #close
Signed-off-by: Philip Prindeville <philipp at redfish-solutions.com>
Change-Id: Id7b25bdca8f92e34229f6454f6c3e500f2cd6f56
---
M include/asterisk/time.h
M res/res_calendar_caldav.c
M res/res_calendar_icalendar.c
M res/res_http_media_cache.c
M res/res_odbc.c
M res/res_pjsip/location.c
M res/res_pjsip/pjsip_options.c
M res/res_pjsip_history.c
M res/res_pjsip_pubsub.c
M res/res_pjsip_registrar.c
M res/res_stir_shaken.c
11 files changed, 26 insertions(+), 18 deletions(-)
git pull ssh://gerrit.asterisk.org:29418/asterisk refs/changes/13/18013/1
diff --git a/include/asterisk/time.h b/include/asterisk/time.h
index e2ab513..d9b26b9 100644
--- a/include/asterisk/time.h
+++ b/include/asterisk/time.h
@@ -29,6 +29,14 @@
#include <sys/time.h>
#endif
+#ifdef __USE_TIME_BITS64
+#define TIME_T_FMT PRId64
+#define TIME_T_FMT_U PRIu64
+#else
+#define TIME_T_FMT "ld"
+#define TIME_T_FMT_U "lu"
+#endif
+
#ifdef HAVE_UNISTD_H
#include <unistd.h>
#endif
diff --git a/res/res_calendar_caldav.c b/res/res_calendar_caldav.c
index 9bdde0e..01804f2 100644
--- a/res/res_calendar_caldav.c
+++ b/res/res_calendar_caldav.c
@@ -404,8 +404,8 @@
if (!ast_strlen_zero(event->summary)) {
ast_string_field_set(event, uid, event->summary);
} else {
- char tmp[100];
- snprintf(tmp, sizeof(tmp), "%ld", event->start);
+ char tmp[24];
+ snprintf(tmp, sizeof(tmp), "%" TIME_T_FMT, event->start);
ast_string_field_set(event, uid, tmp);
}
}
diff --git a/res/res_calendar_icalendar.c b/res/res_calendar_icalendar.c
index 999cf0e..b69b646 100644
--- a/res/res_calendar_icalendar.c
+++ b/res/res_calendar_icalendar.c
@@ -245,8 +245,8 @@
if (!ast_strlen_zero(event->summary)) {
ast_string_field_set(event, uid, event->summary);
} else {
- char tmp[100];
- snprintf(tmp, sizeof(tmp), "%ld", event->start);
+ char tmp[24];
+ snprintf(tmp, sizeof(tmp), "%" TIME_T_FMT, event->start);
ast_string_field_set(event, uid, tmp);
}
}
diff --git a/res/res_http_media_cache.c b/res/res_http_media_cache.c
index c0363b1..05698d3 100644
--- a/res/res_http_media_cache.c
+++ b/res/res_http_media_cache.c
@@ -152,7 +152,7 @@
}
/* Use 'now' if we didn't get an expiration time */
- snprintf(time_buf, sizeof(time_buf), "%30lu", actual_expires.tv_sec);
+ snprintf(time_buf, sizeof(time_buf), "%30" TIME_T_FMT_U, actual_expires.tv_sec);
ast_bucket_file_metadata_set(bucket_file, "__actual_expires", time_buf);
}
@@ -306,7 +306,7 @@
return 1;
}
- if (sscanf(metadata->value, "%lu", &expires.tv_sec) != 1) {
+ if (sscanf(metadata->value, "%" TIME_T_FMT_U, &expires.tv_sec) != 1) {
return 1;
}
diff --git a/res/res_odbc.c b/res/res_odbc.c
index 63fdf37..cd9fcc9 100644
--- a/res/res_odbc.c
+++ b/res/res_odbc.c
@@ -1029,7 +1029,7 @@
/* Dont connect while server is marked as unreachable via negative_connection_cache */
negative_cache_expiration = obj->parent->last_negative_connect.tv_sec + obj->parent->negative_connection_cache.tv_sec;
if (time(NULL) < negative_cache_expiration) {
- ast_log(LOG_WARNING, "Not connecting to %s. Negative connection cache for %ld seconds\n", obj->parent->name, negative_cache_expiration - time(NULL));
+ ast_log(LOG_WARNING, "Not connecting to %s. Negative connection cache for %" TIME_T_FMT " seconds\n", obj->parent->name, negative_cache_expiration - time(NULL));
return ODBC_FAIL;
}
diff --git a/res/res_pjsip/location.c b/res/res_pjsip/location.c
index bae8a2d..6c48eba 100644
--- a/res/res_pjsip/location.c
+++ b/res/res_pjsip/location.c
@@ -489,7 +489,7 @@
static int expiration_struct2str(const void *obj, const intptr_t *args, char **buf)
{
const struct ast_sip_contact *contact = obj;
- return (ast_asprintf(buf, "%ld", contact->expiration_time.tv_sec) < 0) ? -1 : 0;
+ return (ast_asprintf(buf, "%" TIME_T_FMT, contact->expiration_time.tv_sec) < 0) ? -1 : 0;
}
static int permanent_uri_sort_fn(const void *obj_left, const void *obj_right, int flags)
diff --git a/res/res_pjsip/pjsip_options.c b/res/res_pjsip/pjsip_options.c
index e1f048e..58c0b19 100644
--- a/res/res_pjsip/pjsip_options.c
+++ b/res/res_pjsip/pjsip_options.c
@@ -2733,7 +2733,7 @@
ast_str_append(&buf, 0, "AOR: %s\r\n", wrapper->aor_id);
ast_str_append(&buf, 0, "URI: %s\r\n", contact->uri);
ast_str_append(&buf, 0, "UserAgent: %s\r\n", contact->user_agent);
- ast_str_append(&buf, 0, "RegExpire: %ld\r\n", contact->expiration_time.tv_sec);
+ ast_str_append(&buf, 0, "RegExpire: %" TIME_T_FMT "\r\n", contact->expiration_time.tv_sec);
if (!ast_strlen_zero(contact->via_addr)) {
ast_str_append(&buf, 0, "ViaAddress: %s", contact->via_addr);
if (contact->via_port) {
diff --git a/res/res_pjsip_history.c b/res/res_pjsip_history.c
index de1063b..2214ac2 100644
--- a/res/res_pjsip_history.c
+++ b/res/res_pjsip_history.c
@@ -199,7 +199,7 @@
{
struct timeval right = { 0, };
- if (sscanf(op_right->field, "%ld", &right.tv_sec) != 1) {
+ if (sscanf(op_right->field, "%" TIME_T_FMT, &right.tv_sec) != 1) {
ast_log(LOG_WARNING, "Unable to extract field '%s': not a timestamp\n", op_right->field);
return -1;
}
@@ -270,7 +270,7 @@
{
struct timeval right = { 0, };
- if (sscanf(op_right->field, "%ld", &right.tv_sec) != 1) {
+ if (sscanf(op_right->field, "%" TIME_T_FMT, &right.tv_sec) != 1) {
ast_log(LOG_WARNING, "Unable to extract field '%s': not a timestamp\n", op_right->field);
return -1;
}
@@ -319,7 +319,7 @@
{
struct timeval right = { 0, };
- if (sscanf(op_right->field, "%ld", &right.tv_sec) != 1) {
+ if (sscanf(op_right->field, "%" TIME_T_FMT, &right.tv_sec) != 1) {
ast_log(LOG_WARNING, "Unable to extract field '%s': not a timestamp\n", op_right->field);
return -1;
}
@@ -668,7 +668,7 @@
char uri[128];
pjsip_uri_print(PJSIP_URI_IN_REQ_URI, entry->msg->line.req.uri, uri, sizeof(uri));
- snprintf(line, len, "%-5.5d %-10.10ld %-5.5s %-24.24s %.*s %s SIP/2.0",
+ snprintf(line, len, "%-5.5d %-10.10" TIME_T_FMT " %-5.5s %-24.24s %.*s %s SIP/2.0",
entry->number,
entry->timestamp.tv_sec,
entry->transmitted ? "* ==>" : "* <==",
@@ -677,7 +677,7 @@
pj_strbuf(&entry->msg->line.req.method.name),
uri);
} else {
- snprintf(line, len, "%-5.5d %-10.10ld %-5.5s %-24.24s SIP/2.0 %u %.*s",
+ snprintf(line, len, "%-5.5d %-10.10" TIME_T_FMT " %-5.5s %-24.24s SIP/2.0 %u %.*s",
entry->number,
entry->timestamp.tv_sec,
entry->transmitted ? "* ==>" : "* <==",
@@ -1169,7 +1169,7 @@
pj_sockaddr_print(&entry->src, addr, sizeof(addr), 3);
}
- ast_cli(a->fd, "<--- History Entry %d %s %s at %-10.10ld --->\n",
+ ast_cli(a->fd, "<--- History Entry %d %s %s at %-10.10" TIME_T_FMT " --->\n",
entry->number,
entry->transmitted ? "Sent to" : "Received from",
addr,
diff --git a/res/res_pjsip_pubsub.c b/res/res_pjsip_pubsub.c
index 31394e2..c0d7535 100644
--- a/res/res_pjsip_pubsub.c
+++ b/res/res_pjsip_pubsub.c
@@ -4744,7 +4744,7 @@
static int persistence_expires_struct2str(const void *obj, const intptr_t *args, char **buf)
{
const struct subscription_persistence *persistence = obj;
- return (ast_asprintf(buf, "%ld", persistence->expires.tv_sec) < 0) ? -1 : 0;
+ return (ast_asprintf(buf, "%" TIME_T_FMT, persistence->expires.tv_sec) < 0) ? -1 : 0;
}
#define RESOURCE_LIST_INIT_SIZE 4
diff --git a/res/res_pjsip_registrar.c b/res/res_pjsip_registrar.c
index 9c999c1..0282900 100644
--- a/res/res_pjsip_registrar.c
+++ b/res/res_pjsip_registrar.c
@@ -1370,7 +1370,7 @@
while (check_interval) {
sleep(check_interval);
- sprintf(time, "%ld", ast_tvnow().tv_sec);
+ snprintf(time, 64, "%" TIME_T_FMT, ast_tvnow().tv_sec);
var = ast_variable_new("expiration_time <=", time, "");
ast_debug(4, "Woke up at %s Interval: %d\n", time, check_interval);
diff --git a/res/res_stir_shaken.c b/res/res_stir_shaken.c
index 373a1a1..da5a1c0 100644
--- a/res/res_stir_shaken.c
+++ b/res/res_stir_shaken.c
@@ -389,7 +389,7 @@
actual_expires.tv_sec += EXPIRATION_BUFFER;
}
- snprintf(time_buf, sizeof(time_buf), "%30lu", actual_expires.tv_sec);
+ snprintf(time_buf, sizeof(time_buf), "%30" TIME_T_FMT, actual_expires.tv_sec);
ast_db_put(hash, "expiration", time_buf);
}
--
To view, visit https://gerrit.asterisk.org/c/asterisk/+/18013
To unsubscribe, or for help writing mail filters, visit https://gerrit.asterisk.org/settings
Gerrit-Project: asterisk
Gerrit-Branch: master
Gerrit-Change-Id: Id7b25bdca8f92e34229f6454f6c3e500f2cd6f56
Gerrit-Change-Number: 18013
Gerrit-PatchSet: 1
Gerrit-Owner: Philip Prindeville <philipp at redfish-solutions.com>
Gerrit-MessageType: newchange
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.digium.com/pipermail/asterisk-code-review/attachments/20220213/2c0ac22f/attachment-0001.html>
More information about the asterisk-code-review
mailing list