Date: Mon, 18 Sep 2000 19:42:00 +0300 From: Maxim Sobolev <sobomax@FreeBSD.org> To: current@FreeBSD.org Cc: jlemon@FreeBSD.org, jasone@FreeBSD.org Subject: Thread-safe version of fpathconf(2) syscall missed from libc_r [patch for review] Message-ID: <39C645D8.ED66330A@FreeBSD.org>
next in thread | raw e-mail | index | archive | help
This is a multi-part message in MIME format. --------------F173C57EA66A1E2470B9EBFC Content-Type: text/plain; charset=koi8-r Content-Transfer-Encoding: 7bit Hi, It seems that due to unknown for me reasons, thread-safe wrapper for fpathconf(2) syscall is missed from the libc_r, while fpathconf listed in the list of syscalls for which thread-safe wrappers are to be provided (src/lib/libc_r/Makefile:31). The following short example exposes the bug: fpath.c: #include <unistd.h> #include <pthread.h> int main() { return fpathconf(1, 3); } $ cc -pthread fpath.c /tmp/ccF56334.o: In function `main': /tmp/ccF56334.o(.text+0xe): undefined reference to `fpathconf' Attached patch expected to fix the problem. -Maxim --------------F173C57EA66A1E2470B9EBFC Content-Type: text/plain; charset=koi8-r; name="libc_r-fpathconf.diff" Content-Transfer-Encoding: 7bit Content-Disposition: inline; filename="libc_r-fpathconf.diff" diff -druN libc_r.orig/uthread/Makefile.inc libc_r/uthread/Makefile.inc --- libc_r.orig/uthread/Makefile.inc Fri Aug 11 14:49:15 2000 +++ libc_r/uthread/Makefile.inc Mon Sep 18 18:28:49 2000 @@ -49,6 +49,7 @@ uthread_find_thread.c \ uthread_flock.c \ uthread_fork.c \ + uthread_fpathconf.c \ uthread_fstat.c \ uthread_fstatfs.c \ uthread_fsync.c \ diff -druN libc_r.orig/uthread/pthread_private.h libc_r/uthread/pthread_private.h --- libc_r.orig/uthread/pthread_private.h Fri Aug 11 14:49:15 2000 +++ libc_r/uthread/pthread_private.h Mon Sep 18 19:10:00 2000 @@ -1204,6 +1204,7 @@ int _thread_sys_pause(void); int _thread_sys_pipe(int *); int _thread_sys_select(int, fd_set *, fd_set *, fd_set *, struct timeval *); +long _thread_sys_fpathconf(int, int); off_t _thread_sys_lseek(int, off_t, int); pid_t _thread_sys_fork(void); pid_t _thread_sys_tcgetpgrp(int); diff -druN libc_r.orig/uthread/uthread_fpathconf.c libc_r/uthread/uthread_fpathconf.c --- libc_r.orig/uthread/uthread_fpathconf.c Thu Jan 1 03:00:00 1970 +++ libc_r/uthread/uthread_fpathconf.c Mon Sep 18 19:24:14 2000 @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2000 Maxim Sobolev <sobomax@FreeBSD.org> + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * + * THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * $FreeBSD$ + */ +#include <unistd.h> +#ifdef _THREAD_SAFE +#include <pthread.h> +#include "pthread_private.h" + +long +_fpathconf(int fd, int name) +{ + long ret; + + if ((ret = _FD_LOCK(fd, FD_READ, NULL)) == 0) { + ret = _thread_sys_fpathconf(fd, name); + _FD_UNLOCK(fd, FD_READ); + } + return ret; +} + +__strong_reference(_fpathconf, fpathconf); +#endif --------------F173C57EA66A1E2470B9EBFC-- To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe freebsd-current" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?39C645D8.ED66330A>