Skip to content

Commit dfc1ab5

Browse files
committed
Auto merge of #244 - mrhota:basic_locale, r=alexcrichton
Add lconv type, and locale support for UNIX We have lconv struct, setlocale(), and localeconv(). Constants live under notbsd for now.
2 parents 62fb1d5 + 5399c89 commit dfc1ab5

File tree

12 files changed

+204
-0
lines changed

12 files changed

+204
-0
lines changed

libc-test/build.rs

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ fn main() {
3838
cfg.header("errno.h")
3939
.header("fcntl.h")
4040
.header("limits.h")
41+
.header("locale.h")
4142
.header("stddef.h")
4243
.header("stdint.h")
4344
.header("stdio.h")

src/unix/bsd/apple/mod.rs

+27
Original file line numberDiff line numberDiff line change
@@ -257,6 +257,33 @@ s! {
257257
pub trailers: *mut ::iovec,
258258
pub trl_cnt: ::c_int,
259259
}
260+
261+
pub struct lconv {
262+
pub decimal_point: *mut ::c_char,
263+
pub thousands_sep: *mut ::c_char,
264+
pub grouping: *mut ::c_char,
265+
pub int_curr_symbol: *mut ::c_char,
266+
pub currency_symbol: *mut ::c_char,
267+
pub mon_decimal_point: *mut ::c_char,
268+
pub mon_thousands_sep: *mut ::c_char,
269+
pub mon_grouping: *mut ::c_char,
270+
pub positive_sign: *mut ::c_char,
271+
pub negative_sign: *mut ::c_char,
272+
pub int_frac_digits: ::c_char,
273+
pub frac_digits: ::c_char,
274+
pub p_cs_precedes: ::c_char,
275+
pub p_sep_by_space: ::c_char,
276+
pub n_cs_precedes: ::c_char,
277+
pub n_sep_by_space: ::c_char,
278+
pub p_sign_posn: ::c_char,
279+
pub n_sign_posn: ::c_char,
280+
pub int_p_cs_precedes: ::c_char,
281+
pub int_n_cs_precedes: ::c_char,
282+
pub int_p_sep_by_space: ::c_char,
283+
pub int_n_sep_by_space: ::c_char,
284+
pub int_p_sign_posn: ::c_char,
285+
pub int_n_sign_posn: ::c_char,
286+
}
260287
}
261288

262289
pub const EXIT_FAILURE: ::c_int = 1;

src/unix/bsd/freebsdlike/mod.rs

+27
Original file line numberDiff line numberDiff line change
@@ -120,6 +120,33 @@ s! {
120120
pub trailers: *mut ::iovec,
121121
pub trl_cnt: ::c_int,
122122
}
123+
124+
pub struct lconv {
125+
pub decimal_point: *mut ::c_char,
126+
pub thousands_sep: *mut ::c_char,
127+
pub grouping: *mut ::c_char,
128+
pub int_curr_symbol: *mut ::c_char,
129+
pub currency_symbol: *mut ::c_char,
130+
pub mon_decimal_point: *mut ::c_char,
131+
pub mon_thousands_sep: *mut ::c_char,
132+
pub mon_grouping: *mut ::c_char,
133+
pub positive_sign: *mut ::c_char,
134+
pub negative_sign: *mut ::c_char,
135+
pub int_frac_digits: ::c_char,
136+
pub frac_digits: ::c_char,
137+
pub p_cs_precedes: ::c_char,
138+
pub p_sep_by_space: ::c_char,
139+
pub n_cs_precedes: ::c_char,
140+
pub n_sep_by_space: ::c_char,
141+
pub p_sign_posn: ::c_char,
142+
pub n_sign_posn: ::c_char,
143+
pub int_p_cs_precedes: ::c_char,
144+
pub int_n_cs_precedes: ::c_char,
145+
pub int_p_sep_by_space: ::c_char,
146+
pub int_n_sep_by_space: ::c_char,
147+
pub int_p_sign_posn: ::c_char,
148+
pub int_n_sign_posn: ::c_char,
149+
}
123150
}
124151

