diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-05-30 03:57:31 +0000 |
commit | dc0db358abe19481e475e10c32149b53370f1a1c (patch) | |
tree | ab8ce99c4b255ce46f99ef402c27916055b899ee /vendor/iana-time-zone-haiku/src/lib.rs | |
parent | Releasing progress-linux version 1.71.1+dfsg1-2~progress7.99u1. (diff) | |
download | rustc-dc0db358abe19481e475e10c32149b53370f1a1c.tar.xz rustc-dc0db358abe19481e475e10c32149b53370f1a1c.zip |
Merging upstream version 1.72.1+dfsg1.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'vendor/iana-time-zone-haiku/src/lib.rs')
-rw-r--r-- | vendor/iana-time-zone-haiku/src/lib.rs | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/vendor/iana-time-zone-haiku/src/lib.rs b/vendor/iana-time-zone-haiku/src/lib.rs index 55681a267..8ce821faa 100644 --- a/vendor/iana-time-zone-haiku/src/lib.rs +++ b/vendor/iana-time-zone-haiku/src/lib.rs @@ -16,18 +16,14 @@ //! [![Crates.io](https://img.shields.io/crates/v/iana-time-zone-haiku.svg)](https://crates.io/crates/iana-time-zone-haiku) //! [![Documentation](https://docs.rs/iana-time-zone/badge.svg)](https://docs.rs/iana-time-zone/) //! [![Crate License](https://img.shields.io/crates/l/iana-time-zone-haiku-haiku.svg)](https://crates.io/crates/iana-time-zone-haiku) -//! [![build](https://github.com/strawlab/iana-time-zone/workflows/build/badge.svg?branch=master)](https://github.com/strawlab/iana-time-zone/actions?query=branch%3Amaster) +//! [![build](https://github.com/strawlab/iana-time-zone/workflows/build/badge.svg?branch=main)](https://github.com/strawlab/iana-time-zone/actions?query=branch%3Amain) //! //! [iana-time-zone](https://github.com/strawlab/iana-time-zone) support crate for Haiku OS. -#[cxx::bridge(namespace = "iana_time_zone_haiku")] -mod ffi { - // SAFETY: in here "unsafe" is simply part of the syntax - unsafe extern "C++" { - include!("iana-time-zone-haiku/src/interface.h"); +use std::os::raw::c_char; - fn get_tz(buf: &mut [u8]) -> usize; - } +extern "C" { + fn iana_time_zone_haiku_get_tz(buf: *mut c_char, buf_size: usize) -> usize; } /// Get the current IANA time zone as a string. @@ -40,10 +36,17 @@ mod ffi { /// ``` /// let timezone = iana_time_zone_haiku::get_timezone(); /// ``` +#[must_use] pub fn get_timezone() -> Option<String> { // The longest name in the IANA time zone database is 25 ASCII characters long. let mut buf = [0u8; 32]; - let len = ffi::get_tz(&mut buf); + // SAFETY: a valid, aligned, non-NULL pointer and length are given which + // point to a single allocation. + let len = unsafe { + let buf_size = buf.len(); + let buf_ptr = buf.as_mut_ptr().cast::<c_char>(); + iana_time_zone_haiku_get_tz(buf_ptr, buf_size) + }; // The name should not be empty, or excessively long. match buf.get(..len)? { b"" => None, |