am ed36d95f
: Merge "Start moving to current FreeBSD stdio."
* commit 'ed36d95fac5881f78a601e2932f51edfd27c6ba6': Start moving to current FreeBSD stdio.
This commit is contained in:
commit
5fe62e50f6
@ -15,58 +15,29 @@ libc_common_src_files := \
|
|||||||
unistd/system.c \
|
unistd/system.c \
|
||||||
unistd/time.c \
|
unistd/time.c \
|
||||||
stdio/asprintf.c \
|
stdio/asprintf.c \
|
||||||
stdio/clrerr.c \
|
|
||||||
stdio/fclose.c \
|
|
||||||
stdio/fdopen.c \
|
|
||||||
stdio/feof.c \
|
|
||||||
stdio/ferror.c \
|
|
||||||
stdio/fflush.c \
|
stdio/fflush.c \
|
||||||
stdio/fgetc.c \
|
stdio/fgetc.c \
|
||||||
stdio/fgetln.c \
|
|
||||||
stdio/fgetpos.c \
|
|
||||||
stdio/fgets.c \
|
|
||||||
stdio/fileno.c \
|
|
||||||
stdio/findfp.c \
|
stdio/findfp.c \
|
||||||
stdio/flags.c \
|
|
||||||
stdio/fopen.c \
|
|
||||||
stdio/fprintf.c \
|
stdio/fprintf.c \
|
||||||
stdio/fpurge.c \
|
|
||||||
stdio/fputc.c \
|
stdio/fputc.c \
|
||||||
stdio/fputs.c \
|
|
||||||
stdio/fread.c \
|
stdio/fread.c \
|
||||||
stdio/freopen.c \
|
stdio/freopen.c \
|
||||||
stdio/fscanf.c \
|
stdio/fscanf.c \
|
||||||
stdio/fseek.c \
|
stdio/fseek.c \
|
||||||
stdio/fsetpos.c \
|
|
||||||
stdio/ftell.c \
|
stdio/ftell.c \
|
||||||
stdio/funopen.c \
|
|
||||||
stdio/fvwrite.c \
|
stdio/fvwrite.c \
|
||||||
stdio/fwalk.c \
|
|
||||||
stdio/fwrite.c \
|
|
||||||
stdio/getc.c \
|
|
||||||
stdio/getchar.c \
|
|
||||||
stdio/gets.c \
|
stdio/gets.c \
|
||||||
stdio/makebuf.c \
|
stdio/makebuf.c \
|
||||||
stdio/mktemp.c \
|
stdio/mktemp.c \
|
||||||
stdio/printf.c \
|
stdio/printf.c \
|
||||||
stdio/putc.c \
|
|
||||||
stdio/putchar.c \
|
|
||||||
stdio/puts.c \
|
|
||||||
stdio/putw.c \
|
|
||||||
stdio/refill.c \
|
stdio/refill.c \
|
||||||
stdio/remove.c \
|
|
||||||
stdio/rewind.c \
|
stdio/rewind.c \
|
||||||
stdio/rget.c \
|
|
||||||
stdio/scanf.c \
|
stdio/scanf.c \
|
||||||
stdio/setbuf.c \
|
|
||||||
stdio/setbuffer.c \
|
|
||||||
stdio/setvbuf.c \
|
stdio/setvbuf.c \
|
||||||
stdio/snprintf.c\
|
stdio/snprintf.c\
|
||||||
stdio/sprintf.c \
|
stdio/sprintf.c \
|
||||||
stdio/sscanf.c \
|
stdio/sscanf.c \
|
||||||
stdio/stdio.c \
|
stdio/stdio.c \
|
||||||
stdio/tempnam.c \
|
|
||||||
stdio/tmpnam.c \
|
|
||||||
stdio/ungetc.c \
|
stdio/ungetc.c \
|
||||||
stdio/vasprintf.c \
|
stdio/vasprintf.c \
|
||||||
stdio/vfprintf.c \
|
stdio/vfprintf.c \
|
||||||
@ -77,7 +48,6 @@ libc_common_src_files := \
|
|||||||
stdio/vscanf.c \
|
stdio/vscanf.c \
|
||||||
stdio/vsscanf.c \
|
stdio/vsscanf.c \
|
||||||
stdio/wbuf.c \
|
stdio/wbuf.c \
|
||||||
stdio/wsetup.c \
|
|
||||||
stdlib/atexit.c \
|
stdlib/atexit.c \
|
||||||
stdlib/ctype_.c \
|
stdlib/ctype_.c \
|
||||||
stdlib/exit.c \
|
stdlib/exit.c \
|
||||||
@ -289,6 +259,36 @@ libc_bionic_src_files := \
|
|||||||
bionic/wchar.cpp \
|
bionic/wchar.cpp \
|
||||||
|
|
||||||
libc_upstream_freebsd_src_files := \
|
libc_upstream_freebsd_src_files := \
|
||||||
|
upstream-freebsd/lib/libc/stdio/clrerr.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fclose.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fdopen.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/feof.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/ferror.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fgetln.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fgetpos.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fgets.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fileno.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/flags.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fopen.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fpurge.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fputs.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fsetpos.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/funopen.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fwalk.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/fwrite.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/getc.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/getchar.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/putc.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/putchar.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/puts.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/putw.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/remove.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/rget.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/setbuf.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/setbuffer.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/tempnam.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/tmpnam.c \
|
||||||
|
upstream-freebsd/lib/libc/stdio/wsetup.c \
|
||||||
upstream-freebsd/lib/libc/stdlib/realpath.c \
|
upstream-freebsd/lib/libc/stdlib/realpath.c \
|
||||||
upstream-freebsd/lib/libc/string/wcpcpy.c \
|
upstream-freebsd/lib/libc/string/wcpcpy.c \
|
||||||
upstream-freebsd/lib/libc/string/wcpncpy.c \
|
upstream-freebsd/lib/libc/string/wcpncpy.c \
|
||||||
|
@ -17,4 +17,12 @@
|
|||||||
#ifndef _BIONIC_FREEBSD_COMPAT_H_included
|
#ifndef _BIONIC_FREEBSD_COMPAT_H_included
|
||||||
#define _BIONIC_FREEBSD_COMPAT_H_included
|
#define _BIONIC_FREEBSD_COMPAT_H_included
|
||||||
|
|
||||||
|
#define __USE_BSD
|
||||||
|
|
||||||
|
#define _close close
|
||||||
|
#define _fcntl fcntl
|
||||||
|
#define _open open
|
||||||
|
|
||||||
|
#define _sseek __sseek /* Needed as long as we have a mix of OpenBSD and FreeBSD stdio. */
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: clrerr.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,14 +30,32 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)clrerr.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "local.h"
|
#include "un-namespace.h"
|
||||||
#undef clearerr
|
#include "libc_private.h"
|
||||||
|
|
||||||
|
#undef clearerr
|
||||||
|
#undef clearerr_unlocked
|
||||||
|
|
||||||
void
|
void
|
||||||
clearerr(FILE *fp)
|
clearerr(fp)
|
||||||
|
FILE *fp;
|
||||||
{
|
{
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
__sclearerr(fp);
|
__sclearerr(fp);
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
clearerr_unlocked(FILE *fp)
|
||||||
|
{
|
||||||
|
|
||||||
|
__sclearerr(fp);
|
||||||
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fclose.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,9 +30,19 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fclose.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
#include <spinlock.h>
|
||||||
|
#include "libc_private.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
int
|
int
|
||||||
@ -46,7 +55,6 @@ fclose(FILE *fp)
|
|||||||
return (EOF);
|
return (EOF);
|
||||||
}
|
}
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
WCIO_FREE(fp);
|
|
||||||
r = fp->_flags & __SWR ? __sflush(fp) : 0;
|
r = fp->_flags & __SWR ? __sflush(fp) : 0;
|
||||||
if (fp->_close != NULL && (*fp->_close)(fp->_cookie) < 0)
|
if (fp->_close != NULL && (*fp->_close)(fp->_cookie) < 0)
|
||||||
r = EOF;
|
r = EOF;
|
||||||
@ -56,8 +64,22 @@ fclose(FILE *fp)
|
|||||||
FREEUB(fp);
|
FREEUB(fp);
|
||||||
if (HASLB(fp))
|
if (HASLB(fp))
|
||||||
FREELB(fp);
|
FREELB(fp);
|
||||||
|
fp->_file = -1;
|
||||||
fp->_r = fp->_w = 0; /* Mess up if reaccessed. */
|
fp->_r = fp->_w = 0; /* Mess up if reaccessed. */
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Lock the spinlock used to protect __sglue list walk in
|
||||||
|
* __sfp(). The __sfp() uses fp->_flags == 0 test as an
|
||||||
|
* indication of the unused FILE.
|
||||||
|
*
|
||||||
|
* Taking the lock prevents possible compiler or processor
|
||||||
|
* reordering of the writes performed before the final _flags
|
||||||
|
* cleanup, making sure that we are done with the FILE before
|
||||||
|
* it is considered available.
|
||||||
|
*/
|
||||||
|
STDIO_THREAD_LOCK();
|
||||||
fp->_flags = 0; /* Release this FILE for reuse. */
|
fp->_flags = 0; /* Release this FILE for reuse. */
|
||||||
|
STDIO_THREAD_UNLOCK();
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (r);
|
return (r);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fdopen.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,24 +30,47 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fdopen.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
FILE *
|
FILE *
|
||||||
fdopen(int fd, const char *mode)
|
fdopen(fd, mode)
|
||||||
|
int fd;
|
||||||
|
const char *mode;
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int flags, oflags, fdflags, tmp;
|
int flags, oflags, fdflags, tmp;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* File descriptors are a full int, but _file is only a short.
|
||||||
|
* If we get a valid file descriptor that is greater than
|
||||||
|
* SHRT_MAX, then the fd will get sign-extended into an
|
||||||
|
* invalid file descriptor. Handle this case by failing the
|
||||||
|
* open.
|
||||||
|
*/
|
||||||
|
if (fd > SHRT_MAX) {
|
||||||
|
errno = EMFILE;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
if ((flags = __sflags(mode, &oflags)) == 0)
|
if ((flags = __sflags(mode, &oflags)) == 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
/* Make sure the mode the user wants is a subset of the actual mode. */
|
/* Make sure the mode the user wants is a subset of the actual mode. */
|
||||||
if ((fdflags = fcntl(fd, F_GETFL, 0)) < 0)
|
if ((fdflags = _fcntl(fd, F_GETFL, 0)) < 0)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
tmp = fdflags & O_ACCMODE;
|
tmp = fdflags & O_ACCMODE;
|
||||||
if (tmp != O_RDWR && (tmp != (oflags & O_ACCMODE))) {
|
if (tmp != O_RDWR && (tmp != (oflags & O_ACCMODE))) {
|
||||||
@ -58,11 +80,17 @@ fdopen(int fd, const char *mode)
|
|||||||
|
|
||||||
if ((fp = __sfp()) == NULL)
|
if ((fp = __sfp()) == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
|
if ((oflags & O_CLOEXEC) && _fcntl(fd, F_SETFD, FD_CLOEXEC) == -1) {
|
||||||
|
fp->_flags = 0;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
fp->_flags = flags;
|
fp->_flags = flags;
|
||||||
/*
|
/*
|
||||||
* If opened for appending, but underlying descriptor does not have
|
* If opened for appending, but underlying descriptor does not have
|
||||||
* O_APPEND bit set, assert __SAPP so that __swrite() will lseek to
|
* O_APPEND bit set, assert __SAPP so that __swrite() caller
|
||||||
* end before each write.
|
* will _sseek() to the end before write.
|
||||||
*/
|
*/
|
||||||
if ((oflags & O_APPEND) && !(fdflags & O_APPEND))
|
if ((oflags & O_APPEND) && !(fdflags & O_APPEND))
|
||||||
fp->_flags |= __SAPP;
|
fp->_flags |= __SAPP;
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: feof.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,21 +30,34 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
#include "local.h"
|
static char sccsid[] = "@(#)feof.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* A subroutine version of the macro feof.
|
|
||||||
*/
|
|
||||||
#undef feof
|
#undef feof
|
||||||
|
#undef feof_unlocked
|
||||||
|
|
||||||
int
|
int
|
||||||
feof(FILE *fp)
|
feof(FILE *fp)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
ret = __sfeof(fp);
|
ret= __sfeof(fp);
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
feof_unlocked(FILE *fp)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (__sfeof(fp));
|
||||||
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: ferror.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,15 +30,34 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)ferror.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* A subroutine version of the macro ferror.
|
|
||||||
*/
|
|
||||||
#undef ferror
|
#undef ferror
|
||||||
|
#undef ferror_unlocked
|
||||||
|
|
||||||
int
|
int
|
||||||
ferror(FILE *fp)
|
ferror(FILE *fp)
|
||||||
{
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
FLOCKFILE(fp);
|
||||||
|
ret = __sferror(fp);
|
||||||
|
FUNLOCKFILE(fp);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
ferror_unlocked(FILE *fp)
|
||||||
|
{
|
||||||
|
|
||||||
return (__sferror(fp));
|
return (__sferror(fp));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fgetln.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,9 +30,18 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fgetln.c 8.2 (Berkeley) 1/2/94";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
#include "libc_private.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -43,7 +51,7 @@
|
|||||||
* so we add 1 here.
|
* so we add 1 here.
|
||||||
#endif
|
#endif
|
||||||
*/
|
*/
|
||||||
static int
|
int
|
||||||
__slbexpand(FILE *fp, size_t newsize)
|
__slbexpand(FILE *fp, size_t newsize)
|
||||||
{
|
{
|
||||||
void *p;
|
void *p;
|
||||||
@ -51,7 +59,7 @@ __slbexpand(FILE *fp, size_t newsize)
|
|||||||
#ifdef notdef
|
#ifdef notdef
|
||||||
++newsize;
|
++newsize;
|
||||||
#endif
|
#endif
|
||||||
if ((size_t)fp->_lb._size >= newsize)
|
if (fp->_lb._size >= newsize)
|
||||||
return (0);
|
return (0);
|
||||||
if ((p = realloc(fp->_lb._base, newsize)) == NULL)
|
if ((p = realloc(fp->_lb._base, newsize)) == NULL)
|
||||||
return (-1);
|
return (-1);
|
||||||
@ -62,7 +70,7 @@ __slbexpand(FILE *fp, size_t newsize)
|
|||||||
|
|
||||||
/*
|
/*
|
||||||
* Get an input line. The returned pointer often (but not always)
|
* Get an input line. The returned pointer often (but not always)
|
||||||
* points into a stdio buffer. Fgetline does not alter the text of
|
* points into a stdio buffer. Fgetln does not alter the text of
|
||||||
* the returned line (which is thus not a C string because it will
|
* the returned line (which is thus not a C string because it will
|
||||||
* not necessarily end with '\0'), but does allow callers to modify
|
* not necessarily end with '\0'), but does allow callers to modify
|
||||||
* it if they wish. Thus, we set __SMOD in case the caller does.
|
* it if they wish. Thus, we set __SMOD in case the caller does.
|
||||||
@ -71,18 +79,22 @@ char *
|
|||||||
fgetln(FILE *fp, size_t *lenp)
|
fgetln(FILE *fp, size_t *lenp)
|
||||||
{
|
{
|
||||||
unsigned char *p;
|
unsigned char *p;
|
||||||
char *ret;
|
|
||||||
size_t len;
|
size_t len;
|
||||||
size_t off;
|
size_t off;
|
||||||
|
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
|
ORIENT(fp, -1);
|
||||||
/* make sure there is input */
|
/* make sure there is input */
|
||||||
if (fp->_r <= 0 && __srefill(fp))
|
if (fp->_r <= 0 && __srefill(fp)) {
|
||||||
goto error;
|
*lenp = 0;
|
||||||
|
FUNLOCKFILE(fp);
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
|
|
||||||
/* look for a newline in the input */
|
/* look for a newline in the input */
|
||||||
if ((p = memchr((void *)fp->_p, '\n', fp->_r)) != NULL) {
|
if ((p = memchr((void *)fp->_p, '\n', (size_t)fp->_r)) != NULL) {
|
||||||
|
char *ret;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Found one. Flag buffer as modified to keep fseek from
|
* Found one. Flag buffer as modified to keep fseek from
|
||||||
* `optimising' a backward seek, in case the user stomps on
|
* `optimising' a backward seek, in case the user stomps on
|
||||||
@ -103,7 +115,7 @@ fgetln(FILE *fp, size_t *lenp)
|
|||||||
* As a bonus, though, we can leave off the __SMOD.
|
* As a bonus, though, we can leave off the __SMOD.
|
||||||
*
|
*
|
||||||
* OPTIMISTIC is length that we (optimistically) expect will
|
* OPTIMISTIC is length that we (optimistically) expect will
|
||||||
* accommodate the `rest' of the string, on each trip through the
|
* accomodate the `rest' of the string, on each trip through the
|
||||||
* loop below.
|
* loop below.
|
||||||
*/
|
*/
|
||||||
#define OPTIMISTIC 80
|
#define OPTIMISTIC 80
|
||||||
@ -123,7 +135,7 @@ fgetln(FILE *fp, size_t *lenp)
|
|||||||
off = len;
|
off = len;
|
||||||
if (__srefill(fp))
|
if (__srefill(fp))
|
||||||
break; /* EOF or error: return partial line */
|
break; /* EOF or error: return partial line */
|
||||||
if ((p = memchr((void *)fp->_p, '\n', fp->_r)) == NULL)
|
if ((p = memchr((void *)fp->_p, '\n', (size_t)fp->_r)) == NULL)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
/* got it: finish up the line (like code above) */
|
/* got it: finish up the line (like code above) */
|
||||||
@ -139,12 +151,11 @@ fgetln(FILE *fp, size_t *lenp)
|
|||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
*lenp = len;
|
*lenp = len;
|
||||||
ret = (char *)fp->_lb._base;
|
|
||||||
#ifdef notdef
|
#ifdef notdef
|
||||||
ret[len] = '\0';
|
fp->_lb._base[len] = 0;
|
||||||
#endif
|
#endif
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (ret);
|
return ((char *)fp->_lb._base);
|
||||||
|
|
||||||
error:
|
error:
|
||||||
*lenp = 0; /* ??? */
|
*lenp = 0; /* ??? */
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fgetpos.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,13 +30,22 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fgetpos.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
/*
|
|
||||||
* fgetpos: like ftello.
|
|
||||||
*/
|
|
||||||
int
|
int
|
||||||
fgetpos(FILE *fp, fpos_t *pos)
|
fgetpos(FILE * __restrict fp, fpos_t * __restrict pos)
|
||||||
{
|
{
|
||||||
return((*pos = ftello(fp)) == (fpos_t)-1);
|
/*
|
||||||
|
* ftello is thread-safe; no need to lock fp.
|
||||||
|
*/
|
||||||
|
if ((*pos = ftello(fp)) == (fpos_t)-1)
|
||||||
|
return (-1);
|
||||||
|
else
|
||||||
|
return (0);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fgets.c,v 1.10 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,18 +30,29 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fgets.c 8.2 (Berkeley) 12/22/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read at most n-1 characters from the given file.
|
* Read at most n-1 characters from the given file.
|
||||||
* Stop when a newline has been read, or the count runs out.
|
* Stop when a newline has been read, or the count runs out.
|
||||||
* Return first argument, or NULL if no characters were read.
|
* Return first argument, or NULL if no characters were read.
|
||||||
* Do not return NULL if n == 1.
|
|
||||||
*/
|
*/
|
||||||
char *
|
char *
|
||||||
fgets(char *buf, int n, FILE *fp)
|
fgets(buf, n, fp)
|
||||||
|
char *buf;
|
||||||
|
int n;
|
||||||
|
FILE *fp;
|
||||||
{
|
{
|
||||||
size_t len;
|
size_t len;
|
||||||
char *s;
|
char *s;
|
||||||
@ -52,24 +62,24 @@ fgets(char *buf, int n, FILE *fp)
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
|
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
_SET_ORIENTATION(fp, -1);
|
ORIENT(fp, -1);
|
||||||
s = buf;
|
s = buf;
|
||||||
n--; /* leave space for NUL */
|
n--; /* leave space for NUL */
|
||||||
while (n != 0) {
|
while (n != 0) {
|
||||||
/*
|
/*
|
||||||
* If the buffer is empty, refill it.
|
* If the buffer is empty, refill it.
|
||||||
*/
|
*/
|
||||||
if (fp->_r <= 0) {
|
if ((len = fp->_r) <= 0) {
|
||||||
if (__srefill(fp)) {
|
if (__srefill(fp)) {
|
||||||
/* EOF/error: stop with partial or no line */
|
/* EOF/error: stop with partial or no line */
|
||||||
if (s == buf) {
|
if (s == buf) {
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
len = fp->_r;
|
||||||
}
|
}
|
||||||
len = fp->_r;
|
|
||||||
p = fp->_p;
|
p = fp->_p;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -78,7 +88,7 @@ fgets(char *buf, int n, FILE *fp)
|
|||||||
* newline, and stop. Otherwise, copy entire chunk
|
* newline, and stop. Otherwise, copy entire chunk
|
||||||
* and loop.
|
* and loop.
|
||||||
*/
|
*/
|
||||||
if ((int)len > n)
|
if (len > n)
|
||||||
len = n;
|
len = n;
|
||||||
t = memchr((void *)p, '\n', len);
|
t = memchr((void *)p, '\n', len);
|
||||||
if (t != NULL) {
|
if (t != NULL) {
|
||||||
@ -86,7 +96,7 @@ fgets(char *buf, int n, FILE *fp)
|
|||||||
fp->_r -= len;
|
fp->_r -= len;
|
||||||
fp->_p = t;
|
fp->_p = t;
|
||||||
(void)memcpy((void *)s, (void *)p, len);
|
(void)memcpy((void *)s, (void *)p, len);
|
||||||
s[len] = '\0';
|
s[len] = 0;
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (buf);
|
return (buf);
|
||||||
}
|
}
|
||||||
@ -96,7 +106,7 @@ fgets(char *buf, int n, FILE *fp)
|
|||||||
s += len;
|
s += len;
|
||||||
n -= len;
|
n -= len;
|
||||||
}
|
}
|
||||||
*s = '\0';
|
*s = 0;
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (buf);
|
return (buf);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fileno.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,21 +30,35 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
#include "local.h"
|
static char sccsid[] = "@(#)fileno.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* A subroutine version of the macro fileno.
|
|
||||||
*/
|
|
||||||
#undef fileno
|
#undef fileno
|
||||||
|
#undef fileno_unlocked
|
||||||
|
|
||||||
int
|
int
|
||||||
fileno(FILE *fp)
|
fileno(FILE *fp)
|
||||||
{
|
{
|
||||||
int ret;
|
int fd;
|
||||||
|
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
ret = __sfileno(fp);
|
fd = __sfileno(fp);
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (ret);
|
|
||||||
|
return (fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
fileno_unlocked(FILE *fp)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (__sfileno(fp));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: flags.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,19 +30,28 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)flags.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/file.h>
|
#include <sys/file.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <fcntl.h>
|
|
||||||
|
#include "local.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Return the (stdio) flags for a given mode. Store the flags
|
* Return the (stdio) flags for a given mode. Store the flags
|
||||||
* to be passed to an open() syscall through *optr.
|
* to be passed to an _open() syscall through *optr.
|
||||||
* Return 0 on error.
|
* Return 0 on error.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
__sflags(const char *mode, int *optr)
|
__sflags(mode, optr)
|
||||||
|
const char *mode;
|
||||||
|
int *optr;
|
||||||
{
|
{
|
||||||
int ret, m, o;
|
int ret, m, o;
|
||||||
|
|
||||||
@ -72,11 +80,35 @@ __sflags(const char *mode, int *optr)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* [rwa]\+ or [rwa]b\+ means read and write */
|
/* 'b' (binary) is ignored */
|
||||||
if (*mode == '+' || (*mode == 'b' && mode[1] == '+')) {
|
if (*mode == 'b')
|
||||||
|
mode++;
|
||||||
|
|
||||||
|
/* [rwa][b]\+ means read and write */
|
||||||
|
if (*mode == '+') {
|
||||||
|
mode++;
|
||||||
ret = __SRW;
|
ret = __SRW;
|
||||||
m = O_RDWR;
|
m = O_RDWR;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 'b' (binary) can appear here, too -- and is ignored again */
|
||||||
|
if (*mode == 'b')
|
||||||
|
mode++;
|
||||||
|
|
||||||
|
/* 'x' means exclusive (fail if the file exists) */
|
||||||
|
if (*mode == 'x') {
|
||||||
|
mode++;
|
||||||
|
if (m == O_RDONLY) {
|
||||||
|
errno = EINVAL;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
o |= O_EXCL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* set close-on-exec */
|
||||||
|
if (*mode == 'e')
|
||||||
|
o |= O_CLOEXEC;
|
||||||
|
|
||||||
*optr = m | o;
|
*optr = m | o;
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fopen.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,18 +30,28 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#define __USE_BSD
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fopen.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
#include <limits.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
#include <linux/stat.h>
|
|
||||||
|
|
||||||
FILE *
|
FILE *
|
||||||
fopen(const char *file, const char *mode)
|
fopen(file, mode)
|
||||||
|
const char * __restrict file;
|
||||||
|
const char * __restrict mode;
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int f;
|
int f;
|
||||||
@ -52,10 +61,23 @@ fopen(const char *file, const char *mode)
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
if ((fp = __sfp()) == NULL)
|
if ((fp = __sfp()) == NULL)
|
||||||
return (NULL);
|
return (NULL);
|
||||||
if ((f = open(file, oflags, DEFFILEMODE)) < 0) {
|
if ((f = _open(file, oflags, DEFFILEMODE)) < 0) {
|
||||||
fp->_flags = 0; /* release */
|
fp->_flags = 0; /* release */
|
||||||
return (NULL);
|
return (NULL);
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
* File descriptors are a full int, but _file is only a short.
|
||||||
|
* If we get a valid file descriptor that is greater than
|
||||||
|
* SHRT_MAX, then the fd will get sign-extended into an
|
||||||
|
* invalid file descriptor. Handle this case by failing the
|
||||||
|
* open.
|
||||||
|
*/
|
||||||
|
if (f > SHRT_MAX) {
|
||||||
|
fp->_flags = 0; /* release */
|
||||||
|
_close(f);
|
||||||
|
errno = EMFILE;
|
||||||
|
return (NULL);
|
||||||
|
}
|
||||||
fp->_file = f;
|
fp->_file = f;
|
||||||
fp->_flags = flags;
|
fp->_flags = flags;
|
||||||
fp->_cookie = fp;
|
fp->_cookie = fp;
|
||||||
@ -63,7 +85,6 @@ fopen(const char *file, const char *mode)
|
|||||||
fp->_write = __swrite;
|
fp->_write = __swrite;
|
||||||
fp->_seek = __sseek;
|
fp->_seek = __sseek;
|
||||||
fp->_close = __sclose;
|
fp->_close = __sclose;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When opening in append mode, even though we use O_APPEND,
|
* When opening in append mode, even though we use O_APPEND,
|
||||||
* we need to seek to the end so that ftell() gets the right
|
* we need to seek to the end so that ftell() gets the right
|
||||||
@ -73,6 +94,6 @@ fopen(const char *file, const char *mode)
|
|||||||
* fseek and ftell.)
|
* fseek and ftell.)
|
||||||
*/
|
*/
|
||||||
if (oflags & O_APPEND)
|
if (oflags & O_APPEND)
|
||||||
(void) __sseek((void *)fp, (fpos_t)0, SEEK_END);
|
(void)_sseek(fp, (fpos_t)0, SEEK_END);
|
||||||
return (fp);
|
return (fp);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fpurge.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,31 +30,41 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fpurge.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fpurge: like fflush, but without writing anything: leave the
|
* fpurge: like fflush, but without writing anything: leave the
|
||||||
* given FILE's buffer empty.
|
* given FILE's buffer empty.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
fpurge(FILE *fp)
|
fpurge(fp)
|
||||||
|
FILE *fp;
|
||||||
{
|
{
|
||||||
|
int retval;
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
if (!fp->_flags) {
|
if (!fp->_flags) {
|
||||||
FUNLOCKFILE(fp);
|
|
||||||
errno = EBADF;
|
errno = EBADF;
|
||||||
return(EOF);
|
retval = EOF;
|
||||||
|
} else {
|
||||||
|
if (HASUB(fp))
|
||||||
|
FREEUB(fp);
|
||||||
|
fp->_p = fp->_bf._base;
|
||||||
|
fp->_r = 0;
|
||||||
|
fp->_w = fp->_flags & (__SLBF|__SNBF|__SRD) ? 0 : fp->_bf._size;
|
||||||
|
retval = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (HASUB(fp))
|
|
||||||
FREEUB(fp);
|
|
||||||
WCIO_FREE(fp);
|
|
||||||
fp->_p = fp->_bf._base;
|
|
||||||
fp->_r = 0;
|
|
||||||
fp->_w = fp->_flags & (__SLBF|__SNBF) ? 0 : fp->_bf._size;
|
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (0);
|
return (retval);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fputs.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,28 +30,39 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fputs.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "local.h"
|
#include "un-namespace.h"
|
||||||
#include "fvwrite.h"
|
#include "fvwrite.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
#include "local.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write the given string to the given file.
|
* Write the given string to the given file.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
fputs(const char *s, FILE *fp)
|
fputs(s, fp)
|
||||||
|
const char * __restrict s;
|
||||||
|
FILE * __restrict fp;
|
||||||
{
|
{
|
||||||
|
int retval;
|
||||||
struct __suio uio;
|
struct __suio uio;
|
||||||
struct __siov iov;
|
struct __siov iov;
|
||||||
int ret;
|
|
||||||
|
|
||||||
iov.iov_base = (void *)s;
|
iov.iov_base = (void *)s;
|
||||||
iov.iov_len = uio.uio_resid = strlen(s);
|
iov.iov_len = uio.uio_resid = strlen(s);
|
||||||
uio.uio_iov = &iov;
|
uio.uio_iov = &iov;
|
||||||
uio.uio_iovcnt = 1;
|
uio.uio_iovcnt = 1;
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
_SET_ORIENTATION(fp, -1);
|
ORIENT(fp, -1);
|
||||||
ret = __sfvwrite(fp, &uio);
|
retval = __sfvwrite(fp, &uio);
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (ret);
|
return (retval);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fsetpos.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,13 +30,22 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fsetpos.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* fsetpos: like fseeko.
|
* fsetpos: like fseek.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
fsetpos(FILE *iop, const fpos_t *pos)
|
fsetpos(iop, pos)
|
||||||
|
FILE *iop;
|
||||||
|
const fpos_t *pos;
|
||||||
{
|
{
|
||||||
return (fseeko(iop, (off_t)*pos, SEEK_SET));
|
return (fseeko(iop, (off_t)*pos, SEEK_SET));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: funopen.c,v 1.8 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,14 +30,23 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)funopen.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
|
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
FILE *
|
FILE *
|
||||||
funopen(const void *cookie, int (*readfn)(void *, char *, int),
|
funopen(const void *cookie,
|
||||||
|
int (*readfn)(void *, char *, int),
|
||||||
int (*writefn)(void *, const char *, int),
|
int (*writefn)(void *, const char *, int),
|
||||||
fpos_t (*seekfn)(void *, fpos_t, int), int (*closefn)(void *))
|
fpos_t (*seekfn)(void *, fpos_t, int),
|
||||||
|
int (*closefn)(void *))
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int flags;
|
int flags;
|
||||||
@ -59,7 +67,7 @@ funopen(const void *cookie, int (*readfn)(void *, char *, int),
|
|||||||
return (NULL);
|
return (NULL);
|
||||||
fp->_flags = flags;
|
fp->_flags = flags;
|
||||||
fp->_file = -1;
|
fp->_file = -1;
|
||||||
fp->_cookie = (void *)cookie; /* SAFE: cookie not modified */
|
fp->_cookie = (void *)cookie;
|
||||||
fp->_read = readfn;
|
fp->_read = readfn;
|
||||||
fp->_write = writefn;
|
fp->_write = writefn;
|
||||||
fp->_seek = seekfn;
|
fp->_seek = seekfn;
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fwalk.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,23 +30,37 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <errno.h>
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fwalk.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
#include "glue.h"
|
#include "glue.h"
|
||||||
|
|
||||||
int
|
int
|
||||||
_fwalk(int (*function)(FILE *))
|
_fwalk(function)
|
||||||
|
int (*function)(FILE *);
|
||||||
{
|
{
|
||||||
FILE *fp;
|
FILE *fp;
|
||||||
int n, ret;
|
int n, ret;
|
||||||
struct glue *g;
|
struct glue *g;
|
||||||
|
|
||||||
ret = 0;
|
ret = 0;
|
||||||
|
/*
|
||||||
|
* It should be safe to walk the list without locking it;
|
||||||
|
* new nodes are only added to the end and none are ever
|
||||||
|
* removed.
|
||||||
|
*
|
||||||
|
* Avoid locking this list while walking it or else you will
|
||||||
|
* introduce a potential deadlock in [at least] refill.c.
|
||||||
|
*/
|
||||||
for (g = &__sglue; g != NULL; g = g->next)
|
for (g = &__sglue; g != NULL; g = g->next)
|
||||||
for (fp = g->iobs, n = g->niobs; --n >= 0; fp++) {
|
for (fp = g->iobs, n = g->niobs; --n >= 0; fp++)
|
||||||
if ((fp->_flags != 0) && ((fp->_flags & __SIGN) == 0))
|
if ((fp->_flags != 0) && ((fp->_flags & __SIGN) == 0))
|
||||||
ret |= (*function)(fp);
|
ret |= (*function)(fp);
|
||||||
}
|
|
||||||
return (ret);
|
return (ret);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: fwrite.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,36 +30,70 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)fwrite.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
|
#include <errno.h>
|
||||||
|
#include <stdint.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
#include "fvwrite.h"
|
#include "fvwrite.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write `count' objects (each size `size') from memory to the given file.
|
* Write `count' objects (each size `size') from memory to the given file.
|
||||||
* Return the number of whole objects written.
|
* Return the number of whole objects written.
|
||||||
*/
|
*/
|
||||||
size_t
|
size_t
|
||||||
fwrite(const void *buf, size_t size, size_t count, FILE *fp)
|
fwrite(buf, size, count, fp)
|
||||||
|
const void * __restrict buf;
|
||||||
|
size_t size, count;
|
||||||
|
FILE * __restrict fp;
|
||||||
{
|
{
|
||||||
size_t n;
|
size_t n;
|
||||||
struct __suio uio;
|
struct __suio uio;
|
||||||
struct __siov iov;
|
struct __siov iov;
|
||||||
int ret;
|
|
||||||
|
/*
|
||||||
|
* ANSI and SUSv2 require a return value of 0 if size or count are 0.
|
||||||
|
*/
|
||||||
|
if ((count == 0) || (size == 0))
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Check for integer overflow. As an optimization, first check that
|
||||||
|
* at least one of {count, size} is at least 2^16, since if both
|
||||||
|
* values are less than that, their product can't possible overflow
|
||||||
|
* (size_t is always at least 32 bits on FreeBSD).
|
||||||
|
*/
|
||||||
|
if (((count | size) > 0xFFFF) &&
|
||||||
|
(count > SIZE_MAX / size)) {
|
||||||
|
errno = EINVAL;
|
||||||
|
fp->_flags |= __SERR;
|
||||||
|
return (0);
|
||||||
|
}
|
||||||
|
|
||||||
|
n = count * size;
|
||||||
|
|
||||||
iov.iov_base = (void *)buf;
|
iov.iov_base = (void *)buf;
|
||||||
uio.uio_resid = iov.iov_len = n = count * size;
|
uio.uio_resid = iov.iov_len = n;
|
||||||
uio.uio_iov = &iov;
|
uio.uio_iov = &iov;
|
||||||
uio.uio_iovcnt = 1;
|
uio.uio_iovcnt = 1;
|
||||||
|
|
||||||
|
FLOCKFILE(fp);
|
||||||
|
ORIENT(fp, -1);
|
||||||
/*
|
/*
|
||||||
* The usual case is success (__sfvwrite returns 0);
|
* The usual case is success (__sfvwrite returns 0);
|
||||||
* skip the divide if this happens, since divides are
|
* skip the divide if this happens, since divides are
|
||||||
* generally slow and since this occurs whenever size==0.
|
* generally slow and since this occurs whenever size==0.
|
||||||
*/
|
*/
|
||||||
FLOCKFILE(fp);
|
if (__sfvwrite(fp, &uio) != 0)
|
||||||
ret = __sfvwrite(fp, &uio);
|
count = (n - uio.uio_resid) / size;
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
if (ret == 0)
|
return (count);
|
||||||
return (count);
|
|
||||||
return ((n - uio.uio_resid) / size);
|
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: getc.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,32 +30,36 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)getc.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
#include "libc_private.h"
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
/*
|
|
||||||
* A subroutine version of the macro getc_unlocked.
|
|
||||||
*/
|
|
||||||
#undef getc_unlocked
|
|
||||||
|
|
||||||
int
|
|
||||||
getc_unlocked(FILE *fp)
|
|
||||||
{
|
|
||||||
return (__sgetc(fp));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* A subroutine version of the macro getc.
|
|
||||||
*/
|
|
||||||
#undef getc
|
#undef getc
|
||||||
|
#undef getc_unlocked
|
||||||
|
|
||||||
int
|
int
|
||||||
getc(FILE *fp)
|
getc(FILE *fp)
|
||||||
{
|
{
|
||||||
int c;
|
int retval;
|
||||||
|
|
||||||
FLOCKFILE(fp);
|
FLOCKFILE(fp);
|
||||||
c = __sgetc(fp);
|
/* Orientation set by __sgetc() when buffer is empty. */
|
||||||
|
/* ORIENT(fp, -1); */
|
||||||
|
retval = __sgetc(fp);
|
||||||
FUNLOCKFILE(fp);
|
FUNLOCKFILE(fp);
|
||||||
return (c);
|
return (retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
getc_unlocked(FILE *fp)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (__sgetc(fp));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: getchar.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,28 +30,39 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)getchar.c 8.1 (Berkeley) 6/4/93";
|
||||||
/*
|
#endif /* LIBC_SCCS and not lint */
|
||||||
* A subroutine version of the macro getchar_unlocked.
|
#include <sys/cdefs.h>
|
||||||
*/
|
__FBSDID("$FreeBSD$");
|
||||||
#undef getchar_unlocked
|
|
||||||
|
|
||||||
int
|
|
||||||
getchar_unlocked(void)
|
|
||||||
{
|
|
||||||
return (getc_unlocked(stdin));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A subroutine version of the macro getchar.
|
* A subroutine version of the macro getchar.
|
||||||
*/
|
*/
|
||||||
|
#include "namespace.h"
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
|
#include "local.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
#undef getchar
|
#undef getchar
|
||||||
|
#undef getchar_unlocked
|
||||||
|
|
||||||
int
|
int
|
||||||
getchar(void)
|
getchar()
|
||||||
{
|
{
|
||||||
return (getc(stdin));
|
int retval;
|
||||||
|
FLOCKFILE(stdin);
|
||||||
|
/* Orientation set by __sgetc() when buffer is empty. */
|
||||||
|
/* ORIENT(stdin, -1); */
|
||||||
|
retval = __sgetc(stdin);
|
||||||
|
FUNLOCKFILE(stdin);
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
getchar_unlocked(void)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (__sgetc(stdin));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: putc.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,37 +30,38 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
#include <errno.h>
|
static char sccsid[] = "@(#)putc.c 8.1 (Berkeley) 6/4/93";
|
||||||
#include "local.h"
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
/*
|
#include "namespace.h"
|
||||||
* A subroutine version of the macro putc_unlocked.
|
#include <stdio.h>
|
||||||
*/
|
#include "un-namespace.h"
|
||||||
|
#include "local.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
|
#undef putc
|
||||||
#undef putc_unlocked
|
#undef putc_unlocked
|
||||||
|
|
||||||
int
|
int
|
||||||
putc_unlocked(int c, FILE *fp)
|
putc(c, fp)
|
||||||
|
int c;
|
||||||
|
FILE *fp;
|
||||||
{
|
{
|
||||||
if (cantwrite(fp)) {
|
int retval;
|
||||||
errno = EBADF;
|
FLOCKFILE(fp);
|
||||||
return (EOF);
|
/* Orientation set by __sputc() when buffer is full. */
|
||||||
}
|
/* ORIENT(fp, -1); */
|
||||||
return (__sputc(c, fp));
|
retval = __sputc(c, fp);
|
||||||
|
FUNLOCKFILE(fp);
|
||||||
|
return (retval);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
|
||||||
* A subroutine version of the macro putc.
|
|
||||||
*/
|
|
||||||
#undef putc
|
|
||||||
|
|
||||||
int
|
int
|
||||||
putc(int c, FILE *fp)
|
putc_unlocked(int ch, FILE *fp)
|
||||||
{
|
{
|
||||||
int ret;
|
|
||||||
|
|
||||||
FLOCKFILE(fp);
|
return (__sputc(ch, fp));
|
||||||
ret = putc_unlocked(c, fp);
|
|
||||||
FUNLOCKFILE(fp);
|
|
||||||
return (ret);
|
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: putchar.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,29 +30,42 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)putchar.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
#undef putchar_unlocked
|
#include "local.h"
|
||||||
/*
|
#include "libc_private.h"
|
||||||
* A subrouting version of the macro putchar_unlocked
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
putchar_unlocked(int c)
|
|
||||||
{
|
|
||||||
FILE *so = stdout;
|
|
||||||
|
|
||||||
return (putc_unlocked(c, so));
|
|
||||||
}
|
|
||||||
|
|
||||||
#undef putchar
|
#undef putchar
|
||||||
|
#undef putchar_unlocked
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A subroutine version of the macro putchar
|
* A subroutine version of the macro putchar
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
putchar(int c)
|
putchar(c)
|
||||||
|
int c;
|
||||||
{
|
{
|
||||||
|
int retval;
|
||||||
FILE *so = stdout;
|
FILE *so = stdout;
|
||||||
|
|
||||||
return (putc(c, so));
|
FLOCKFILE(so);
|
||||||
|
/* Orientation set by __sputc() when buffer is full. */
|
||||||
|
/* ORIENT(so, -1); */
|
||||||
|
retval = __sputc(c, so);
|
||||||
|
FUNLOCKFILE(so);
|
||||||
|
return (retval);
|
||||||
|
}
|
||||||
|
|
||||||
|
int
|
||||||
|
putchar_unlocked(int ch)
|
||||||
|
{
|
||||||
|
|
||||||
|
return (__sputc(ch, stdout));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: puts.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,21 +30,31 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)puts.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "local.h"
|
#include "un-namespace.h"
|
||||||
#include "fvwrite.h"
|
#include "fvwrite.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
#include "local.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Write the given string to stdout, appending a newline.
|
* Write the given string to stdout, appending a newline.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
puts(const char *s)
|
puts(s)
|
||||||
|
char const *s;
|
||||||
{
|
{
|
||||||
|
int retval;
|
||||||
size_t c = strlen(s);
|
size_t c = strlen(s);
|
||||||
struct __suio uio;
|
struct __suio uio;
|
||||||
struct __siov iov[2];
|
struct __siov iov[2];
|
||||||
int ret;
|
|
||||||
|
|
||||||
iov[0].iov_base = (void *)s;
|
iov[0].iov_base = (void *)s;
|
||||||
iov[0].iov_len = c;
|
iov[0].iov_len = c;
|
||||||
@ -55,7 +64,8 @@ puts(const char *s)
|
|||||||
uio.uio_iov = &iov[0];
|
uio.uio_iov = &iov[0];
|
||||||
uio.uio_iovcnt = 2;
|
uio.uio_iovcnt = 2;
|
||||||
FLOCKFILE(stdout);
|
FLOCKFILE(stdout);
|
||||||
ret = __sfvwrite(stdout, &uio);
|
ORIENT(stdout, -1);
|
||||||
|
retval = __sfvwrite(stdout, &uio) ? EOF : '\n';
|
||||||
FUNLOCKFILE(stdout);
|
FUNLOCKFILE(stdout);
|
||||||
return (ret ? EOF : '\n');
|
return (retval);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: putw.c,v 1.6 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,12 +30,24 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)putw.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include "namespace.h"
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include "un-namespace.h"
|
||||||
#include "fvwrite.h"
|
#include "fvwrite.h"
|
||||||
|
#include "libc_private.h"
|
||||||
|
|
||||||
int
|
int
|
||||||
putw(int w, FILE *fp)
|
putw(w, fp)
|
||||||
|
int w;
|
||||||
|
FILE *fp;
|
||||||
{
|
{
|
||||||
|
int retval;
|
||||||
struct __suio uio;
|
struct __suio uio;
|
||||||
struct __siov iov;
|
struct __siov iov;
|
||||||
|
|
||||||
@ -44,5 +55,8 @@ putw(int w, FILE *fp)
|
|||||||
iov.iov_len = uio.uio_resid = sizeof(w);
|
iov.iov_len = uio.uio_resid = sizeof(w);
|
||||||
uio.uio_iov = &iov;
|
uio.uio_iov = &iov;
|
||||||
uio.uio_iovcnt = 1;
|
uio.uio_iovcnt = 1;
|
||||||
return (__sfvwrite(fp, &uio));
|
FLOCKFILE(fp);
|
||||||
|
retval = __sfvwrite(fp, &uio);
|
||||||
|
FUNLOCKFILE(fp);
|
||||||
|
return (retval);
|
||||||
}
|
}
|
@ -1,5 +1,3 @@
|
|||||||
/* $OpenBSD: remove.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -15,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -32,18 +30,26 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
#include <unistd.h>
|
static char sccsid[] = "@(#)remove.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
remove(const char *file)
|
remove(file)
|
||||||
|
const char *file;
|
||||||
{
|
{
|
||||||
struct stat st;
|
struct stat sb;
|
||||||
|
|
||||||
if (lstat(file, &st) < 0)
|
if (lstat(file, &sb) < 0)
|
||||||
return (-1);
|
return (-1);
|
||||||
if (S_ISDIR(st.st_mode))
|
if (S_ISDIR(sb.st_mode))
|
||||||
return (rmdir(file));
|
return (rmdir(file));
|
||||||
return (unlink(file));
|
return (unlink(file));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: rget.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,6 +30,12 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)rget.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
@ -42,7 +47,6 @@
|
|||||||
int
|
int
|
||||||
__srget(FILE *fp)
|
__srget(FILE *fp)
|
||||||
{
|
{
|
||||||
_SET_ORIENTATION(fp, -1);
|
|
||||||
if (__srefill(fp) == 0) {
|
if (__srefill(fp) == 0) {
|
||||||
fp->_r--;
|
fp->_r--;
|
||||||
return (*fp->_p++);
|
return (*fp->_p++);
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: setbuf.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,11 +30,17 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)setbuf.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
setbuf(FILE *fp, char *buf)
|
setbuf(FILE * __restrict fp, char * __restrict buf)
|
||||||
{
|
{
|
||||||
(void) setvbuf(fp, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
|
(void) setvbuf(fp, buf, buf ? _IOFBF : _IONBF, BUFSIZ);
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: setbuffer.c,v 1.5 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,20 +30,30 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)setbuffer.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
|
||||||
void
|
void
|
||||||
setbuffer(FILE *fp, char *buf, int size)
|
setbuffer(fp, buf, size)
|
||||||
|
FILE *fp;
|
||||||
|
char *buf;
|
||||||
|
int size;
|
||||||
{
|
{
|
||||||
|
|
||||||
(void)setvbuf(fp, buf, buf ? _IOFBF : _IONBF, size);
|
(void)setvbuf(fp, buf, buf ? _IOFBF : _IONBF, (size_t)size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* set line buffering
|
* set line buffering
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
setlinebuf(FILE *fp)
|
setlinebuf(fp)
|
||||||
|
FILE *fp;
|
||||||
{
|
{
|
||||||
|
|
||||||
return (setvbuf(fp, (char *)NULL, _IOLBF, (size_t)0));
|
return (setvbuf(fp, (char *)NULL, _IOLBF, (size_t)0));
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: tempnam.c,v 1.14 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 1988, 1993
|
* Copyright (c) 1988, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -11,7 +10,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -28,6 +27,12 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)tempnam.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <sys/param.h>
|
#include <sys/param.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -42,7 +47,8 @@ __warn_references(tempnam,
|
|||||||
extern char *_mktemp(char *);
|
extern char *_mktemp(char *);
|
||||||
|
|
||||||
char *
|
char *
|
||||||
tempnam(const char *dir, const char *pfx)
|
tempnam(dir, pfx)
|
||||||
|
const char *dir, *pfx;
|
||||||
{
|
{
|
||||||
int sverrno;
|
int sverrno;
|
||||||
char *f, *name;
|
char *f, *name;
|
||||||
@ -54,26 +60,26 @@ tempnam(const char *dir, const char *pfx)
|
|||||||
pfx = "tmp.";
|
pfx = "tmp.";
|
||||||
|
|
||||||
if (issetugid() == 0 && (f = getenv("TMPDIR"))) {
|
if (issetugid() == 0 && (f = getenv("TMPDIR"))) {
|
||||||
(void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXXXXXX", f,
|
(void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
|
||||||
*(f + strlen(f) - 1) == '/'? "": "/", pfx);
|
*(f + strlen(f) - 1) == '/'? "": "/", pfx);
|
||||||
if ((f = _mktemp(name)))
|
if ((f = _mktemp(name)))
|
||||||
return(f);
|
return(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((f = (char *)dir)) {
|
if ((f = (char *)dir)) {
|
||||||
(void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXXXXXX", f,
|
(void)snprintf(name, MAXPATHLEN, "%s%s%sXXXXXX", f,
|
||||||
*(f + strlen(f) - 1) == '/'? "": "/", pfx);
|
*(f + strlen(f) - 1) == '/'? "": "/", pfx);
|
||||||
if ((f = _mktemp(name)))
|
if ((f = _mktemp(name)))
|
||||||
return(f);
|
return(f);
|
||||||
}
|
}
|
||||||
|
|
||||||
f = P_tmpdir;
|
f = P_tmpdir;
|
||||||
(void)snprintf(name, MAXPATHLEN, "%s%sXXXXXXXXX", f, pfx);
|
(void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
|
||||||
if ((f = _mktemp(name)))
|
if ((f = _mktemp(name)))
|
||||||
return(f);
|
return(f);
|
||||||
|
|
||||||
f = _PATH_TMP;
|
f = _PATH_TMP;
|
||||||
(void)snprintf(name, MAXPATHLEN, "%s%sXXXXXXXXX", f, pfx);
|
(void)snprintf(name, MAXPATHLEN, "%s%sXXXXXX", f, pfx);
|
||||||
if ((f = _mktemp(name)))
|
if ((f = _mktemp(name)))
|
||||||
return(f);
|
return(f);
|
||||||
|
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: tmpnam.c,v 1.10 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993, 1994
|
* Copyright (c) 1990, 1993, 1994
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,6 +30,12 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)tmpnam.c 8.3 (Berkeley) 3/28/94";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
@ -42,14 +47,15 @@ __warn_references(tmpnam,
|
|||||||
extern char *_mktemp(char *);
|
extern char *_mktemp(char *);
|
||||||
|
|
||||||
char *
|
char *
|
||||||
tmpnam(char *s)
|
tmpnam(s)
|
||||||
|
char *s;
|
||||||
{
|
{
|
||||||
static u_long tmpcount;
|
static u_long tmpcount;
|
||||||
static char buf[L_tmpnam];
|
static char buf[L_tmpnam];
|
||||||
|
|
||||||
if (s == NULL)
|
if (s == NULL)
|
||||||
s = buf;
|
s = buf;
|
||||||
(void)snprintf(s, L_tmpnam, "%stmp.%lu.XXXXXXXXX", P_tmpdir, tmpcount);
|
(void)snprintf(s, L_tmpnam, "%stmp.%lu.XXXXXX", P_tmpdir, tmpcount);
|
||||||
++tmpcount;
|
++tmpcount;
|
||||||
return (_mktemp(s));
|
return (_mktemp(s));
|
||||||
}
|
}
|
@ -1,4 +1,3 @@
|
|||||||
/* $OpenBSD: wsetup.c,v 1.7 2005/08/08 08:05:36 espie Exp $ */
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 1990, 1993
|
* Copyright (c) 1990, 1993
|
||||||
* The Regents of the University of California. All rights reserved.
|
* The Regents of the University of California. All rights reserved.
|
||||||
@ -14,7 +13,7 @@
|
|||||||
* 2. Redistributions in binary form must reproduce the above copyright
|
* 2. Redistributions in binary form must reproduce the above copyright
|
||||||
* notice, this list of conditions and the following disclaimer in the
|
* notice, this list of conditions and the following disclaimer in the
|
||||||
* documentation and/or other materials provided with the distribution.
|
* documentation and/or other materials provided with the distribution.
|
||||||
* 3. Neither the name of the University nor the names of its contributors
|
* 4. Neither the name of the University nor the names of its contributors
|
||||||
* may be used to endorse or promote products derived from this software
|
* may be used to endorse or promote products derived from this software
|
||||||
* without specific prior written permission.
|
* without specific prior written permission.
|
||||||
*
|
*
|
||||||
@ -31,6 +30,13 @@
|
|||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#if defined(LIBC_SCCS) && !defined(lint)
|
||||||
|
static char sccsid[] = "@(#)wsetup.c 8.1 (Berkeley) 6/4/93";
|
||||||
|
#endif /* LIBC_SCCS and not lint */
|
||||||
|
#include <sys/cdefs.h>
|
||||||
|
__FBSDID("$FreeBSD$");
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "local.h"
|
#include "local.h"
|
||||||
@ -38,10 +44,11 @@
|
|||||||
/*
|
/*
|
||||||
* Various output routines call wsetup to be sure it is safe to write,
|
* Various output routines call wsetup to be sure it is safe to write,
|
||||||
* because either _flags does not include __SWR, or _buf is NULL.
|
* because either _flags does not include __SWR, or _buf is NULL.
|
||||||
* _wsetup returns 0 if OK to write, nonzero otherwise.
|
* _wsetup returns 0 if OK to write; otherwise, it returns EOF and sets errno.
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
__swsetup(FILE *fp)
|
__swsetup(fp)
|
||||||
|
FILE *fp;
|
||||||
{
|
{
|
||||||
/* make sure stdio is set up */
|
/* make sure stdio is set up */
|
||||||
if (!__sdidinit)
|
if (!__sdidinit)
|
||||||
@ -51,8 +58,11 @@ __swsetup(FILE *fp)
|
|||||||
* If we are not writing, we had better be reading and writing.
|
* If we are not writing, we had better be reading and writing.
|
||||||
*/
|
*/
|
||||||
if ((fp->_flags & __SWR) == 0) {
|
if ((fp->_flags & __SWR) == 0) {
|
||||||
if ((fp->_flags & __SRW) == 0)
|
if ((fp->_flags & __SRW) == 0) {
|
||||||
|
errno = EBADF;
|
||||||
|
fp->_flags |= __SERR;
|
||||||
return (EOF);
|
return (EOF);
|
||||||
|
}
|
||||||
if (fp->_flags & __SRD) {
|
if (fp->_flags & __SRD) {
|
||||||
/* clobber any ungetc data */
|
/* clobber any ungetc data */
|
||||||
if (HASUB(fp))
|
if (HASUB(fp))
|
||||||
@ -67,11 +77,8 @@ __swsetup(FILE *fp)
|
|||||||
/*
|
/*
|
||||||
* Make a buffer if necessary, then set _w.
|
* Make a buffer if necessary, then set _w.
|
||||||
*/
|
*/
|
||||||
if (fp->_bf._base == NULL) {
|
if (fp->_bf._base == NULL)
|
||||||
if ((fp->_flags & (__SSTR | __SALC)) == __SSTR)
|
|
||||||
return (EOF);
|
|
||||||
__smakebuf(fp);
|
__smakebuf(fp);
|
||||||
}
|
|
||||||
if (fp->_flags & __SLBF) {
|
if (fp->_flags & __SLBF) {
|
||||||
/*
|
/*
|
||||||
* It is line buffered, so make _lbfsize be -_bufsize
|
* It is line buffered, so make _lbfsize be -_bufsize
|
28
libc/upstream-freebsd/libc_private.h
Normal file
28
libc/upstream-freebsd/libc_private.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _BIONIC_FREEBSD_LIBC_PRIVATE_H_included
|
||||||
|
#define _BIONIC_FREEBSD_LIBC_PRIVATE_H_included
|
||||||
|
|
||||||
|
#define FLOCKFILE(fp) do { if (__isthreaded) flockfile(fp); } while (0)
|
||||||
|
#define FUNLOCKFILE(fp) do { if (__isthreaded) funlockfile(fp); } while (0)
|
||||||
|
|
||||||
|
#define STDIO_THREAD_LOCK() /* TODO: until we have the FreeBSD findfp.c, this is useless. */
|
||||||
|
#define STDIO_THREAD_UNLOCK() /* TODO: until we have the FreeBSD findfp.c, this is useless. */
|
||||||
|
|
||||||
|
#define ORIENT(fp, o) /* Only needed for wide-character stream support. */
|
||||||
|
|
||||||
|
#endif
|
22
libc/upstream-freebsd/spinlock.h
Normal file
22
libc/upstream-freebsd/spinlock.h
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2013 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _BIONIC_FREEBSD_SPINLOCK_H_included
|
||||||
|
#define _BIONIC_FREEBSD_SPINLOCK_H_included
|
||||||
|
|
||||||
|
/* TODO: until we have the FreeBSD findfp.c, this is useless. */
|
||||||
|
|
||||||
|
#endif
|
@ -193,3 +193,21 @@ TEST(stdio, popen) {
|
|||||||
|
|
||||||
ASSERT_EQ(0, pclose(fp));
|
ASSERT_EQ(0, pclose(fp));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
TEST(stdio, getc) {
|
||||||
|
FILE* fp = fopen("/proc/version", "r");
|
||||||
|
ASSERT_TRUE(fp != NULL);
|
||||||
|
ASSERT_EQ('L', getc(fp));
|
||||||
|
ASSERT_EQ('i', getc(fp));
|
||||||
|
ASSERT_EQ('n', getc(fp));
|
||||||
|
ASSERT_EQ('u', getc(fp));
|
||||||
|
ASSERT_EQ('x', getc(fp));
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
|
||||||
|
TEST(stdio, putc) {
|
||||||
|
FILE* fp = fopen("/proc/version", "r");
|
||||||
|
ASSERT_TRUE(fp != NULL);
|
||||||
|
ASSERT_EQ(EOF, putc('x', fp));
|
||||||
|
fclose(fp);
|
||||||
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user