1 /*! 2 \file lib/pngdriver/graph_close.c 3 4 \brief GRASS png display driver - close graphics processing 5 6 (C) 2003-2014 by Glynn Clements and the GRASS Development Team 7 8 This program is free software under the GNU General Public License 9 (>=v2). Read the file COPYING that comes with GRASS for details. 10 11 \author Per Henrik Johansen (original contributor) 12 \author Glynn Clements 13 */ 14 15 #include <unistd.h> 16 #include <fcntl.h> 17 #include <sys/types.h> 18 #include <sys/stat.h> 19 #ifdef __MINGW32__ 20 #include <windows.h> 21 #else 22 #include <sys/mman.h> 23 #endif 24 25 #include <grass/gis.h> 26 #include "pngdriver.h" 27 unmap_file(void)28static void unmap_file(void) 29 { 30 size_t size = HEADER_SIZE + png.width * png.height * sizeof(unsigned int); 31 void *ptr = (char *)png.grid - HEADER_SIZE; 32 33 if (!png.mapped) 34 return; 35 36 #ifdef __MINGW32__ 37 UnmapViewOfFile(ptr); 38 CloseHandle(png.handle); 39 #else 40 munmap(ptr, size); 41 #endif 42 43 png.mapped = 0; 44 } 45 46 /*! 47 \brief Close down the graphics processing. This gets called only at driver 48 termination time. 49 */ PNG_Graph_close(void)50void PNG_Graph_close(void) 51 { 52 write_image(); 53 54 if (png.mapped) 55 unmap_file(); 56 else 57 G_free(png.grid); 58 } 59