summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrea Monaco <andrea.monaco@autistici.org>2021-11-11 18:40:17 +0100
committerSamuel Thibault <samuel.thibault@ens-lyon.org>2021-11-11 18:40:17 +0100
commitc8bb19ccac4b53ff5b7bf9f05703e8dfd5405b4d (patch)
treebf8f22a16f49715b06380168ea0999854ff08bc1
parent77cdd08a2faf08afd13610f11db694856a7ce44c (diff)
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.
-rw-r--r--console/console.c15
1 files changed, 10 insertions, 5 deletions
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;