125152
pub const EXIT_FAILURE: ::c_int = 1;

src/unix/bsd/mod.rs

+8
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,14 @@ s! {
122122
}
123123
}
124124

125+
pub const LC_ALL: ::c_int = 0;
126+
pub const LC_COLLATE: ::c_int = 1;
127+
pub const LC_CTYPE: ::c_int = 2;
128+
pub const LC_MONETARY: ::c_int = 3;
129+
pub const LC_NUMERIC: ::c_int = 4;
130+
pub const LC_TIME: ::c_int = 5;
131+
pub const LC_MESSAGES: ::c_int = 6;
132+
125133
pub const FIOCLEX: ::c_ulong = 0x20006601;
126134
pub const FIONBIO: ::c_ulong = 0x8004667e;
127135

src/unix/bsd/openbsdlike/bitrig.rs

+27
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,33 @@ s! {
106106
pub dli_sname: *const ::c_char,
107107
pub dli_saddr: *mut ::c_void,
108108
}
109+
110+
pub struct lconv {
111+
pub decimal_point: *mut ::c_char,
112+
pub thousands_sep: *mut ::c_char,
113+
pub grouping: *mut ::c_char,
114+
pub int_curr_symbol: *mut ::c_char,
115+
pub currency_symbol: *mut ::c_char,
116+
pub mon_decimal_point: *mut ::c_char,
117+
pub mon_thousands_sep: *mut ::c_char,
118+
pub mon_grouping: *mut ::c_char,
119+
pub positive_sign: *mut ::c_char,
120+
pub negative_sign: *mut ::c_char,
121+
pub int_frac_digits: ::c_char,
122+
pub frac_digits: ::c_char,
123+
pub p_cs_precedes: ::c_char,
124+
pub p_sep_by_space: ::c_char,
125+
pub n_cs_precedes: ::c_char,
126+
pub n_sep_by_space: ::c_char,
127+
pub p_sign_posn: ::c_char,
128+
pub n_sign_posn: ::c_char,
129+
pub int_p_cs_precedes: ::c_char,
130+
pub int_n_cs_precedes: ::c_char,
131+
pub int_p_sep_by_space: ::c_char,
132+
pub int_n_sep_by_space: ::c_char,
133+
pub int_p_sign_posn: ::c_char,
134+
pub int_n_sign_posn: ::c_char,
135+
}
109136
}
110137

111138
pub const O_CLOEXEC: ::c_int = 0x10000;

src/unix/bsd/openbsdlike/netbsd.rs

+27
Original file line numberDiff line numberDiff line change
@@ -190,6 +190,33 @@ s! {
190190
pub dli_sname: *const ::c_char,
191191
pub dli_saddr: *const ::c_void,
192192
}
193+
194+
pub struct lconv {
195+
pub decimal_point: *mut ::c_char,
196+
pub thousands_sep: *mut ::c_char,
197+
pub grouping: *mut ::c_char,
198+
pub int_curr_symbol: *mut ::c_char,
199+
pub currency_symbol: *mut ::c_char,
200+
pub mon_decimal_point: *mut ::c_char,
201+
pub mon_thousands_sep: *mut ::c_char,
202+
pub mon_grouping: *mut ::c_char,
203+
pub positive_sign: *mut ::c_char,
204+
pub negative_sign: *mut ::c_char,
205+
pub int_frac_digits: ::c_char,
206+
pub frac_digits: ::c_char,
207+
pub p_cs_precedes: ::c_char,
208+
pub p_sep_by_space: ::c_char,
209+
pub n_cs_precedes: ::c_char,
210+
pub n_sep_by_space: ::c_char,
211+
pub p_sign_posn: ::c_char,
212+
pub n_sign_posn: ::c_char,
213+
pub int_p_cs_precedes: ::c_char,
214+
pub int_n_cs_precedes: ::c_char,
215+
pub int_p_sep_by_space: ::c_char,
216+
pub int_n_sep_by_space: ::c_char,
217+
pub int_p_sign_posn: ::c_char,
218+
pub int_n_sign_posn: ::c_char,
219+
}
193220
}
194221

