[PATCH 1/2] libc: fix setting return value and errno in fallocate()
Waldemar Brodkorb
wbx at openadk.org
Wed Sep 16 19:20:31 UTC 2015
Hi Yuriy,
can you explain why these patches are useful?
Better standard conformance? Testsuite or runtime fixes?
Thanks
Waldemar
Yuriy Kolerov wrote,
> Signed-off-by: Yuriy Kolerov <yuriy.kolerov at synopsys.com>
> ---
> libc/sysdeps/linux/common/fallocate.c | 13 ++++++++-----
> libc/sysdeps/linux/common/fallocate64.c | 11 +++++++----
> 2 files changed, 15 insertions(+), 9 deletions(-)
>
> diff --git a/libc/sysdeps/linux/common/fallocate.c b/libc/sysdeps/linux/common/fallocate.c
> index b231226..97ac303 100644
> --- a/libc/sysdeps/linux/common/fallocate.c
> +++ b/libc/sysdeps/linux/common/fallocate.c
> @@ -12,6 +12,7 @@
> #include <fcntl.h>
> #include <bits/kernel-features.h>
> #include <stdint.h>
> +#include <errno.h>
>
> #if defined __NR_fallocate
> extern __typeof(fallocate) __libc_fallocate attribute_hidden;
> @@ -26,17 +27,19 @@ int attribute_hidden __libc_fallocate(int fd, int mode, __off_t offset, __off_t
> uint32_t zero = 0;
> INTERNAL_SYSCALL_DECL(err);
> ret = (int) (INTERNAL_SYSCALL(fallocate, err, 6, fd, mode,
> - __LONG_LONG_PAIR (zero, off_low),
> - __LONG_LONG_PAIR (zero, len_low)));
> + __LONG_LONG_PAIR(zero, off_low),
> + __LONG_LONG_PAIR(zero, len_low)));
> # elif __WORDSIZE == 64
> INTERNAL_SYSCALL_DECL(err);
> ret = (int) (INTERNAL_SYSCALL(fallocate, err, 4, fd, mode, offset, len));
> # else
> # error your machine is neither 32 bit or 64 bit ... it must be magical
> # endif
> - if (unlikely(INTERNAL_SYSCALL_ERROR_P (ret, err)))
> - return INTERNAL_SYSCALL_ERRNO (ret, err);
> - return 0;
> + if (unlikely(INTERNAL_SYSCALL_ERROR_P(ret, err))) {
> + __set_errno(INTERNAL_SYSCALL_ERRNO(ret, err));
> + ret = -1;
> + }
> + return ret;
> }
>
> # if defined __UCLIBC_LINUX_SPECIFIC__ && defined __USE_GNU
> diff --git a/libc/sysdeps/linux/common/fallocate64.c b/libc/sysdeps/linux/common/fallocate64.c
> index cf75693..d051d37 100644
> --- a/libc/sysdeps/linux/common/fallocate64.c
> +++ b/libc/sysdeps/linux/common/fallocate64.c
> @@ -13,6 +13,7 @@
> #include <fcntl.h>
> #include <bits/kernel-features.h>
> #include <stdint.h>
> +#include <errno.h>
>
> #if defined __NR_fallocate
>
> @@ -26,10 +27,12 @@ int attribute_hidden __libc_fallocate64(int fd, int mode, __off64_t offset,
> int ret;
> INTERNAL_SYSCALL_DECL(err);
> ret = (int) (INTERNAL_SYSCALL(fallocate, err, 6, fd, mode,
> - OFF64_HI_LO (offset), OFF64_HI_LO (len)));
> - if (unlikely(INTERNAL_SYSCALL_ERROR_P (ret, err)))
> - return INTERNAL_SYSCALL_ERRNO (ret, err);
> - return 0;
> + OFF64_HI_LO(offset), OFF64_HI_LO(len)));
> + if (unlikely(INTERNAL_SYSCALL_ERROR_P(ret, err))) {
> + __set_errno(INTERNAL_SYSCALL_ERRNO(ret, err));
> + ret = -1;
> + }
> + return ret;
> }
>
> # if defined __UCLIBC_LINUX_SPECIFIC__ && defined __USE_GNU
> --
> 2.2.0
>
> _______________________________________________
> uClibc mailing list
> uClibc at uclibc.org
> http://lists.busybox.net/mailman/listinfo/uclibc
>
More information about the uClibc
mailing list