Changeset b9c7425 in mainline for kernel/generic/src/console/console.c


Ignore:
Timestamp:
2009-08-20T20:03:41Z (15 years ago)
Author:
Martin Decky <martin@…>
Branches:
lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
Children:
bc7d44c
Parents:
e731b0d
Message:

prepare outdev_t devices (particularly stdout) to work as repreaters
stop messing with the stdout pointer directly, use stdout_wire() instead

File:
1 edited

Legend:

Unmodified
Added
Removed
  • kernel/generic/src/console/console.c

    re731b0d rb9c7425  
    7676static parea_t klog_parea;
    7777
     78static indev_t stdin_sink;
     79static outdev_t stdout_source;
     80
    7881static indev_operations_t stdin_ops = {
    7982        .poll = NULL
    8083};
    8184
     85static void stdout_write(outdev_t *dev, wchar_t ch, bool silent);
     86
     87static outdev_operations_t stdout_ops = {
     88        .write = stdout_write
     89};
     90
    8291/** Silence output */
    8392bool silent = false;
     
    9099{
    91100        if (stdin == NULL) {
    92                 stdin = malloc(sizeof(indev_t), FRAME_ATOMIC);
    93                 if (stdin != NULL)
    94                         indev_initialize("stdin", stdin, &stdin_ops);
     101                indev_initialize("stdin", &stdin_sink, &stdin_ops);
     102                stdin = &stdin_sink;
    95103        }
    96104       
    97105        return stdin;
     106}
     107
     108void stdout_wire(outdev_t *outdev)
     109{
     110        if (stdout == NULL) {
     111                outdev_initialize("stdout", &stdout_source, &stdout_ops);
     112                stdout = &stdout_source;
     113        }
     114       
     115        list_append(&outdev->link, &stdout->list);
     116}
     117
     118static void stdout_write(outdev_t *dev, wchar_t ch, bool silent)
     119{
     120        link_t *cur;
     121       
     122        for (cur = dev->list.next; cur != &dev->list; cur = cur->next) {
     123                outdev_t *sink = list_get_instance(cur, outdev_t, link);
     124                sink->op->write(sink, ch, silent);
     125        }
    98126}
    99127
Note: See TracChangeset for help on using the changeset viewer.