File tree Expand file tree Collapse file tree 3 files changed +59
-1
lines changed Expand file tree Collapse file tree 3 files changed +59
-1
lines changed Original file line number Diff line number Diff line change 1
1
---
2
- refs/heads/master: 45dc5356dfa37b80a3e5ed37783a38060fdb8c1f
2
+ refs/heads/master: 90d27af42a7af82608363ad95456c88363a9c3da
Original file line number Diff line number Diff line change
1
+ // -*- rust -*-
2
+ use std;
3
+ import std:: c_vec:: * ;
4
+ import std:: ctypes:: * ;
5
+
6
+ #[ link_name = "" ]
7
+ #[ abi = "cdecl" ]
8
+ native mod libc {
9
+ fn malloc ( n : size_t ) -> * mutable u8 ;
10
+ fn free ( m : * mutable u8 ) ;
11
+ }
12
+
13
+ fn malloc ( n : size_t ) -> t < u8 > {
14
+ let mem = libc:: malloc ( n) ;
15
+
16
+ assert mem as int != 0 ;
17
+
18
+ ret unsafe { create_with_dtor ( mem, n, bind libc:: free ( mem) ) } ;
19
+ }
20
+
21
+ #[ test]
22
+ fn test_basic ( ) {
23
+ let cv = malloc ( 16 u) ;
24
+
25
+ set ( cv, 3 u, 8u8 ) ;
26
+ set ( cv, 4 u, 9u8 ) ;
27
+ assert get( cv, 3 u) == 8u8 ;
28
+ assert get( cv, 4 u) == 9u8 ;
29
+ assert size( cv) == 16 u;
30
+ }
31
+
32
+ #[ test]
33
+ #[ should_fail]
34
+ fn test_overrun_get ( ) {
35
+ let cv = malloc ( 16 u) ;
36
+
37
+ get ( cv, 17 u) ;
38
+ }
39
+
40
+ #[ test]
41
+ #[ should_fail]
42
+ fn test_overrun_set ( ) {
43
+ let cv = malloc ( 16 u) ;
44
+
45
+ set ( cv, 17 u, 0u8 ) ;
46
+ }
47
+
48
+ #[ test]
49
+ fn test_and_I_mean_it ( ) {
50
+ let cv = malloc ( 16 u) ;
51
+ let p = unsafe { ptr ( cv) } ;
52
+
53
+ set ( cv, 0 u, 32u8 ) ;
54
+ set ( cv, 1 u, 33u8 ) ;
55
+ assert unsafe { * p } == 32u8 ;
56
+ set ( cv, 2 u, 34u8 ) ; /* safety */
57
+ }
Original file line number Diff line number Diff line change 3
3
mod bitv;
4
4
mod bool;
5
5
mod box;
6
+ mod c_vec;
6
7
mod char;
7
8
mod comm;
8
9
mod deque;
You can’t perform that action at this time.
0 commit comments