From ea102096803dd12acf5fc592fb5c581e9b9ff51d Mon Sep 17 00:00:00 2001 From: Sendil Kumar Date: Thu, 22 Aug 2019 13:17:02 +0200 Subject: fix readlink/readlinkat to return too long only when it is long --- test/test_fcntl.rs | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) (limited to 'test') diff --git a/test/test_fcntl.rs b/test/test_fcntl.rs index 6b2bbd67..c8773219 100644 --- a/test/test_fcntl.rs +++ b/test/test_fcntl.rs @@ -56,12 +56,23 @@ fn test_readlink() { let dirfd = open(tempdir.path(), OFlag::empty(), Mode::empty()).unwrap(); + let expected_dir = src.to_str().unwrap(); + // When the size of the buffer is bigger than the expected directory length let mut buf = vec![0; src.to_str().unwrap().len() + 1]; - assert_eq!(readlink(&dst, &mut buf).unwrap().to_str().unwrap(), - src.to_str().unwrap()); - assert_eq!(readlinkat(dirfd, "b", &mut buf).unwrap().to_str().unwrap(), - src.to_str().unwrap()); + assert_eq!(readlink(&dst, &mut buf).unwrap().to_str().unwrap(), expected_dir); + assert_eq!(readlinkat(dirfd, "b", &mut buf).unwrap().to_str().unwrap(), expected_dir); + + // When the size of the buffer is equal to the expected directory length + let mut exact_buf = vec![0; src.to_str().unwrap().len()]; + assert_eq!(readlink(&dst, &mut exact_buf).unwrap().to_str().unwrap(), expected_dir); + assert_eq!(readlinkat(dirfd, "b", &mut exact_buf).unwrap().to_str().unwrap(), expected_dir); + + // When the size of the buffer is smaller than the expected directory length + let mut small_buf = vec![0;0]; + assert_eq!(readlink(&dst, &mut small_buf).unwrap().to_str().unwrap(), ""); + assert_eq!(readlinkat(dirfd, "b", &mut small_buf).unwrap().to_str().unwrap(), ""); + } #[cfg(any(target_os = "linux", target_os = "android"))] -- cgit v1.2.3