summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--acpi/netfs_impl.c19
-rw-r--r--pci-arbiter/netfs_impl.c21
2 files changed, 17 insertions, 23 deletions
diff --git a/acpi/netfs_impl.c b/acpi/netfs_impl.c
index 84f52c89..38ff5e17 100644
--- a/acpi/netfs_impl.c
+++ b/acpi/netfs_impl.c
@@ -58,25 +58,22 @@ get_dirents (struct acpifs_dirent *dir,
int i, count;
size_t size;
char *p;
+ int nentries = (int)dir->dir->num_entries;
- if (first_entry >= dir->dir->num_entries)
+ if (first_entry >= nentries)
{
*data_len = 0;
*data_entries = 0;
return 0;
}
- if (max_entries < 0)
- count = dir->dir->num_entries;
- else
- {
- count = ((first_entry + max_entries) >= dir->dir->num_entries ?
- dir->dir->num_entries : max_entries) - first_entry;
- }
+ count = nentries - first_entry;
+ if (max_entries >= 0 && count > max_entries)
+ count = max_entries;
- size =
- (count * DIRENTS_CHUNK_SIZE) >
- max_data_len ? max_data_len : count * DIRENTS_CHUNK_SIZE;
+ size = count * DIRENTS_CHUNK_SIZE;
+ if (max_data_len && size > max_data_len)
+ size = max_data_len;
*data = mmap (0, size, PROT_READ | PROT_WRITE, MAP_ANON, 0, 0);
err = ((void *) *data == (void *) -1) ? errno : 0;
diff --git a/pci-arbiter/netfs_impl.c b/pci-arbiter/netfs_impl.c
index b987a0bc..2087cfb4 100644
--- a/pci-arbiter/netfs_impl.c
+++ b/pci-arbiter/netfs_impl.c
@@ -59,25 +59,22 @@ get_dirents (struct pcifs_dirent *dir,
int i, count;
size_t size;
char *p;
+ int nentries = (int)dir->dir->num_entries;
- if (first_entry >= dir->dir->num_entries)
+ if (first_entry >= nentries)
{
*data_len = 0;
*data_entries = 0;
return 0;
}
- if (max_entries < 0)
- count = dir->dir->num_entries;
- else
- {
- count = ((first_entry + max_entries) >= dir->dir->num_entries ?
- dir->dir->num_entries : max_entries) - first_entry;
- }
+ count = nentries - first_entry;
+ if (max_entries >= 0 && count > max_entries)
+ count = max_entries;
- size =
- (count * DIRENTS_CHUNK_SIZE) >
- max_data_len ? max_data_len : count * DIRENTS_CHUNK_SIZE;
+ size = count * DIRENTS_CHUNK_SIZE;
+ if (max_data_len && size > max_data_len)
+ size = max_data_len;
*data = mmap (0, size, PROT_READ | PROT_WRITE, MAP_ANON, 0, 0);
err = ((void *) *data == (void *) -1) ? errno : 0;
@@ -235,7 +232,7 @@ netfs_get_dirents (struct iouser * cred, struct node * dir,
if (dir->nn->ln->dir)
{
err = get_dirents (dir->nn->ln, first_entry, max_entries,
- data, data_len, max_entries, data_entries);
+ data, data_len, max_data_len, data_entries);
}
else
err = ENOTDIR;