Sergey Bugaev, le jeu. 06 mai 2021 15:56:31 +0300, a ecrit: > libc already implements the functionality for allocating and managing > memory blocks like the pagemap. Using libc functions gives us some > additional niceties like overflow checking in reallocarray (). it also > means that we will not allocate a whole page of memory if we need to > store just a few integers.
Applied, thanks! > --- > libpager/object-terminate.c | 5 +++-- > libpager/pagemap.c | 26 +++++++++----------------- > 2 files changed, 12 insertions(+), 19 deletions(-) > > diff --git a/libpager/object-terminate.c b/libpager/object-terminate.c > index 95298217..3e7df167 100644 > --- a/libpager/object-terminate.c > +++ b/libpager/object-terminate.c > @@ -17,6 +17,7 @@ > > #include "priv.h" > #include "memory_object_S.h" > +#include <stdlib.h> > #include <stdio.h> > > /* Implement the object termination call from the kernel as described > @@ -118,10 +119,10 @@ _pager_free_structure (struct pager *p) > /* Free the pagemap */ > if (p->pagemapsize) > { > - munmap (p->pagemap, p->pagemapsize * sizeof (* p->pagemap)); > + free (p->pagemap); > p->pagemapsize = 0; > p->pagemap = 0; > } > - > + > p->pager_state = NOTINIT; > } > diff --git a/libpager/pagemap.c b/libpager/pagemap.c > index 1570c75b..7bbb8c56 100644 > --- a/libpager/pagemap.c > +++ b/libpager/pagemap.c > @@ -16,33 +16,25 @@ > Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */ > > #include "priv.h" > +#include <stdlib.h> > #include <string.h> > > /* Grow the pagemap of pager P as necessary to deal with address OFF */ > error_t > _pager_pagemap_resize (struct pager *p, vm_address_t off) > { > - error_t err = 0; > - > off /= __vm_page_size; > > if (p->pagemapsize < off) > { > - void *newaddr; > - vm_size_t newsize = round_page (off * sizeof (*p->pagemap)) > - / sizeof (*p->pagemap); > - > - newaddr = mmap (0, newsize * sizeof (*p->pagemap), > - PROT_READ|PROT_WRITE, MAP_ANON, 0, 0); > - err = (newaddr == (void *) -1) ? errno : 0; > - if (! err) > - { > - memcpy (newaddr, p->pagemap, p->pagemapsize * sizeof (*p->pagemap)); > - munmap (p->pagemap, p->pagemapsize * sizeof (*p->pagemap)); > - p->pagemap = newaddr; > - p->pagemapsize = newsize; > - } > + void *newaddr = reallocarray (p->pagemap, off, > + sizeof (*p->pagemap)); > + if (!newaddr) > + return errno; > + > + p->pagemap = newaddr; > + p->pagemapsize = off; > } > > - return err; > + return 0; > } > -- > 2.31.1 > > -- Samuel *** s has joined channel #ens-mim <N> re <s> pfff <s> mare de la pfp. <s> pas commencer et j'en ai deja marre. <s> bon ct juste un cou de gueule ++ *** s has left channel #ens-mim (s) -+- #ens-mim et la peufeupeu -+-