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)28 static 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)50 void 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