iDo not mmap all slides at the beginning to scale better. - catpoint - Catpoint simple presenting software. Err bitreich.org 70 hgit clone git://bitreich.org/catpoint/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/catpoint/ URL:git://bitreich.org/catpoint/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/catpoint/ bitreich.org 70 1Log /scm/catpoint/log.gph bitreich.org 70 1Files /scm/catpoint/files.gph bitreich.org 70 1Refs /scm/catpoint/refs.gph bitreich.org 70 1Tags /scm/catpoint/tag bitreich.org 70 1README /scm/catpoint/file/README.md.gph bitreich.org 70 1LICENSE /scm/catpoint/file/LICENSE.gph bitreich.org 70 i--- Err bitreich.org 70 1commit b0efd23c2469cec3f5baea1c71b71bce82456e8f /scm/catpoint/commit/b0efd23c2469cec3f5baea1c71b71bce82456e8f.gph bitreich.org 70 1parent 5672cc0e5930ed81ca8129230adae7f18a1225d4 /scm/catpoint/commit/5672cc0e5930ed81ca8129230adae7f18a1225d4.gph bitreich.org 70 hAuthor: Christoph Lohmann <20h@r-36.net> URL:mailto:20h@r-36.net bitreich.org 70 iDate: Sun, 20 Dec 2020 15:25:52 +0100 Err bitreich.org 70 i Err bitreich.org 70 iDo not mmap all slides at the beginning to scale better. Err bitreich.org 70 i Err bitreich.org 70 iWithout mmaping all slides at the beginning, catpoint scales better Err bitreich.org 70 iand the whole internal algorithms are simplified. Err bitreich.org 70 i Err bitreich.org 70 iDiffstat: Err bitreich.org 70 i M catpoint.c | 55 +++++++++++++++---------------- Err bitreich.org 70 i Err bitreich.org 70 i1 file changed, 27 insertions(+), 28 deletions(-) Err bitreich.org 70 i--- Err bitreich.org 70 1diff --git a/catpoint.c b/catpoint.c /scm/catpoint/file/catpoint.c.gph bitreich.org 70 i@@ -13,52 +13,57 @@ Err bitreich.org 70 i #include Err bitreich.org 70 i #include Err bitreich.org 70 i Err bitreich.org 70 i-char **slides, **slidefiles; /* the slides */ Err bitreich.org 70 i-int nslides, currentslide; Err bitreich.org 70 i+char *currentslidep, **slidefiles; /* the slides */ Err bitreich.org 70 i+int nslides, currentslide, currentslidelen; Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-cleanup(int sig) Err bitreich.org 70 i+unloadcurrentslide(void) Err bitreich.org 70 i { Err bitreich.org 70 i- int i; Err bitreich.org 70 i+ if (currentslidep == NULL) Err bitreich.org 70 i+ return; Err bitreich.org 70 i Err bitreich.org 70 i- for (i = 0; i < nslides; i++) Err bitreich.org 70 i- munmap(slides[i], 0x1000); Err bitreich.org 70 i+ if (munmap(currentslidep, currentslidelen) < 0) Err bitreich.org 70 i+ err(1, "munmap: %s", slidefiles[currentslide]); Err bitreich.org 70 i+} Err bitreich.org 70 i+ Err bitreich.org 70 i+void Err bitreich.org 70 i+cleanup(int sig) Err bitreich.org 70 i+{ Err bitreich.org 70 i+ unloadcurrentslide(); Err bitreich.org 70 i Err bitreich.org 70 i endwin(); /* restore terminal */ Err bitreich.org 70 i exit(1); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i-reload(char **argv, int i) Err bitreich.org 70 i+loadcurrentslide(char **argv, int slide) Err bitreich.org 70 i { Err bitreich.org 70 i struct stat statbuf; Err bitreich.org 70 i int fd; Err bitreich.org 70 i Err bitreich.org 70 i- if (slides[i] != NULL) { Err bitreich.org 70 i- if (munmap(slides[i], 0x1000) < 0) Err bitreich.org 70 i- err(1, "munmap: %s", slidefiles[i]); Err bitreich.org 70 i- } Err bitreich.org 70 i+ unloadcurrentslide(); Err bitreich.org 70 i Err bitreich.org 70 i- fd = open(slidefiles[i], O_RDONLY, 0); Err bitreich.org 70 i+ fd = open(slidefiles[slide], O_RDONLY, 0); Err bitreich.org 70 i if (fd < 0) Err bitreich.org 70 i- err(1, "open: %s", slidefiles[i]); Err bitreich.org 70 i+ err(1, "open: %s", slidefiles[slide]); Err bitreich.org 70 i if (fstat(fd, &statbuf) < 0) Err bitreich.org 70 i- err(1, "fstat: %s", slidefiles[i]); Err bitreich.org 70 i- slides[i] = mmap(NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); Err bitreich.org 70 i- if (slides[i] == MAP_FAILED) Err bitreich.org 70 i+ err(1, "fstat: %s", slidefiles[slide]); Err bitreich.org 70 i+ currentslidep = mmap(NULL, statbuf.st_size, PROT_READ, MAP_PRIVATE, fd, 0); Err bitreich.org 70 i+ if (currentslidep == MAP_FAILED) Err bitreich.org 70 i err(1, "mmap"); Err bitreich.org 70 i+ currentslidelen = statbuf.st_size; Err bitreich.org 70 i close(fd); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i void Err bitreich.org 70 i reloadcurrentslide(int sig) Err bitreich.org 70 i { Err bitreich.org 70 i- reload(slidefiles, currentslide); Err bitreich.org 70 i+ loadcurrentslide(slidefiles, currentslide); Err bitreich.org 70 i Err bitreich.org 70 i if (sig == SIGHUP) { Err bitreich.org 70 i clear(); Err bitreich.org 70 i refresh(); Err bitreich.org 70 i- printw("%s", slides[currentslide]); Err bitreich.org 70 i+ printw("%s", currentslidep); Err bitreich.org 70 i } Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -69,8 +74,6 @@ setsignal() Err bitreich.org 70 i Err bitreich.org 70 i signal(SIGINT, cleanup); Err bitreich.org 70 i signal(SIGQUIT, cleanup); Err bitreich.org 70 i- signal(SIGABRT, cleanup); Err bitreich.org 70 i- signal(SIGKILL, cleanup); Err bitreich.org 70 i signal(SIGTERM, cleanup); Err bitreich.org 70 i } Err bitreich.org 70 i Err bitreich.org 70 i@@ -87,15 +90,10 @@ main(int argc, char *argv[]) Err bitreich.org 70 i setsignal(); Err bitreich.org 70 i setlocale(LC_ALL, ""); Err bitreich.org 70 i Err bitreich.org 70 i- slides = calloc(nslides, sizeof(char *)); Err bitreich.org 70 i- Err bitreich.org 70 i- /* map files to mem */ Err bitreich.org 70 i- for (currentslide = 0; slidefiles[currentslide] != NULL; Err bitreich.org 70 i- currentslide++) { Err bitreich.org 70 i- reload(slidefiles, currentslide); Err bitreich.org 70 i- } Err bitreich.org 70 i /* start */ Err bitreich.org 70 i currentslide = 0; Err bitreich.org 70 i+ currentslidep = NULL; Err bitreich.org 70 i+ currentslidelen = 0; Err bitreich.org 70 i Err bitreich.org 70 i /* init curses */ Err bitreich.org 70 i initscr(); Err bitreich.org 70 i@@ -108,9 +106,10 @@ main(int argc, char *argv[]) Err bitreich.org 70 i Err bitreich.org 70 i show: Err bitreich.org 70 i /* display slide */ Err bitreich.org 70 i+ loadcurrentslide(slidefiles, currentslide); Err bitreich.org 70 i clear(); Err bitreich.org 70 i refresh(); Err bitreich.org 70 i- printw("%s", slides[currentslide]); Err bitreich.org 70 i+ printw("%s", currentslidep); Err bitreich.org 70 i Err bitreich.org 70 i again: Err bitreich.org 70 i c = getch(); Err bitreich.org 70 .