python27_sys/
stringobject.rs1use 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}