mirror of
git://sourceware.org/git/glibc.git
synced 2025-01-24 12:25:35 +08:00
Initial revision
This commit is contained in:
parent
a1106e3b5e
commit
11ab92947e
54
bare/Makefile
Normal file
54
bare/Makefile
Normal file
@ -0,0 +1,54 @@
|
||||
# Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
# Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
|
||||
# On-Line Applications Research Corporation.
|
||||
#
|
||||
# This file is part of the GNU C Library.
|
||||
#
|
||||
# The GNU C Library is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Library General Public License as
|
||||
# published by the Free Software Foundation; either version 2 of the
|
||||
# License, or (at your option) any later version.
|
||||
#
|
||||
# The GNU C Library is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
# Library General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Library General Public
|
||||
# License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
# not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
# Cambridge, MA 02139, USA.
|
||||
|
||||
subdir := bare
|
||||
|
||||
bare-routines := brdinit console strtsupp
|
||||
extra-objs = $(bare-routines:%=%.o)
|
||||
distribute = $(bare-routines:%=%.c)
|
||||
|
||||
install-lib = lib$(config-vendor).a
|
||||
|
||||
include ../Rules
|
||||
|
||||
#
|
||||
# For bare targets, the $(config-vendor) is the name of the board.
|
||||
# We will place the board dependent code ONLY in a library which
|
||||
# is board dependent. This way many target boards can share a
|
||||
# single libc.a. To resolve all symbols and successfully link
|
||||
# a program, the application must link against libc.a and libMY_TARGET.a.
|
||||
# For example, the target specific library for the Motorola MVME135
|
||||
# board will be named libmvme135.a. To link a program for the
|
||||
# MVME135, one must link against -lc and -lmvme135.
|
||||
#
|
||||
|
||||
lib: $(objpfx)lib$(config-vendor).a
|
||||
|
||||
$(objpfx)lib$(config-vendor).a: $(bare-routines:%=$(objpfx)%.o)
|
||||
# This library is small enough that it's simplest to recreate the archive
|
||||
# from scratch each time.
|
||||
rm -f $@
|
||||
ifdef objdir
|
||||
cd $(objdir); $(AR) cq$(verbose) $@ $(^:$(objpfx)%=%)
|
||||
else
|
||||
$(AR) cq$(verbose) $@ $^
|
||||
endif
|
||||
$(RANLIB) $@
|
2
sysdeps/i960/Implies
Normal file
2
sysdeps/i960/Implies
Normal file
@ -0,0 +1,2 @@
|
||||
# i960 family uses IEEE 754 floating point.
|
||||
ieee754
|
43
sysdeps/i960/ffs.c
Normal file
43
sysdeps/i960/ffs.c
Normal file
@ -0,0 +1,43 @@
|
||||
/* ffs -- find first set bit in a word, counted from least significant end.
|
||||
For i960 Core architecture
|
||||
Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <string.h>
|
||||
|
||||
#undef ffs
|
||||
|
||||
#if defined (__GNUC__) && defined (__i960__)
|
||||
|
||||
int
|
||||
DEFUN(ffs, (x), int x)
|
||||
{
|
||||
int cnt;
|
||||
|
||||
asm("scanbit %1,%0" : "=d" (cnt) : "rm" (x & -x));
|
||||
|
||||
return cnt;
|
||||
}
|
||||
|
||||
#else
|
||||
|
||||
#include <sysdeps/generic/ffs.c>
|
||||
|
||||
#endif
|
4
sysdeps/standalone/Subdirs
Normal file
4
sysdeps/standalone/Subdirs
Normal file
@ -0,0 +1,4 @@
|
||||
# The `bare' subdirectory defines some structure for a target-specific
|
||||
# library of functions which are actually implemented in
|
||||
# sysdeps/standalone/CPU/TARGET.
|
||||
bare
|
68
sysdeps/standalone/brk.c
Normal file
68
sysdeps/standalone/brk.c
Normal file
@ -0,0 +1,68 @@
|
||||
/* Copyright (C) 1991, 1994 Free Software Foundation, Inc.
|
||||
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <stdlib.h>
|
||||
|
||||
PTR __curbrk;
|
||||
PTR __rorig;
|
||||
PTR __rlimit;
|
||||
|
||||
int
|
||||
DEFUN(__brk, (inaddr), PTR inaddr)
|
||||
{
|
||||
|
||||
if ( ( (void *)inaddr > (void *)__rlimit ) ||
|
||||
( (void *)inaddr < (void *)__rorig ) )
|
||||
return -1;
|
||||
|
||||
__curbrk = inaddr;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Initialization Code for Memory Allocation */
|
||||
|
||||
PTR __C_heap_start;
|
||||
int __C_heap_size;
|
||||
|
||||
#ifdef HAVE_GNU_LD
|
||||
static
|
||||
#endif
|
||||
void
|
||||
DEFUN(__NONE_set_memvals, (argc, argv, envp),
|
||||
int argc AND char **argv AND char **envp)
|
||||
{
|
||||
|
||||
__rorig =
|
||||
__curbrk = __C_heap_start;
|
||||
__rlimit = __curbrk + __C_heap_size;
|
||||
|
||||
(void) &__NONE_set_memvals; /* Avoid "defined but not used" warning. */
|
||||
}
|
||||
|
||||
#ifdef HAVE_GNU_LD
|
||||
|
||||
#include <gnu-stabs.h>
|
||||
|
||||
text_set_element (__libc_subinit, __NONE_set_memvals);
|
||||
|
||||
#endif
|
||||
|
42
sysdeps/standalone/close.c
Normal file
42
sysdeps/standalone/close.c
Normal file
@ -0,0 +1,42 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#include <stdio_lim.h>
|
||||
#include "filedesc.h"
|
||||
|
||||
/* Close the file descriptor FD. */
|
||||
int
|
||||
DEFUN(__close, (fd), int fd)
|
||||
{
|
||||
if ( !__FD_Is_valid( fd ) || !__FD_Table[ fd ].in_use )
|
||||
{
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
__FD_Table[ fd ].in_use = 0;
|
||||
return 0;
|
||||
}
|
||||
|
48
sysdeps/standalone/filedesc.h
Normal file
48
sysdeps/standalone/filedesc.h
Normal file
@ -0,0 +1,48 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
/*
|
||||
* This is the file descriptor used by the no OS implementation
|
||||
* of __open, __read, __write, and __close.
|
||||
*/
|
||||
|
||||
#ifndef __FILEDESC_h
|
||||
#define __FILEDESC_h
|
||||
|
||||
#include <stdio_lim.h>
|
||||
|
||||
#ifndef __DECLARE_FILE_DESCRIPTORS__
|
||||
#define FILEDESC_EXTERN extern
|
||||
#else
|
||||
#define FILEDESC_EXTERN
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
int in_use; /* 1 if in use, 0 otherwise */
|
||||
int flags; /* Flags from open */
|
||||
} __no_os_file_descriptor;
|
||||
|
||||
#define __FD_Is_valid( _fd ) \
|
||||
( (_fd) >= 0 && (_fd) < FOPEN_MAX )
|
||||
|
||||
FILEDESC_EXTERN __no_os_file_descriptor __FD_Table[ FOPEN_MAX ];
|
||||
|
||||
#endif
|
124
sysdeps/standalone/open.c
Normal file
124
sysdeps/standalone/open.c
Normal file
@ -0,0 +1,124 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <fcntl.h>
|
||||
#include <stdarg.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdio_lim.h>
|
||||
#include <unistd.h>
|
||||
|
||||
#define __DECLARE_FILE_DESCRIPTORS__
|
||||
|
||||
#include "filedesc.h"
|
||||
|
||||
/* Open FILE with access OFLAG. If OFLAG includes O_CREAT,
|
||||
a third argument is the file protection. */
|
||||
int
|
||||
DEFUN(__open, (file, oflag), CONST char *file AND int oflag DOTS)
|
||||
{
|
||||
int mode;
|
||||
int newfd;
|
||||
int index;
|
||||
|
||||
if (file == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (oflag & O_CREAT)
|
||||
{
|
||||
va_list arg;
|
||||
va_start(arg, oflag);
|
||||
mode = va_arg(arg, int);
|
||||
va_end(arg);
|
||||
}
|
||||
|
||||
/*
|
||||
* Find an open slot.
|
||||
*/
|
||||
|
||||
newfd = -1;
|
||||
|
||||
for ( index=0 ; index< FOPEN_MAX ; index++ )
|
||||
if ( !__FD_Table[ index ].in_use ) {
|
||||
newfd = index;
|
||||
break;
|
||||
}
|
||||
|
||||
if ( newfd == -1 ) {
|
||||
errno = ENFILE;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* Initialize the open slot
|
||||
*/
|
||||
|
||||
__FD_Table[ newfd ].in_use = 1;
|
||||
__FD_Table[ newfd ].flags = oflag;
|
||||
|
||||
return newfd;
|
||||
}
|
||||
|
||||
/* Initialization Code for Console I/O */
|
||||
|
||||
#ifdef HAVE_GNU_LD
|
||||
static
|
||||
#endif
|
||||
void
|
||||
DEFUN(__NONE_init_console_io, (argc, argv, envp),
|
||||
int argc AND char **argv AND char **envp)
|
||||
{
|
||||
int index;
|
||||
|
||||
for ( index=0 ; index< FOPEN_MAX ; index++ )
|
||||
__FD_Table[ index ].in_use = 0;
|
||||
|
||||
stdin = fopen( "", "r" );
|
||||
|
||||
stdout = fopen( "", "w" );
|
||||
|
||||
stderr = fopen( "", "w" );
|
||||
|
||||
/*
|
||||
* Line buffer the standard input and output and use no buffering for
|
||||
* standard error.
|
||||
*/
|
||||
|
||||
setvbuf( stdin, NULL, _IOLBF, BUFSIZ );
|
||||
setvbuf( stdout, NULL, _IOLBF, BUFSIZ );
|
||||
setvbuf( stderr, NULL, _IONBF, BUFSIZ );
|
||||
|
||||
(void) &__NONE_init_console_io; /* Avoid "defined but not used" warning. */
|
||||
}
|
||||
|
||||
#ifdef HAVE_GNU_LD
|
||||
|
||||
#include <gnu-stabs.h>
|
||||
|
||||
text_set_element (__libc_subinit, __NONE_init_console_io);
|
||||
|
||||
#endif
|
85
sysdeps/standalone/read.c
Normal file
85
sysdeps/standalone/read.c
Normal file
@ -0,0 +1,85 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "filedesc.h"
|
||||
#include <fcntl.h>
|
||||
#include <standalone.h>
|
||||
|
||||
/* Read NBYTES into BUF from FD. Return the number read or -1. */
|
||||
ssize_t
|
||||
DEFUN(__read, (fd, buf, nbytes),
|
||||
int fd AND PTR buf AND size_t nbytes)
|
||||
{
|
||||
char *buffer = (char *) buf;
|
||||
int data;
|
||||
int poll;
|
||||
|
||||
errno = 0;
|
||||
|
||||
if (nbytes == 0)
|
||||
return 0;
|
||||
|
||||
if ( !__FD_Is_valid( fd ) || !__FD_Table[ fd ].in_use )
|
||||
{
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
if (buf == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( __FD_Table[ fd ].flags & O_WRONLY ) /* is it write only? */
|
||||
{
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/* If this is a non-blocking fd, then we want to poll the console. */
|
||||
|
||||
poll = ( __FD_Table[ fd ].flags & O_NONBLOCK ) ? 1 : 0;
|
||||
|
||||
/* Read a single character. This is a cheap way to insure that the
|
||||
upper layers get every character because _Console_Getc can't timeout
|
||||
or otherwise know when to stop. */
|
||||
|
||||
|
||||
data = _Console_Getc(poll);
|
||||
|
||||
if ( data == -1 ) /* if no data return */
|
||||
return -1;
|
||||
|
||||
(void) _Console_Putc(data); /* echo the character */
|
||||
|
||||
if ( data == '\r' ) { /* translate CR -> CR/LF */
|
||||
(void) _Console_Putc('\n');
|
||||
data = '\n';
|
||||
}
|
||||
|
||||
*buffer = data;
|
||||
return 1;
|
||||
}
|
32
sysdeps/standalone/standalone.h
Normal file
32
sysdeps/standalone/standalone.h
Normal file
@ -0,0 +1,32 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Contributed by Joel Sherrill (jsherril@redstone-emh2.army.mil),
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#ifndef _STANDALONE_H
|
||||
#define _STANDALONE_H
|
||||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
extern void _Board_Initialize __PP ((void));
|
||||
|
||||
extern int _Console_Putc __P ((char c));
|
||||
extern int _Console_Getc __P ((int poll));
|
||||
|
||||
#endif
|
27
sysdeps/standalone/stdio_lim.h
Normal file
27
sysdeps/standalone/stdio_lim.h
Normal file
@ -0,0 +1,27 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#define L_tmpnam 1
|
||||
#define TMPMAX 0
|
||||
#define L_ctermid 1
|
||||
#define L_cuserid 1
|
||||
#define FOPEN_MAX 16
|
||||
#define FILENAME_MAX 14
|
72
sysdeps/standalone/write.c
Normal file
72
sysdeps/standalone/write.c
Normal file
@ -0,0 +1,72 @@
|
||||
/* Copyright (C) 1994 Free Software Foundation, Inc.
|
||||
Ported to standalone by Joel Sherrill jsherril@redstone-emh2.army.mil,
|
||||
On-Line Applications Research Corporation.
|
||||
|
||||
This file is part of the GNU C Library.
|
||||
|
||||
The GNU C Library is free software; you can redistribute it and/or
|
||||
modify it under the terms of the GNU Library General Public License as
|
||||
published by the Free Software Foundation; either version 2 of the
|
||||
License, or (at your option) any later version.
|
||||
|
||||
The GNU C Library is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
Library General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU Library General Public
|
||||
License along with the GNU C Library; see the file COPYING.LIB. If
|
||||
not, write to the Free Software Foundation, Inc., 675 Mass Ave,
|
||||
Cambridge, MA 02139, USA. */
|
||||
|
||||
#include <ansidecl.h>
|
||||
#include <sysdep.h>
|
||||
#include <errno.h>
|
||||
#include <unistd.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include "filedesc.h"
|
||||
#include <fcntl.h>
|
||||
#include <standalone.h>
|
||||
|
||||
/* Write NBYTES of BUF to FD. Return the number written, or -1. */
|
||||
ssize_t
|
||||
DEFUN(__write, (fd, buf, nbytes),
|
||||
int fd AND CONST PTR buf AND size_t nbytes)
|
||||
{
|
||||
int count;
|
||||
CONST char *data = buf;
|
||||
|
||||
if (nbytes == 0)
|
||||
return 0;
|
||||
if ( !__FD_Is_valid( fd ) || !__FD_Table[ fd ].in_use )
|
||||
{
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
if (buf == NULL)
|
||||
{
|
||||
errno = EINVAL;
|
||||
return -1;
|
||||
}
|
||||
|
||||
if ( !(__FD_Table[ fd ].flags & (O_WRONLY|O_RDWR)) ) /* is it writeable? */
|
||||
{
|
||||
errno = EBADF;
|
||||
return -1;
|
||||
}
|
||||
|
||||
/*
|
||||
* All open file descriptors are mapped to the console.
|
||||
*/
|
||||
|
||||
for ( count=0 ; count != nbytes ; count++ ) {
|
||||
if ( _Console_Putc(data[ count ]) == -1 )
|
||||
return -1;
|
||||
if ( data[count] == '\n' && _Console_Putc('\r') == -1 )
|
||||
return -1;
|
||||
}
|
||||
|
||||
return count;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user