comparison packages/language/c/libc/current/src/stdio/input/gets.cxx @ 0:3111d98ba7b3 ecos-v1_1-release

Initial commit of eCos version 1.1
author jlarmour
date Tue, 11 May 1999 11:16:07 +0000
parents
children 443894e2e912
comparison
equal deleted inserted replaced
-1:000000000000 0:3111d98ba7b3
1 //===========================================================================
2 //
3 // gets.cxx
4 //
5 // ANSI Stdio gets() function
6 //
7 //===========================================================================
8 //####COPYRIGHTBEGIN####
9 //
10 // -------------------------------------------
11 // The contents of this file are subject to the Cygnus eCos Public License
12 // Version 1.0 (the "License"); you may not use this file except in
13 // compliance with the License. You may obtain a copy of the License at
14 // http://sourceware.cygnus.com/ecos
15 //
16 // Software distributed under the License is distributed on an "AS IS"
17 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
18 // License for the specific language governing rights and limitations under
19 // the License.
20 //
21 // The Original Code is eCos - Embedded Cygnus Operating System, released
22 // September 30, 1998.
23 //
24 // The Initial Developer of the Original Code is Cygnus. Portions created
25 // by Cygnus are Copyright (C) 1998 Cygnus Solutions. All Rights Reserved.
26 // -------------------------------------------
27 //
28 //####COPYRIGHTEND####
29 //===========================================================================
30 //#####DESCRIPTIONBEGIN####
31 //
32 // Author(s): jlarmour
33 // Contributors: jlarmour@cygnus.co.uk
34 // Date: 1998-02-13
35 // Purpose:
36 // Description:
37 // Usage:
38 //
39 //####DESCRIPTIONEND####
40 //
41 //===========================================================================
42
43 // CONFIGURATION
44
45 #include <pkgconf/libc.h> // Configuration header
46
47 // Include the C library? And do we want the stdio stuff?
48 #if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO)
49
50 // INCLUDES
51
52 #include <cyg/infra/cyg_type.h> // Common project-wide type definitions
53 #include <stddef.h> // NULL and size_t from compiler
54 #include <stdio.h> // header for this file
55 #include <errno.h> // error codes
56 #include <limits.h> // UINT_MAX
57 #include "clibincl/stdiosupp.hxx" // Support functions for stdio
58 #include "clibincl/stream.hxx" // Cyg_StdioStream
59
60 // EXPORTED SYMBOLS
61
62 externC char *
63 gets( char * ) CYGPRI_LIBC_WEAK_ALIAS("_gets");
64
65 // FUNCTIONS
66
67 externC char *
68 _gets( char *s )
69 {
70 Cyg_StdioStream *real_stream = (Cyg_StdioStream *)stdin;
71 cyg_ucount32 bytes_read;
72 Cyg_ErrNo err;
73
74
75 err = real_stream->read( (cyg_uint8 *)s, UINT_MAX, &bytes_read );
76
77 if (!err && !bytes_read) // if no err, but nothing to read, try again
78 {
79 real_stream->refill_read_buffer();
80 err = real_stream->read( (cyg_uint8 *)s, UINT_MAX, &bytes_read );
81
82 } // if
83
84 if (err)
85 {
86 real_stream->set_error( err );
87 errno = err;
88 return NULL;
89 } // if
90
91 if (bytes_read > 0)
92 {
93 // NULL terminate it
94 if (s[bytes_read-1] == '\n')
95 s[bytes_read-1] = '\0';
96 else
97 s[bytes_read]='\0';
98 } // if
99
100 return s;
101
102 } // _gets()
103
104 #endif // if defined(CYGPKG_LIBC) && defined(CYGPKG_LIBC_STDIO)
105
106 // EOF gets.cxx