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
[-- Attachment #1 --]
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
[-- Attachment #2 --]
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
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?39C645D8.ED66330A>
