Commit Graph

770 Commits

Author SHA1 Message Date
Eugene Golushkov bbe2f51bc0 Fixed WINRT build - we need convert_utf8_to_utf16 in WINRT mode too 2024-09-29 20:30:45 -04:00
Vasyl Gello 3e43210885 Implement USE_OS_TZDB for Android
Signed-off-by: Vasyl Gello <vasek.gello@gmail.com>
2024-09-29 16:21:36 -04:00
Andrea Pappacoda ac0c58d5da Stop using PATH_MAX
PATH_MAX isn't guaranteed to be defined in Posix environments; it is
only on systems that have a path length limit, and even in environments
where it is defined its usage can lead to issues.

To avoid using PATH_MAX, I've made two main changes:

- Where realpath() was used, I've changed the code to use its
  [POSIX.1-2008]'s new behaviour, where passing a null pointer as the
  resolved_name buffer results in realpath() to automatically allocate
  a buffer large enough to handle the given path, that is returned to
  the caller. This has been supported for a long time as a GNU libc
  extension before being standardized.
- Where readlink() was used, the size of the buffer was already
  determined when calling lstat(); the returned struct stat contains a
  st_size field, containing the number of bytes needed to store the
  symbolic link contents. This meant that to avoid using the tricky
  define I only needed to use a dynamically allocated buffer instead of
  a static one, of size stat.st_size (+1 when a null terminator is
  needed).

To make sure that memory is always freed, I've wrapped the new dynamic
allocations in an std::unique_ptr. The pointer returned by realpath()
must be freed with free(), so a unique_ptr with a custom deleter that
calls free() on destruction was used.

To read more about why PATH_MAX leads to buggy code I'd suggest reading
something like this: <https://eklitzke.org/path-max-is-tricky>.

[POSIX.1-2008]: https://pubs.opengroup.org/onlinepubs/9699919799/functions/realpath.html
2024-09-28 16:56:16 -04:00
Olivier Le Doeuff ab1dc3a5eb Fix description
Co-authored-by: Gerhard Olsson <6248932+gerhardol@users.noreply.github.com>
2024-09-28 16:41:52 -04:00
Olivier Le Doeuff 7c151cdb6a build: introduce ENABLE_DATE_INSTALL to allow user opt-out of install
When using `date` as a PRIVATE dependency, it is not required to install it. This flag give user using `date` with add_subdirectory the opportunity to disable install target Default behavior is conserved since ENABLE_DATE_INSTALL is ON
2024-09-28 16:41:52 -04:00
Olivier Le Doeuff 3286289bf6 build: use standard CMAKE_INSTALL_INCLUDEDIR for header install folder.
This gives user control over which folder header should be installed to instead of using hardcoded value `include/`.
Variable `CMAKE_INSTALL_INCLUDEDIR` is provided after a call to `include(GNUInstallDirs)`
More info can be found about usage in docs: https://cmake.org/cmake/help/latest/command/install.html
2024-09-28 16:41:22 -04:00
Andrea Pappacoda cf8f25b183 build(cmake): always mark HAS_STRING_VIEW as part…
…of the interface

If the library gets compiled with HAS_STRING_VIEW=1, consumers always
need to link to the functions using std::string_view, as they are the
only ones compiled into the shared library.

You can find a longer explanation here:
<https://github.com/HowardHinnant/date/pull/754#issuecomment-1361248007>
2024-09-28 16:40:52 -04:00
Michael Maroszek dc9d161607 detect current zone on OpenWRT systems 2024-09-28 16:31:51 -04:00
Kris Thielemans d2ddc5ea1e Update gitattributes of zip file to binary 2024-09-28 15:57:19 -04:00
Edward Nolan 6219dd7e4d Support tz databases from release 2023d and newer by adding new zonenow.tab file to ignore list
date's internal init_tzdb function iterates through the files provided
by the tz database, and init_tzdb contains a list of files that should
not be interpreted as being in TZif format.

The 2023d release of the tz database added a new file that is not in
TZif format, zonenow.tab. However, this file had not been added to the
ignore list.

This caused date to intepret the zonenow.tab file as a TZif file,
which caused assertions to fire in debug mode if the user attempted to
load its associated time_zone, causing load_header() to be invoked
on the file, which would find that it did not contain a 'TZif' magic
number.

This commit addresses the issue by adding the file to the ignore list.

The announcement on the tz database mailing list which describes the
addition of zonenow.tab can be found at this link:

