python27_sys/
stringobject.rs

1use libc::{c_char, c_int, c_long};
2
3use crate::object::*;
4use crate::pyport::Py_ssize_t;
5
6#[repr(C)]
7#[allow(missing_copy_implementations)]
8pub struct PyStringObject {
9    #[cfg(py_sys_config = "Py_TRACE_REFS")]
10    pub _ob_next: *mut PyObject,
11    #[cfg(py_sys_config = "Py_TRACE_REFS")]
12    pub _ob_prev: *mut PyObject,
13    pub ob_refcnt: Py_ssize_t,
14    pub ob_type: *mut PyTypeObject,
15    pub ob_size: Py_ssize_t,
16    pub ob_shash: c_long,
17    pub ob_sstate: c_int,
18    pub ob_sval: [c_char; 1],
19}
20
21#[cfg_attr(windows, link(name = "pythonXY"))]
22extern "C" {
23    pub static mut PyBaseString_Type: PyTypeObject;
24    pub static mut PyString_Type: PyTypeObject;
25}
26
27#[inline(always)]
28pub unsafe fn PyString_Check(op: *mut PyObject) -> c_int {
29    PyType_FastSubclass(Py_TYPE(op), Py_TPFLAGS_STRING_SUBCLASS)
30}
31
32#[inline(always)]
33pub unsafe fn PyString_CheckExact(op: *mut PyObject) -> c_int {
34    let u: *mut PyTypeObject = &mut PyString_Type;
35    (Py_TYPE(op) == u) as c_int
36}
37
38#[inline(always)]
39pub unsafe fn PyString_GET_SIZE(op: *mut PyObject) -> Py_ssize_t {
40    (*(op as *mut PyStringObject)).ob_size
41}
42
43#[inline(always)]
44pub unsafe fn PyString_AS_STRING(op: *mut PyObject) -> *mut c_char {
45    (*(op as *mut PyStringObject)).ob_sval.as_mut_ptr()
46}
47
48#[cfg_attr(windows, link(name = "pythonXY"))]
49extern "C" {
50    pub fn PyString_FromString(v: *const c_char) -> *mut PyObject;
51    pub fn PyString_FromStringAndSize(v: *const c_char, len: Py_ssize_t) -> *mut PyObject;
52    pub fn PyString_FromFormat(format: *const c_char, ...) -> *mut PyObject;
53    pub fn PyString_Size(string: *mut PyObject) -> Py_ssize_t;
54    pub fn PyString_AsString(string: *mut PyObject) -> *mut c_char;
55    pub fn PyString_AsStringAndSize(
56        obj: *mut PyObject,
57        s: *mut *mut c_char,
58        len: *mut Py_ssize_t,
59    ) -> c_int;
60    pub fn PyString_Concat(string: *mut *mut PyObject, newpart: *mut PyObject);
61    pub fn PyString_ConcatAndDel(string: *mut *mut PyObject, newpart: *mut PyObject);
62    pub fn _PyString_Resize(string: *mut *mut PyObject, newsize: Py_ssize_t) -> c_int;
63    pub fn PyString_Format(format: *mut PyObject, args: *mut PyObject) -> *mut PyObject;
64    pub fn PyString_InternInPlace(string: *mut *mut PyObject);
65    pub fn PyString_InternFromString(v: *const c_char) -> *mut PyObject;
66    pub fn PyString_Decode(
67        s: *const c_char,
68        size: Py_ssize_t,
69        encoding: *const c_char,
70        errors: *const c_char,
71    ) -> *mut PyObject;
72    pub fn PyString_AsDecodedObject(
73        str: *mut PyObject,
74        encoding: *const c_char,
75        errors: *const c_char,
76    ) -> *mut PyObject;
77    pub fn PyString_Encode(
78        s: *const c_char,
79        size: Py_ssize_t,
80        encoding: *const c_char,
81        errors: *const c_char,
82    ) -> *mut PyObject;
83    pub fn PyString_AsEncodedObject(
84        str: *mut PyObject,
85        encoding: *const c_char,
86        errors: *const c_char,
87    ) -> *mut PyObject;
88
89    ignore! {
90        pub fn PyString_Repr(arg1: *mut PyObject, arg2: c_int) -> *mut PyObject;
91        pub fn _PyString_Eq(arg1: *mut PyObject, arg2: *mut PyObject) -> c_int;
92        pub fn _PyString_FormatLong(
93            arg1: *mut PyObject,
94            arg2: c_int,
95            arg3: c_int,
96            arg4: c_int,
97            arg5: *mut *mut c_char,
98            arg6: *mut c_int,
99        ) -> *mut PyObject;
100        pub fn PyString_DecodeEscape(
101            arg1: *const c_char,
102            arg2: Py_ssize_t,
103            arg3: *const c_char,
104            arg4: Py_ssize_t,
105            arg5: *const c_char,
106        ) -> *mut PyObject;
107        pub fn PyString_InternImmortal(arg1: *mut *mut PyObject);
108        pub fn _Py_ReleaseInternedStrings();
109        pub fn _PyString_Join(sep: *mut PyObject, x: *mut PyObject) -> *mut PyObject;
110        pub fn PyString_AsEncodedString(
111            str: *mut PyObject,
112            encoding: *const c_char,
113            errors: *const c_char,
114        ) -> *mut PyObject;
115        pub fn PyString_AsDecodedString(
116            str: *mut PyObject,
117            encoding: *const c_char,
118            errors: *const c_char,
119        ) -> *mut PyObject;
120
121        pub fn _PyString_InsertThousandsGroupingLocale(
122            buffer: *mut c_char,
123            n_buffer: Py_ssize_t,
124            digits: *mut c_char,
125            n_digits: Py_ssize_t,
126            min_width: Py_ssize_t,
127        ) -> Py_ssize_t;
128        pub fn _PyString_InsertThousandsGrouping(
129            buffer: *mut c_char,
130            n_buffer: Py_ssize_t,
131            digits: *mut c_char,
132            n_digits: Py_ssize_t,
133            min_width: Py_ssize_t,
134            grouping: *const c_char,
135            thousands_sep: *const c_char,
136        ) -> Py_ssize_t;
137        pub fn _PyBytes_FormatAdvanced(
138            obj: *mut PyObject,
139            format_spec: *mut c_char,
140            format_spec_len: Py_ssize_t,
141        ) -> *mut PyObject;
142    }
143}