Changeset b27a97bb in mainline for libc/generic/io/stream.c


Ignore:
Timestamp:
2006-05-31T15:41:19Z (19 years ago)
Author:
Josef Cejka <malyzelenyhnus@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
c0e674a
Parents:
440cff5
Message:

Support for reading from stdin.
Getchar() implemented.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • libc/generic/io/stream.c

    r440cff5 rb27a97bb  
     1/*
     2 * Copyright (C) 2006 Josef Cejka
     3 * Copyright (C) 2006 Jakub Vana
     4 * All rights reserved.
     5 *
     6 * Redistribution and use in source and binary forms, with or without
     7 * modification, are permitted provided that the following conditions
     8 * are met:
     9 *
     10 * - Redistributions of source code must retain the above copyright
     11 *   notice, this list of conditions and the following disclaimer.
     12 * - Redistributions in binary form must reproduce the above copyright
     13 *   notice, this list of conditions and the following disclaimer in the
     14 *   documentation and/or other materials provided with the distribution.
     15 * - The name of the author may not be used to endorse or promote products
     16 *   derived from this software without specific prior written permission.
     17 *
     18 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
     19 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
     20 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
     21 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
     22 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
     23 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
     24 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
     25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
     26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
     27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
     28 */
     29
     30
    131#include <io/io.h>
    232#include <io/stream.h>
     
    939#include <ipc/services.h>
    1040#include <console.h>
     41#include <unistd.h>
    1142
    1243#define FDS 32
     
    3566}
    3667
    37 static char read_stdin(void)
     68static ssize_t read_stdin(void *param, void *buf, size_t count)
    3869{
    3970        ipcarg_t r0,r1;
    40         ipc_call_sync_2(console_phone, CONSOLE_GETCHAR, 0, 0, &r0, &r1);
    41        
    42         return r0;
     71        size_t i = 0;
     72
     73        while (i < count) {
     74                if (ipc_call_sync_2(console_phone, CONSOLE_GETCHAR, 0, 0, &r0, &r1) < 0) {
     75                        return -1;
     76                }
     77                ((char *)buf)[i++] = r0;
     78        }
     79        return i;
    4380        //return (ssize_t) __SYSCALL3(SYS_IO, 1, (sysarg_t) buf, (sysarg_t) count);
    4481}
     82
    4583static ssize_t write_stdout(void *param, const void *buf, size_t count)
    4684{
     
    126164        return 0;
    127165}
     166
     167ssize_t read(int fd, void *buf, size_t count)
     168{
     169        if (fd < FDS)
     170                return streams[fd].r(streams[fd].param, buf, count);
     171       
     172        return 0;
     173}
     174
Note: See TracChangeset for help on using the changeset viewer.