Skip to content

Commit 8290031

Browse files
committed
Better av_err2str()
1 parent 0281600 commit 8290031

File tree

1 file changed

+21
-6
lines changed

1 file changed

+21
-6
lines changed

src/avutil/error.rs

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
use libc::c_int;
2+
use std::ffi::CStr;
23
use super::common::MKTAG;
3-
use crate::ffi::av_strerror;
4+
use crate::ffi;
45

56
#[allow(non_snake_case)]
67
pub const fn AVERROR(e: u32) -> c_int {
@@ -69,14 +70,28 @@ pub unsafe fn av_make_error_string(
6970
let errbuf_size = errbuf_size as u32;
7071
#[cfg(not(target_arch="x86"))]
7172
let errbuf_size = errbuf_size as u64;
72-
av_strerror(errnum, errbuf, errbuf_size);
73+
ffi::av_strerror(errnum, errbuf, errbuf_size);
7374
errbuf
7475
}
7576

7677
pub fn av_err2str(
7778
errnum: libc::c_int
78-
) -> Vec<libc::c_char> {
79-
let mut errbuf = vec![0; AV_ERROR_MAX_STRING_SIZE];
80-
unsafe { av_make_error_string(errbuf.as_mut_ptr(), AV_ERROR_MAX_STRING_SIZE, errnum); }
81-
errbuf
79+
) -> String {
80+
let mut errbuf = [0u8; AV_ERROR_MAX_STRING_SIZE];
81+
let errbuf_ptr = errbuf.as_mut_ptr() as _;
82+
unsafe { av_make_error_string(errbuf_ptr, AV_ERROR_MAX_STRING_SIZE, errnum); }
83+
unsafe { CStr::from_ptr(errbuf_ptr) }.to_string_lossy().into()
84+
}
85+
86+
#[cfg(test)]
87+
mod test {
88+
use super::*;
89+
90+
#[test]
91+
fn test_err2str() {
92+
assert_eq!(&av_err2str(AVERROR(ffi::EINVAL)), "Invalid argument");
93+
assert_eq!(&av_err2str(AVERROR(ffi::EAGAIN)), "Resource temporarily unavailable");
94+
assert_eq!(&av_err2str(AVERROR(ffi::ENOMEM)), "Cannot allocate memory");
95+
assert_eq!(&av_err2str(AVERROR_EOF), "End of file");
96+
}
8297
}

0 commit comments

Comments
 (0)