GRASS GIS 7 Programmer's Manual  7.0.5(2016)-r00000
pngdriver/graph_close.c
Go to the documentation of this file.
1 
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 
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 
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 }
#define HEADER_SIZE
Definition: cairodriver.h:45
int width
Definition: pngdriver.h:43
GRASS png display driver - header file.
int height
Definition: pngdriver.h:43
struct png_state png
int mapped
Definition: pngdriver.h:37
void write_image(void)
unsigned int * grid
Definition: pngdriver.h:44
if(!DBFLoadRecord(psDBF, hEntity)) return NULL
void PNG_Graph_close(void)
Close down the graphics processing. This gets called only at driver termination time.
void G_free(void *buf)
Free allocated memory.
Definition: alloc.c:149