From c8bb19ccac4b53ff5b7bf9f05703e8dfd5405b4d Mon Sep 17 00:00:00 2001 From: Andrea Monaco Date: Thu, 11 Nov 2021 18:40:17 +0100 Subject: console: fix listing of directory in netfs_get_dirents Listing /dev/vcs which is translated by /hurd/console gives the following: $ ls /dev/vcs ls: reading directory '/dev/vcs': Invalid argument 1 2 3 4 5 6 That error is probably harmless but annoying. It is caused by netfs_get_dirents the last time it is called during listing, because it calls mmap with size = 0. * console/console.c (netfs_get_dirents): Do not call mmap when size is 0. --- console/console.c | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'console/console.c') diff --git a/console/console.c b/console/console.c index 6e83fbbc..7306b6b8 100644 --- a/console/console.c +++ b/console/console.c @@ -750,7 +750,7 @@ netfs_get_dirents (struct iouser *cred, struct node *dir, mach_msg_type_number_t *data_len, vm_size_t max_data_len, int *data_entries) { - error_t err; + error_t err = 0; int count = 0; size_t size = 0; /* Total size of our return block. */ struct vcons *first_vcons = NULL; @@ -813,11 +813,16 @@ netfs_get_dirents (struct iouser *cred, struct node *dir, bump_size ("input"); } - /* Allocate it. */ - *data = mmap (0, size, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); - err = ((void *) *data == (void *) -1) ? errno : 0; + if (!size) + *data_len = *data_entries = 0; + else + { + /* Allocate it. */ + *data = mmap (0, size, PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); + err = ((void *) *data == (void *) -1) ? errno : 0; + } - if (! err) + if (size && !err) /* Copy out the result. */ { char *p = *data; -- cgit v1.2.3