195222
pub const O_CLOEXEC: ::c_int = 0x400000;

src/unix/bsd/openbsdlike/openbsd.rs

+27
Original file line numberDiff line numberDiff line change
@@ -109,6 +109,33 @@ s! {
109109
pub dli_sname: *const ::c_char,
110110
pub dli_saddr: *mut ::c_void,
111111
}
112+
113+
pub struct lconv {
114+
pub decimal_point: *mut ::c_char,
115+
pub thousands_sep: *mut ::c_char,
116+
pub grouping: *mut ::c_char,
117+
pub int_curr_symbol: *mut ::c_char,
118+
pub currency_symbol: *mut ::c_char,
119+
pub mon_decimal_point: *mut ::c_char,
120+
pub mon_thousands_sep: *mut ::c_char,
121+
pub mon_grouping: *mut ::c_char,
122+
pub positive_sign: *mut ::c_char,
123+
pub negative_sign: *mut ::c_char,
124+
pub int_frac_digits: ::c_char,
125+
pub frac_digits: ::c_char,
126+
pub p_cs_precedes: ::c_char,
127+
pub p_sep_by_space: ::c_char,
128+
pub n_cs_precedes: ::c_char,
129+
pub n_sep_by_space: ::c_char,
130+
pub p_sign_posn: ::c_char,
131+
pub n_sign_posn: ::c_char,
132+
pub int_p_cs_precedes: ::c_char,
133+
pub int_p_sep_by_space: ::c_char,
134+
pub int_n_cs_precedes: ::c_char,
135+
pub int_n_sep_by_space: ::c_char,
136+
pub int_p_sign_posn: ::c_char,
137+
pub int_n_sign_posn: ::c_char,
138+
}
112139
}
113140

114141
pub const O_CLOEXEC: ::c_int = 0x10000;

src/unix/mod.rs

+4
Original file line numberDiff line numberDiff line change
@@ -611,6 +611,10 @@ extern {
611611
writefds: *mut fd_set,
612612
errorfds: *mut fd_set,
613613
timeout: *mut timeval) -> ::c_int;
614+
#[cfg_attr(target_os = "netbsd", link_name = "__setlocale50")]
615+
pub fn setlocale(category: ::c_int,
616+
locale: *const ::c_char) -> *mut ::c_char;
617+
pub fn localeconv() -> *mut lconv;
614618
}
615619

616620
// TODO: get rid of this cfg(not(...))

src/unix/notbsd/android/mod.rs

+7
Original file line numberDiff line numberDiff line change
@@ -302,6 +302,13 @@ pub const SIG_UNBLOCK: ::c_int = 0x01;
302302

303303
pub const RUSAGE_CHILDREN: ::c_int = -1;
304304

305+
pub const LC_PAPER: ::c_int = 7;
306+
pub const LC_NAME: ::c_int = 8;
307+
pub const LC_ADDRESS: ::c_int = 9;
308+
pub const LC_TELEPHONE: ::c_int = 10;
309+
pub const LC_MEASUREMENT: ::c_int = 11;
310+
pub const LC_IDENTIFICATION: ::c_int = 12;
311+
305312
pub const MAP_ANON: ::c_int = 0x0020;
306313
pub const MAP_ANONYMOUS: ::c_int = 0x0020;
307314
pub const MAP_GROWSDOWN: ::c_int = 0x0100;

src/unix/notbsd/linux/mips.rs

+7
Original file line numberDiff line numberDiff line change
@@ -294,6 +294,13 @@ pub const EOWNERDEAD: ::c_int = 165;
294294
pub const ENOTRECOVERABLE: ::c_int = 166;
295295
pub const ERFKILL: ::c_int = 167;
296296