https://mm.icann.org/pipermail/tz-announce/2023-December/000080.html
2024-09-28 15:56:36 -04:00
Krzysiek Karbowiak 939031c38c Fix typo 2024-09-28 15:38:46 -04:00
Howard Hinnant 51ce7e1310 A couple more fixes for parsing compliance
* Fixes: #839
2024-09-13 20:31:29 -04:00
Howard Hinnant 155c6b9e76 Bring text parsing into compliance with the tzdata spec
* Fixes #836
2024-09-12 15:53:39 +01:00
Nikolay Baklicharov 1ead6715de Allow option override by FetchContent 2024-05-14 09:51:08 -04:00
Nicolas Dusart f986299fbb support Android for current_zone() 2024-05-13 20:16:17 -04:00
Howard Hinnant 706b1286e8 One more fix for issue #826 2024-05-10 16:44:22 -04:00
Martin Zink 8a93211679 #826 Build fix for ambiguity with >= libc++ 17 2024-05-10 16:26:43 -04:00
Howard Hinnant 6b1c1b8b3a Clean up restore_recursion_depth code. 2024-05-10 16:21:36 -04:00
Howard Hinnant 8f8336f42b Add support for links to links 2024-04-19 14:58:58 -04:00
Howard Hinnant cd3c57932f Eliminate dead code.
* fixes #822
2024-04-15 10:03:38 -04:00
Howard Hinnant 575fc23c3c Restrict mention of -Wstringop-overflow to gcc >= 11 2024-04-15 10:00:21 -04:00
Miles Sherman 0e65940a7f workaround for gcc bug 106757
see: https://github.com/HowardHinnant/date/issues/750
2024-03-16 17:40:55 -04:00
Howard Hinnant 88a3b15126 Remove std::is_literal_type from tests.
* It was deprecated in C++17 and removed in C++20
2023-12-19 10:16:52 -05:00
Howard Hinnant 5d225951ff Count sign as part of the character count : part 2
* Fix up some damage caused by previous commit.
2023-12-19 10:12:30 -05:00
Howard Hinnant ab37c362e3 Count sign as part of the character count. 2023-12-11 21:33:25 -05:00
Howard Hinnant 0ef86f1ced Set not_a_century to something outside the domain of centuries for a year. 2023-12-11 21:32:25 -05:00
DavisVaughan cc4685a21e Expose iso_week::year::is_leap() 2023-04-21 14:48:49 -04:00
Tim Tavlintsev 50acf3ffd8 Fix compilation when MISSING_LEAP_SECONDS is set to true 2023-03-04 15:42:06 -05:00
Howard Hinnant 15e0c84e42 Have Posix::time_zone::name() put <> around non-alpha abbreviations 2023-02-12 19:56:54 -05:00
Howard Hinnant 28972d72b4 Guard against Posix::time_zone having transition near ...
beginning or end of year.
2023-02-12 19:56:54 -05:00
Howard Hinnant 5f8c904231 Enable a permanent daylight saving rule for Posix::time_zone
* See comments in ptz.h for directions and examples.
2023-02-12 19:56:54 -05:00
Jonathan Wakely c9169ea310 Fix comment typo in tz.h 2022-12-13 09:10:28 -05:00
Howard Hinnant 22ceabf205 Fix tzdb parsing to handle new offset comments in 2022b 2022-08-12 10:30:35 -04:00
Howard Hinnant c82b776f28 Tweak sys_time streaming operator to work better year and
month precision time_points.
2022-08-12 10:29:10 -04:00
Howard Hinnant 2c035f8def Fix abs(duration) to work with non-normalized ratios 2022-08-12 10:28:12 -04:00
Howard Hinnant e6f4aed4d1 Supply missing 'inline' 2022-04-24 22:27:54 -04:00
DavisVaughan 9ea5654c12 Sync get_info_impl() signatures 2022-02-16 20:23:27 -05:00
DavisVaughan 9d9161c978 Sync set_install() signatures 2022-02-16 20:23:27 -05:00
Howard Hinnant 3776e0f185 Update Posix::time_zone comment with CTAD simplification 2022-01-26 19:44:06 -05:00
Howard Hinnant 9e830536a0 Add range checking for numerical values in Posix::time_zone 2022-01-26 19:40:32 -05:00
Andrea Pappacoda 655b249b8f test: use -pthread when $CXX is g++
Fixes https://github.com/HowardHinnant/date/issues/713
2021-11-02 18:55:01 -04:00
DavisVaughan 529a09267f Allow set_install() on Windows to use a file path containing Unicode
Anywhere we utilize that install file path, we carefully convert it to UTF-16 and utilize wide character helpers for file manipulation
2021-11-02 18:51:18 -04:00
Howard Hinnant d9049ee697 Fix current_zone for SLES
* Fixes #708
* Patch submitted by JaroslawMelzer
2021-10-15 09:03:33 -04:00
tylawin 2709deddd3 fix -Wshadow warnings 2021-09-12 01:29:13 -06:00
Andrea Pappacoda 2e19c006e2 cmake: update project version (#699) 2021-09-01 09:57:59 -04:00
Ans 28b5106d4c Fix uninitialized values (#698) 2021-09-01 09:44:26 -04:00
Howard Hinnant e1aa4837e0 Avoid signed integral overflow in to_stream
Fixes: #696
2021-08-31 17:43:44 -04:00
Howard Hinnant 1ff7208036 Update README.md 2021-08-31 12:40:28 -04:00
Nicolas b0adc54677 static_cast to silent warning implict conversion (#693)
That happen because `sizeof(long long unsigned int) == sizeof(long double)` in 32-bit architectures.
2021-08-17 11:35:13 -04:00
Howard Hinnant d57d764707 Round when parsing seconds instead of duration_cast. 2021-07-25 23:08:53 -04:00