diff options
author | Marcus Brinkmann <marcus@gnu.org> | 2002-09-08 21:55:59 +0000 |
---|---|---|
committer | Marcus Brinkmann <marcus@gnu.org> | 2002-09-08 21:55:59 +0000 |
commit | 18cfa8b70ce9a6a3572908115f98211f3fa9a367 (patch) | |
tree | 42fd94dea9b27bb7020154a39a834429e936a560 /libcons/dir-changed.c | |
parent | 187b5b4b28eba6990f7e43a5288a71b62a271dd9 (diff) | |
download | hurd-18cfa8b70ce9a6a3572908115f98211f3fa9a367.tar.gz hurd-18cfa8b70ce9a6a3572908115f98211f3fa9a367.tar.bz2 hurd-18cfa8b70ce9a6a3572908115f98211f3fa9a367.zip |
libcons/
2002-09-09 Marcus Brinkmann <marcus@gnu.org>
* vcons-remove.c: New file.
* Makefile (SRCS): Add vcons-destroy.c.
* cons.h: New type vcons_list_t.
(struct vcons_list): New structure.
(struct cons_notify): Remove VCONS member.
(struct vcons): Remove members NEXT, PREV and NOTIFY. Add the
notify structure to the top to make it possible to use a vcons as
a port. New member VCONS_ENTRY.
(struct cons): Change type of members vcons_list and vcons_last to
vcons_list_t. Remove member active.
(cons_vcons_add): Change prototype to match new definition.
(cons_vcons_remove): Likewise.
(cons_switch): Likewise.
(cons_lookup): Likewise.
(cons_vcons_open): Likewise.
(cons_vcons_destroy): New prototype.
* cons-lookup.c (cons_lookup): Change type of R_VCONS argument
vcons_list_t. Change type of previous_vcons and vcons variables
to vcons_list_t. Append _entry to all these variables.
Don't allocate and initialize a vcons_t, but a vcons_list_t.
After this has been added to the list, call cons_vcons_add.
* cons-switch.c: Do not include <error.h>
(cons_switch): Add arguments ACTIVE_ID and R_VCONS. New variable
ERR and VCONS_ENTRY. Remove variable ACTIVE. Do not keep track
of active console. Instead, look it up using ACTIVE_ID. Lock the
returned console. Call cons_vcons_open, not cons_vcons_activate.
* dir-changed.c (add_one): Change VCONS to VCONS_ENTRY and its
type from vcons_t to vcons_list_t to follow cons_lookup change.
(lookup_one): Likewise.
(cons_S_dir_changed): Likewise.
* file-changed.c (cons_S_file_changed): Cast NOTIFY to VCONS.
Check that NOTIFY->cons is not set instead that NOTIFY->vcons is.
* init-init.c (cons_init): Pass cons_vcons_destroy as
clean_routine to ports_create_class.
Don't initialize CONS->active, nor DIR_NOTIFY_PORT->vcons.
* vcons-add.c (cons_vcons_add): Change argument VCONS to CONS and
VCONS_ENTRY. Don't do anything here (the user must implement it
all).
* vcons-close.c: Don't include <errno.h>, <unistd.h>, <stdio.h>,
<sys/mman.h>, <sys/fcntl.h>, <mach.h>. Include <assert.h>,
<hurd/ports.h> and <cthreads.h>.
(cons_vcons_close): Clear VCONS->vcons_entry->vcons. Derefence
and destroy VCONS.
* vcons-open.c (cons_vcons_open): Change arguments from VCONS to
CONS, VCONS_ENTRY and R_VCONS. New variable VCONS. Set up VCONS
as a port, and request notification messages on that.
* vcons-remove.c: Do not include <errno.h>.
(cons_vcons_remove): Assert that VCONS_ENTRY does not have an open
VCONS.
utils/
2002-09-09 Marcus Brinkmann <marcus@gnu.org>
* console-ncurses.c: New global variable global_lock.
(main): Initialize global_lock.
(cons_vcons_activate): Removed.
(console_switch): New function.
(cons_vcons_add): New function.
(input_loop): Call console_switch, not cons_switch. Do not take
active_vcons lock but global_lock.
(cons_vcons_update): Take global lock.
(cons_vcons_set_cursor_pos): Likewise.
(cons_vcons_set_cursor_status): Likewise.
(cons_vcons_scroll): Likewise.
(cons_vcons_write): Likewise.
(cons_vcons_beep): Likewise.
(cons_vcons_flash): Likewise.
Diffstat (limited to 'libcons/dir-changed.c')
-rw-r--r-- | libcons/dir-changed.c | 35 |
1 files changed, 17 insertions, 18 deletions
diff --git a/libcons/dir-changed.c b/libcons/dir-changed.c index 15b466a6..e1997d0f 100644 --- a/libcons/dir-changed.c +++ b/libcons/dir-changed.c @@ -27,7 +27,7 @@ #include "cons.h" #include "fs_notify_S.h" - + static error_t add_one (cons_t cons, char *name) { @@ -38,14 +38,14 @@ add_one (cons_t cons, char *name) nr = strtoul (name, &tail, 10); if (!errno && *tail == '\0' && nr > 0) { - vcons_t vcons; - return cons_lookup (cons, nr, 1, &vcons); + vcons_list_t vcons_entry; + return cons_lookup (cons, nr, 1, &vcons_entry); } return 0; } static error_t -lookup_one (cons_t cons, char *name, vcons_t *vcons) +lookup_one (cons_t cons, char *name, vcons_list_t *vcons_entry) { unsigned long int nr; char *tail; @@ -53,11 +53,11 @@ lookup_one (cons_t cons, char *name, vcons_t *vcons) errno = 0; nr = strtoul (name, &tail, 10); if (!errno && *tail == '\0' && nr > 0) - return cons_lookup (cons, nr, 0, vcons); + return cons_lookup (cons, nr, 0, vcons_entry); return 0; } - + kern_return_t cons_S_dir_changed (cons_notify_t notify, natural_t tickno, dir_changed_type_t change, string_t name) @@ -100,22 +100,21 @@ cons_S_dir_changed (cons_notify_t notify, natural_t tickno, break; case DIR_CHANGED_UNLINK: { - vcons_t vcons; - err = lookup_one (cons, name, &vcons); + vcons_list_t vcons_entry; + err = lookup_one (cons, name, &vcons_entry); if (!err) { - cons_vcons_remove (vcons); - if (vcons->prev) - vcons->prev->next = vcons->next; + cons_vcons_remove (cons, vcons_entry); + if (vcons_entry->prev) + vcons_entry->prev->next = vcons_entry->next; else - cons->vcons_list = vcons->next; - if (vcons->next) - vcons->next->prev = vcons->prev; + cons->vcons_list = vcons_entry->next; + if (vcons_entry->next) + vcons_entry->next->prev = vcons_entry->prev; else - cons->vcons_last = vcons->prev; + cons->vcons_last = vcons_entry->prev; - /* XXX Destroy the state. */ - free (vcons); + free (vcons_entry); } } break; @@ -123,7 +122,7 @@ cons_S_dir_changed (cons_notify_t notify, natural_t tickno, default: assert ("Unexpected dir-changed type."); mutex_unlock (&cons->lock); - return EINVAL; + return EINVAL; } mutex_unlock (&cons->lock); return 0; |