]> git.tdb.fi Git - gldbg.git/blob - source/gldump.c
Add an errata system to avoid the need of putting special cases in code
[gldbg.git] / source / gldump.c
1 /* $Id$
2
3 This file is part of gldbg
4 Copyright © 2009  Mikko Rasa, Mikkosoft Productions
5 Distributed under the GPL
6 */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <fcntl.h>
12 #include <sys/stat.h>
13 #include <sys/mman.h>
14 #include "glprint.h"
15
16 int main(int argc, char **argv)
17 {
18         int fd;
19         struct stat st;
20         GlDecoder *dec;
21         char *addr;
22         char *end;
23         char *ptr;
24
25         if(argc<2)
26         {
27                 fprintf(stderr, "Usage: %s <dumpfile>\n", argv[0]);
28                 return 1;
29         }
30
31         fd = open(argv[1], O_RDONLY);
32         if(fd==-1)
33         {
34                 perror("open");
35                 return 1;
36         }
37         fstat(fd, &st);
38         addr = (char *)mmap(NULL, st.st_size, PROT_READ, MAP_SHARED, fd, 0);
39         end = addr+st.st_size;
40         ptr = addr;
41
42         dec = glprint_new(NULL, 0);
43
44         while(ptr<end)
45         {
46                 int ret;
47                 ret = gldecoder_decode(dec, ptr, end-ptr);
48                 if(ret<0)
49                 {
50                         fprintf(stderr, "Decode error with %d bytes left\n", end-ptr);
51                         break;
52                 }
53                 ptr += ret;
54                 printf("%s\n", glprint_get_buffer(dec));
55         }
56         munmap(addr, st.st_size);
57         close(fd);
58         gldecoder_delete(dec);
59
60         return 0;
61 }