1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
// Copyright 2017 pdb Developers
//
// Licensed under the Apache License, Version 2.0, <LICENSE-APACHE or
// http://apache.org/licenses/LICENSE-2.0> or the MIT license <LICENSE-MIT or
// http://opensource.org/licenses/MIT>, at your option. This file may not be
// copied, modified, or distributed except according to those terms.

use common::*;
use msf::*;
use uuid::Uuid;
use dbi::HeaderVersion;

/// A PDB info stream header parsed from a stream.
/// Reference:
/// http://llvm.org/docs/PDB/PdbStream.html
#[derive(Debug,Copy,Clone)]
pub struct PDBInformation {
    pub version: HeaderVersion,
    pub signature: u32,
    pub age: u32,
    pub guid: Uuid
}

pub fn new_pdb_information(stream: Stream) -> Result<PDBInformation> {
    let mut buf = stream.parse_buffer();

    let header = PDBInformation {
        version: From::from(buf.parse_u32()?),
        signature: buf.parse_u32()?,
        age: buf.parse_u32()?,
        guid: Uuid::from_fields(
            buf.parse_u32()?,
            buf.parse_u16()?,
            buf.parse_u16()?,
            buf.take(8)?
        ).unwrap()
    };

    Ok(header)
}