From e3b0f174abbf03962c6cb42db44ec23452b1784c Mon Sep 17 00:00:00 2001 From: Markus Minichmayr Date: Thu, 6 Oct 2022 08:33:17 +0200 Subject: Mark mutable global variables as ICAL_GLOBAL_VAR, so we can specify storage modifiers (i.e. thread_local) if necessary. --- config.h.cmake | 3 +++ src/libical/icalerror.c | 10 +++++----- src/libical/icalmemory.c | 20 ++++++++++---------- src/libical/icalrecur.c | 2 +- src/libical/icaltimezone.c | 16 ++++++++-------- src/libical/icaltypes.c | 2 +- src/libical/icaltz-util.c | 2 +- src/libical/pvl.c | 4 ++-- src/libical/sspm.c | 6 +++--- 9 files changed, 34 insertions(+), 31 deletions(-) diff --git a/config.h.cmake b/config.h.cmake index a4b52aad..0e7306cc 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -582,3 +582,6 @@ typedef ssize_t IO_SSIZE_T; #define ICALMEMORY_DEFAULT_MALLOC malloc #define ICALMEMORY_DEFAULT_REALLOC realloc #define ICALMEMORY_DEFAULT_FREE free + +/* ICAL_GLOBAL_VAR is applied to global variables, therefore allows specifying custom storage attributes. */ +#define ICAL_GLOBAL_VAR diff --git a/src/libical/icalerror.c b/src/libical/icalerror.c index fedbea9a..9692bd1e 100644 --- a/src/libical/icalerror.c +++ b/src/libical/icalerror.c @@ -57,7 +57,7 @@ icalerrorenum *icalerrno_return(void) #else -static icalerrorenum icalerrno_storage = ICAL_NO_ERROR; +static ICAL_GLOBAL_VAR icalerrorenum icalerrno_storage = ICAL_NO_ERROR; icalerrorenum *icalerrno_return(void) { @@ -66,7 +66,7 @@ icalerrorenum *icalerrno_return(void) #endif -static int foo; +static ICAL_GLOBAL_VAR int foo; void icalerror_stop_here(void) { @@ -92,9 +92,9 @@ void icalerror_clear_errno(void) } #if ICAL_ERRORS_ARE_FATAL == 1 -static int icalerror_errors_are_fatal = 1; +static ICAL_GLOBAL_VAR int icalerror_errors_are_fatal = 1; #else -static int icalerror_errors_are_fatal = 0; +static ICAL_GLOBAL_VAR int icalerror_errors_are_fatal = 0; #endif void icalerror_set_errors_are_fatal(int fatal) @@ -127,7 +127,7 @@ struct icalerror_state icalerrorstate state; }; -static struct icalerror_state error_state_map[] = { +static ICAL_GLOBAL_VAR struct icalerror_state error_state_map[] = { {ICAL_BADARG_ERROR, ICAL_ERROR_DEFAULT}, {ICAL_NEWFAILED_ERROR, ICAL_ERROR_DEFAULT}, {ICAL_ALLOCATION_ERROR, ICAL_ERROR_DEFAULT}, diff --git a/src/libical/icalmemory.c b/src/libical/icalmemory.c index 7e10c220..f12833b3 100644 --- a/src/libical/icalmemory.c +++ b/src/libical/icalmemory.c @@ -43,7 +43,7 @@ typedef struct /** * @private */ -static buffer_ring *global_buffer_ring = 0; +static ICAL_GLOBAL_VAR buffer_ring *global_buffer_ring = 0; #endif /** @@ -265,27 +265,27 @@ char *icalmemory_strdup(const char *s) } #if defined(MEMORY_CONSISTENCY) -static icalmemory_malloc_f global_icalmem_malloc = &test_malloc; +static ICAL_GLOBAL_VAR icalmemory_malloc_f global_icalmem_malloc = &test_malloc; #elif defined(ICALMEMORY_DEFAULT_MALLOC) && !defined(S_SPLINT_S) -static icalmemory_malloc_f global_icalmem_malloc = &ICALMEMORY_DEFAULT_MALLOC; +static ICAL_GLOBAL_VAR icalmemory_malloc_f global_icalmem_malloc = &ICALMEMORY_DEFAULT_MALLOC; #else -static icalmemory_malloc_f global_icalmem_malloc = NULL; +static ICAL_GLOBAL_VAR icalmemory_malloc_f global_icalmem_malloc = NULL; #endif #if defined(MEMORY_CONSISTENCY) -static icalmemory_realloc_f global_icalmem_realloc = &test_realloc; +static ICAL_GLOBAL_VAR icalmemory_realloc_f global_icalmem_realloc = &test_realloc; #elif defined(ICALMEMORY_DEFAULT_REALLOC) && !defined(S_SPLINT_S) -static icalmemory_realloc_f global_icalmem_realloc = &ICALMEMORY_DEFAULT_REALLOC; +static ICAL_GLOBAL_VAR icalmemory_realloc_f global_icalmem_realloc = &ICALMEMORY_DEFAULT_REALLOC; #else -static icalmemory_realloc_f global_icalmem_realloc = NULL; +static ICAL_GLOBAL_VAR icalmemory_realloc_f global_icalmem_realloc = NULL; #endif #if defined(MEMORY_CONSISTENCY) -static icalmemory_free_f global_icalmem_free = &test_free; +static ICAL_GLOBAL_VAR icalmemory_free_f global_icalmem_free = &test_free; #elif defined(ICALMEMORY_DEFAULT_FREE) && !defined(S_SPLINT_S) -static icalmemory_free_f global_icalmem_free = &ICALMEMORY_DEFAULT_FREE; +static ICAL_GLOBAL_VAR icalmemory_free_f global_icalmem_free = &ICALMEMORY_DEFAULT_FREE; #else -static icalmemory_free_f global_icalmem_free = NULL; +static ICAL_GLOBAL_VAR icalmemory_free_f global_icalmem_free = NULL; #endif void icalmemory_set_mem_alloc_funcs(icalmemory_malloc_f f_malloc, diff --git a/src/libical/icalrecur.c b/src/libical/icalrecur.c index 4a135362..b9c7b77d 100644 --- a/src/libical/icalrecur.c +++ b/src/libical/icalrecur.c @@ -139,7 +139,7 @@ static pthread_mutex_t invalid_rrule_mutex = PTHREAD_MUTEX_INITIALIZER; #endif -static ical_invalid_rrule_handling invalidRruleHandling = ICAL_RRULE_TREAT_AS_ERROR; +static ICAL_GLOBAL_VAR ical_invalid_rrule_handling invalidRruleHandling = ICAL_RRULE_TREAT_AS_ERROR; #if defined(HAVE_LIBICU) #include diff --git a/src/libical/icaltimezone.c b/src/libical/icaltimezone.c index 9613ab10..60b26a0d 100644 --- a/src/libical/icaltimezone.c +++ b/src/libical/icaltimezone.c @@ -67,7 +67,7 @@ static const struct _compat_tzids { }; /* The prefix to be used for tzid's generated from system tzdata */ -static char s_ical_tzid_prefix[BUILTIN_TZID_PREFIX_LEN] = {0}; +static ICAL_GLOBAL_VAR char s_ical_tzid_prefix[BUILTIN_TZID_PREFIX_LEN] = {0}; /** This is the filename of the file containing the city names and coordinates of all the builtin timezones. */ @@ -112,17 +112,17 @@ struct _icaltimezonechange }; /** An array of icaltimezones for the builtin timezones. */ -static icalarray *builtin_timezones = NULL; +static ICAL_GLOBAL_VAR icalarray *builtin_timezones = NULL; /** This is the special UTC timezone, which isn't in builtin_timezones. */ -static icaltimezone utc_timezone = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; +static ICAL_GLOBAL_VAR icaltimezone utc_timezone = { 0, 0, 0, 0, 0, 0, 0, 0, 0 }; -static char *zone_files_directory = NULL; +static ICAL_GLOBAL_VAR char *zone_files_directory = NULL; #if defined(USE_BUILTIN_TZDATA) -static int use_builtin_tzdata = 1; +static ICAL_GLOBAL_VAR int use_builtin_tzdata = 1; #else -static int use_builtin_tzdata = 0; +static ICAL_GLOBAL_VAR int use_builtin_tzdata = 0; #endif static void icaltimezone_reset(icaltimezone *zone); @@ -477,7 +477,7 @@ static void icaltimezone_ensure_coverage(icaltimezone *zone, int end_year) { /* When we expand timezone changes we always expand at least up to this year, plus ICALTIMEZONE_EXTRA_COVERAGE. */ - static int icaltimezone_minimum_expansion_year = -1; + static ICAL_GLOBAL_VAR int icaltimezone_minimum_expansion_year = -1; int changes_end_year; @@ -2019,7 +2019,7 @@ static const char *get_zone_directory(void) wchar_t zoneinfodir[1000], dirname[1000]; #endif int used_default; - static char *cache = NULL; + static ICAL_GLOBAL_VAR char *cache = NULL; #if !defined(_WIN32_WCE) unsigned char *dirslash, *zislash, *zislashp1; diff --git a/src/libical/icaltypes.c b/src/libical/icaltypes.c index 99cbb42e..95d18540 100644 --- a/src/libical/icaltypes.c +++ b/src/libical/icaltypes.c @@ -22,7 +22,7 @@ static pthread_mutex_t unk_token_mutex = PTHREAD_MUTEX_INITIALIZER; #endif -static ical_unknown_token_handling unknownTokenHandling = ICAL_TREAT_AS_ERROR; +static ICAL_GLOBAL_VAR ical_unknown_token_handling unknownTokenHandling = ICAL_TREAT_AS_ERROR; int icaltriggertype_is_null_trigger(struct icaltriggertype tr) { diff --git a/src/libical/icaltz-util.c b/src/libical/icaltz-util.c index 4c307056..2e6bfce0 100644 --- a/src/libical/icaltz-util.c +++ b/src/libical/icaltz-util.c @@ -89,7 +89,7 @@ typedef struct } tzinfo; /* fullpath to the system zoneinfo directory (where zone.tab lives) */ -static char s_zoneinfopath[MAXPATHLEN] = {0}; +static ICAL_GLOBAL_VAR char s_zoneinfopath[MAXPATHLEN] = {0}; /* A few well-known locations for system zoneinfo; can be overridden with TZDIR environment */ static const char *s_zoneinfo_search_paths[] = { diff --git a/src/libical/pvl.c b/src/libical/pvl.c index a3e9f644..8faaa264 100644 --- a/src/libical/pvl.c +++ b/src/libical/pvl.c @@ -43,8 +43,8 @@ static void pvl_global_unlock(void) * Globals incremented for each call to pvl_new_element(); each list gets a unique id. */ -static int pvl_elem_count = 0; -static int pvl_list_count = 0; +static ICAL_GLOBAL_VAR int pvl_elem_count = 0; +static ICAL_GLOBAL_VAR int pvl_list_count = 0; /** struct pvl_list_t diff --git a/src/libical/sspm.c b/src/libical/sspm.c index ef352c9f..931ced09 100644 --- a/src/libical/sspm.c +++ b/src/libical/sspm.c @@ -125,7 +125,7 @@ static char *sspm_strdup(const char *str) static char *sspm_get_parameter(const char *line, const char *parameter) { char *p, *s, *q; - static char name[1024]; + static ICAL_GLOBAL_VAR char name[1024]; /* Find where the parameter name is in the line */ p = strstr(line, parameter); @@ -173,7 +173,7 @@ static char *sspm_get_parameter(const char *line, const char *parameter) static char *sspm_property_name(const char *line) { - static char name[1024]; + static ICAL_GLOBAL_VAR char name[1024]; char *c = strchr(line, ':'); if (c != 0) { @@ -187,7 +187,7 @@ static char *sspm_property_name(const char *line) static char *sspm_value(char *line) { - static char value[1024]; + static ICAL_GLOBAL_VAR char value[1024]; char *c, *s, *p; -- cgit v1.2.1