|
1 | 1 | use libc::c_int;
|
| 2 | +use std::ffi::CStr; |
2 | 3 | use super::common::MKTAG;
|
3 |
| -use crate::ffi::av_strerror; |
| 4 | +use crate::ffi; |
4 | 5 |
|
5 | 6 | #[allow(non_snake_case)]
|
6 | 7 | pub const fn AVERROR(e: u32) -> c_int {
|
@@ -69,14 +70,28 @@ pub unsafe fn av_make_error_string(
|
69 | 70 | let errbuf_size = errbuf_size as u32;
|
70 | 71 | #[cfg(not(target_arch="x86"))]
|
71 | 72 | let errbuf_size = errbuf_size as u64;
|
72 |
| - av_strerror(errnum, errbuf, errbuf_size); |
| 73 | + ffi::av_strerror(errnum, errbuf, errbuf_size); |
73 | 74 | errbuf
|
74 | 75 | }
|
75 | 76 |
|
76 | 77 | pub fn av_err2str(
|
77 | 78 | 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 | + } |
82 | 97 | }
|
0 commit comments