Просмотр исходного кода

Implement Display for png_image

Lucas Stadler лет назад: 10
Родитель
Сommit
fb389a2eb2
1 измененных файлов с 18 добавлено и 14 удалено
  1. 18 14
      rust/coffi/src/main.rs

+ 18 - 14
rust/coffi/src/main.rs

19
    message: [u8; 64],
19
    message: [u8; 64],
20
}
20
}
21
21
22
impl std::fmt::Display for png_image {
23
    fn fmt(&self, f: &mut std::fmt::Formatter) -> std::fmt::Result {
24
        fn get_message(msg: [u8; 64]) -> String {
25
            let mut vec = Vec::new();
26
            for i in 0..64 {
27
                vec.push(msg[i]);
28
            }
29
            String::from_utf8(vec).unwrap()
30
        }
31
32
        write!(f, "{}x{} {} {} {} {} {} {}", self.width, self.height, self.version,
33
               self.format, self.flags, self.colormap_entries, self.warning_or_error,
34
               get_message(self.message))
35
    }
36
}
37
22
#[link(name = "png")]
38
#[link(name = "png")]
23
extern {
39
extern {
24
    fn png_image_begin_read_from_file(img: *mut png_image, file_name: *const u8) -> libc::c_int;
40
    fn png_image_begin_read_from_file(img: *mut png_image, file_name: *const u8) -> libc::c_int;
28
    let x = unsafe { cos(3.1415) };
44
    let x = unsafe { cos(3.1415) };
29
    println!("cos(3.1415) = {}", x);
45
    println!("cos(3.1415) = {}", x);
30
46
31
    fn get_message(msg: [u8; 64]) -> String {
32
        let mut vec = Vec::new();
33
        for i in 0..64 {
34
            vec.push(msg[i]);
35
        }
36
        String::from_utf8(vec).unwrap()
37
    }
38
39
    fn print_img(img: &png_image) {
40
        println!("{}x{} {} {} {} {} {} {}", img.width, img.height, img.version, img.format, img.flags, img.colormap_entries, img.warning_or_error, get_message(img.message))
41
    }
42
43
    unsafe {
47
    unsafe {
44
        let mut img: png_image = std::mem::zeroed();
48
        let mut img: png_image = std::mem::zeroed();
45
        img.version = 1;
49
        img.version = 1;
46
        print_img(&img);
50
        println!("{}", img);
47
        let res = png_image_begin_read_from_file(&mut img, "mei.png\0".as_ptr());
51
        let res = png_image_begin_read_from_file(&mut img, "mei.png\0".as_ptr());
48
        println!("read_from_file: {}", res);
52
        println!("read_from_file: {}", res);
49
        print_img(&img);
53
        println!("{}", img);
50
    }
54
    }
51
}
55
}