]> git.lizzy.rs Git - plan9front.git/blob - sys/src/cmd/hgfs/info.c
audiohda: fix syntax error
[plan9front.git] / sys / src / cmd / hgfs / info.c
1 #include <u.h>
2 #include <libc.h>
3 #include <thread.h>
4 #include <bio.h>
5 #include "dat.h"
6 #include "fns.h"
7
8 Revinfo*
9 loadrevinfo(Revlog *changelog, int rev)
10 {
11         int c, fd;
12         char *line;
13         Revinfo *ri;
14         vlong off;
15         Biobuf *buf;
16
17         if((fd = revlogopentemp(changelog, rev)) < 0)
18                 return nil;
19
20         off = fmetaheader(fd);
21         seek(fd, off, 0);
22
23         ri = malloc(sizeof(*ri));
24         memset(ri, 0, sizeof(*ri));
25
26         ri->logoff = off;
27         memmove(ri->chash, changelog->map[rev].hash, HASHSZ);
28
29         buf = Bfdopen(fd, OREAD);
30         line = Brdstr(buf, '\n', 1);
31         if(line == nil)
32                 goto Error;
33         hex2hash(line, ri->mhash);
34         free(line);
35
36         line = Brdstr(buf, '\n', 1);
37         if(line == nil)
38                 goto Error;
39         ri->who = line;
40
41         line = Brdstr(buf, '\n', 1);
42         if(line == nil)
43                 goto Error;
44         ri->when = strtol(line, nil, 10);
45         free(line);
46
47         ri->logoff = Boffset(buf);
48         for(;;){
49                 if((c = Bgetc(buf)) < 0)
50                         goto Error;
51                 if(c == '\n')
52                         break;
53                 do {
54                         if((c = Bgetc(buf)) < 0)
55                                 goto Error;
56                 } while(c != '\n');
57         }
58         ri->loglen = Boffset(buf) - ri->logoff - 1;
59
60         line = Brdstr(buf, '\0', 1);
61         if(line == nil)
62                 goto Error;
63         ri->why = line;
64
65         Bterm(buf);
66         close(fd);
67
68         return ri;
69 Error:
70         Bterm(buf);
71         close(fd);
72         free(ri->who);
73         free(ri->why);
74         free(ri);
75         return nil;
76 }