297+
pub const LC_PAPER: ::c_int = 7;
298+
pub const LC_NAME: ::c_int = 8;
299+
pub const LC_ADDRESS: ::c_int = 9;
300+
pub const LC_TELEPHONE: ::c_int = 10;
301+
pub const LC_MEASUREMENT: ::c_int = 11;
302+
pub const LC_IDENTIFICATION: ::c_int = 12;
303+
297304
pub const MAP_NORESERVE: ::c_int = 0x400;
298305
pub const MAP_ANON: ::c_int = 0x800;
299306
pub const MAP_ANONYMOUS: ::c_int = 0x800;

src/unix/notbsd/linux/other/mod.rs

+7
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,13 @@ pub const O_FSYNC: ::c_int = 0x101000;
143143

144144
pub const SOCK_NONBLOCK: ::c_int = O_NONBLOCK;
145145

146+
pub const LC_PAPER: ::c_int = 7;
147+
pub const LC_NAME: ::c_int = 8;
148+
pub const LC_ADDRESS: ::c_int = 9;
149+
pub const LC_TELEPHONE: ::c_int = 10;
150+
pub const LC_MEASUREMENT: ::c_int = 11;
151+
pub const LC_IDENTIFICATION: ::c_int = 12;
152+
146153
pub const MAP_ANON: ::c_int = 0x0020;
147154
pub const MAP_ANONYMOUS: ::c_int = 0x0020;
148155
pub const MAP_GROWSDOWN: ::c_int = 0x0100;

src/unix/notbsd/mod.rs

+35
Original file line numberDiff line numberDiff line change
@@ -131,6 +131,33 @@ s! {
131131
pub machine: [::c_char; 65],
132132
pub domainname: [::c_char; 65]
133133
}
134+
135+
pub struct lconv {
136+
pub decimal_point: *mut ::c_char,
137+
pub thousands_sep: *mut ::c_char,
138+
pub grouping: *mut ::c_char,
139+
pub int_curr_symbol: *mut ::c_char,
140+
pub currency_symbol: *mut ::c_char,
141+
pub mon_decimal_point: *mut ::c_char,
142+
pub mon_thousands_sep: *mut ::c_char,
143+
pub mon_grouping: *mut ::c_char,
144+
pub positive_sign: *mut ::c_char,
145+
pub negative_sign: *mut ::c_char,
146+
pub int_frac_digits: ::c_char,
147+
pub frac_digits: ::c_char,
148+
pub p_cs_precedes: ::c_char,
149+
pub p_sep_by_space: ::c_char,
150+
pub n_cs_precedes: ::c_char,
151+
pub n_sep_by_space: ::c_char,
152+
pub p_sign_posn: ::c_char,
153+
pub n_sign_posn: ::c_char,
154+
pub int_p_cs_precedes: ::c_char,
155+
pub int_p_sep_by_space: ::c_char,
156+
pub int_n_cs_precedes: ::c_char,
157+
pub int_n_sep_by_space: ::c_char,
158+
pub int_p_sign_posn: ::c_char,
159+
pub int_n_sign_posn: ::c_char,
160+
}
134161
}
135162

136163
// intentionally not public, only used for fd_set
@@ -244,6 +271,14 @@ pub const PROT_READ: ::c_int = 1;
244271
pub const PROT_WRITE: ::c_int = 2;
245272
pub const PROT_EXEC: ::c_int = 4;
246273

274+
pub const LC_CTYPE: ::c_int = 0;
275+
pub const LC_NUMERIC: ::c_int = 1;
276+
pub const LC_TIME: ::c_int = 2;
277+
pub const LC_COLLATE: ::c_int = 3;
278+
pub const LC_MONETARY: ::c_int = 4;
279+
pub const LC_MESSAGES: ::c_int = 5;
280+
pub const LC_ALL: ::c_int = 6;
281+
247282
pub const MAP_FILE: ::c_int = 0x0000;
248283
pub const MAP_SHARED: ::c_int = 0x0001;
249284
pub const MAP_PRIVATE: ::c_int = 0x0002;

0 commit comments

Comments
 (0)