Skip to content

Navigation Menu

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 286907a

Browse filesBrowse files
committed
time.{tzname,timezone,daylight}
1 parent 515f0bf commit 286907a
Copy full SHA for 286907a

File tree

1 file changed

+55
-4
lines changed
Filter options

1 file changed

+55
-4
lines changed

‎vm/src/stdlib/time.rs

Copy file name to clipboardExpand all lines: vm/src/stdlib/time.rs
+55-4Lines changed: 55 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,33 @@
22
33
// See also:
44
// https://docs.python.org/3/library/time.html
5-
pub use time::*;
5+
use crate::{builtins::PyModule, PyRef, VirtualMachine};
6+
7+
pub use decl::time;
8+
9+
pub(crate) fn make_module(vm: &VirtualMachine) -> PyRef<PyModule> {
10+
#[cfg(not(target_env = "msvc"))]
11+
unsafe {
12+
c_tzset()
13+
};
14+
decl::make_module(vm)
15+
}
16+
17+
#[cfg(not(target_env = "msvc"))]
18+
extern "C" {
19+
#[link_name = "daylight"]
20+
static c_daylight: std::ffi::c_int;
21+
// pub static dstbias: std::ffi::c_int;
22+
#[link_name = "timezone"]
23+
static c_timezone: std::ffi::c_long;
24+
#[link_name = "tzname"]
25+
static c_tzname: [*const std::ffi::c_char; 2];
26+
#[link_name = "tzset"]
27+
fn c_tzset();
28+
}
629

730
#[pymodule(name = "time", with(platform))]
8-
mod time {
31+
mod decl {
932
use crate::{
1033
builtins::{PyStrRef, PyTypeRef},
1134
function::{Either, FuncArgs, OptionalArg},
@@ -110,6 +133,34 @@ mod time {
110133
Ok(get_perf_time(vm)?.as_nanos())
111134
}
112135

136+
// #[pyfunction]
137+
// fn tzset() {
138+
// unsafe { super::_tzset() };
139+
// }
140+
141+
#[cfg(not(target_env = "msvc"))]
142+
#[pyattr]
143+
fn timezone(_vm: &VirtualMachine) -> std::ffi::c_long {
144+
unsafe { super::c_timezone }
145+
}
146+
147+
#[cfg(not(target_env = "msvc"))]
148+
#[pyattr]
149+
fn daylight(_vm: &VirtualMachine) -> std::ffi::c_int {
150+
unsafe { super::c_daylight }
151+
}
152+
153+
#[cfg(not(target_env = "msvc"))]
154+
#[pyattr]
155+
fn tzname(vm: &VirtualMachine) -> crate::builtins::PyTupleRef {
156+
use crate::builtins::tuple::IntoPyTuple;
157+
158+
unsafe fn to_str(s: *const std::ffi::c_char) -> String {
159+
std::ffi::CStr::from_ptr(s).to_string_lossy().into_owned()
160+
}
161+
unsafe { (to_str(super::c_tzname[0]), to_str(super::c_tzname[1])) }.into_pytuple(vm)
162+
}
163+
113164
fn pyobj_to_date_time(
114165
value: Either<f64, i64>,
115166
vm: &VirtualMachine,
@@ -384,7 +435,7 @@ mod time {
384435
#[pymodule(sub)]
385436
mod platform {
386437
#[allow(unused_imports)]
387-
use super::{SEC_TO_NS, US_TO_NS};
438+
use super::decl::{SEC_TO_NS, US_TO_NS};
388439
#[cfg_attr(target_os = "macos", allow(unused_imports))]
389440
use crate::{
390441
builtins::{PyNamespace, PyStrRef},
@@ -621,7 +672,7 @@ mod platform {
621672
#[cfg(windows)]
622673
#[pymodule]
623674
mod platform {
624-
use super::{time_muldiv, MS_TO_NS, SEC_TO_NS};
675+
use super::decl::{time_muldiv, MS_TO_NS, SEC_TO_NS};
625676
use crate::{
626677
builtins::{PyNamespace, PyStrRef},
627678
stdlib::os::errno_err,

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.