diff options
Diffstat (limited to 'sysdeps/mach/hurd/dl-sysdep.c')
-rw-r--r-- | sysdeps/mach/hurd/dl-sysdep.c | 65 |
1 files changed, 33 insertions, 32 deletions
diff --git a/sysdeps/mach/hurd/dl-sysdep.c b/sysdeps/mach/hurd/dl-sysdep.c index 8edde69337..abaf0b2676 100644 --- a/sysdeps/mach/hurd/dl-sysdep.c +++ b/sysdeps/mach/hurd/dl-sysdep.c @@ -240,7 +240,7 @@ open_file (const char *file_name, int mode, int nloops; error_t err; - assert (mode == O_RDONLY); + assert (!(mode & ~O_READ)); startdir = _dl_hurd_data->portarray[file_name[0] == '/' ? INIT_PORT_CRDIR : INIT_PORT_CWDIR]; @@ -558,6 +558,38 @@ __mmap (__ptr_t addr, size_t len, int prot, int flags, int fd, off_t offset) return err ? (__ptr_t) __hurd_fail (err) : (__ptr_t) mapaddr; } +int weak_function +__fxstat (int vers, int fd, struct stat *buf) +{ + error_t err; + + assert (vers == _STAT_VER); + + err = __io_stat ((mach_port_t) fd, buf); + if (err) + return __hurd_fail (err); + + return 0; + +} + +int weak_function +__xstat (int vers, const char *file, struct stat *buf) +{ + error_t err; + mach_port_t port; + + assert (vers == _STAT_VER); + + err = open_file (file, 0, &port, buf); + if (err) + return __hurd_fail (err); + + __mach_port_deallocate (__mach_task_self (), port); + + return 0; +} + void weak_function _exit (int status) { @@ -567,37 +599,6 @@ _exit (int status) __mach_task_self_ = (__mach_task_self) (); } -/* Read the whole contents of FILE into new mmap'd space with given - protections. The size of the file is returned in SIZE. */ -void * -weak_function -_dl_sysdep_read_whole_file (const char *file, size_t *size, int prot) -{ - struct stat stat; - mach_port_t memobj_rd; - void *contents; - error_t err = open_file (file, O_RDONLY, &memobj_rd, &stat); - - if (! err) - { - /* Map a copy of the file contents. */ - contents = __mmap (0, stat.st_size, prot, MAP_COPY, memobj_rd, 0); - if (contents == (void *)-1) - contents = 0; - else - *size = stat.st_size; - - __mach_port_deallocate (__mach_task_self (), memobj_rd); - } - else - { - __hurd_fail (err); - contents = 0; - } - - return contents; -} - /* This function is called by interruptible RPC stubs. For initial dynamic linking, just use the normal mach_msg. Since this defn is weak, the real defn in libc.so will override it if we are linked into |