diff options
Diffstat (limited to 'sysdeps/mach/hurd/xstat64.c')
-rw-r--r-- | sysdeps/mach/hurd/xstat64.c | 34 |
1 files changed, 20 insertions, 14 deletions
diff --git a/sysdeps/mach/hurd/xstat64.c b/sysdeps/mach/hurd/xstat64.c index 74a7678..3ca3400 100644 --- a/sysdeps/mach/hurd/xstat64.c +++ b/sysdeps/mach/hurd/xstat64.c @@ -1,4 +1,4 @@ -/* Copyright (C) 2000 Free Software Foundation, Inc. +/* Copyright (C) 2000,02 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or @@ -16,25 +16,31 @@ Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA. */ +#ifndef RTLD_STAT64 /* dl-xstat64.c, but we don't want it. */ + #include <errno.h> #include <stddef.h> #include <sys/stat.h> - -#include "xstatconv.c" +#include <hurd.h> /* Get information about the file descriptor FD in BUF. */ int __xstat64 (int vers, const char *file, struct stat64 *buf) { - int result; - struct stat buf32; - - /* XXX We simply call __xstat and convert the result to `struct - stat64'. We can probably get away with that since we don't - support large files on the Hurd yet. */ - result = __xstat (vers, file, &buf32); - if (result == 0) - xstat64_conv (&buf32, buf); - - return result; + error_t err; + file_t port; + + if (vers != _STAT_VER) + return __hurd_fail (EINVAL); + + port = __file_name_lookup (file, 0, 0); + if (port == MACH_PORT_NULL) + return -1; + err = __io_stat (port, buf); + __mach_port_deallocate (__mach_task_self (), port); + if (err) + return __hurd_fail (err); + return 0; } + +#endif |