Mercurial > libpst
comparison xml/libpst.in @ 75:987aa872294e stable-0-6-11
Use ftello/fseeko to properly handle large files.
Document and properly use datasize field in b5 blocks.
Fix some MSVC compile issues and collect MSVC dependencies into one place.
author | Carl Byington <carl@five-ten-sg.com> |
---|---|
date | Tue, 03 Jun 2008 12:00:58 -0700 |
parents | 1bd4491cf8ff |
children | 87216aefc6df |
comparison
equal
deleted
inserted
replaced
74:6f82d13e9300 | 75:987aa872294e |
---|---|
31 </partintro> | 31 </partintro> |
32 | 32 |
33 | 33 |
34 <refentry id="readpst.1"> | 34 <refentry id="readpst.1"> |
35 <refentryinfo> | 35 <refentryinfo> |
36 <date>2008-05-16</date> | 36 <date>2008-06-03</date> |
37 </refentryinfo> | 37 </refentryinfo> |
38 | 38 |
39 <refmeta> | 39 <refmeta> |
40 <refentrytitle>readpst</refentrytitle> | 40 <refentrytitle>readpst</refentrytitle> |
41 <manvolnum>1</manvolnum> | 41 <manvolnum>1</manvolnum> |
224 </refentry> | 224 </refentry> |
225 | 225 |
226 | 226 |
227 <refentry id="lspst.1"> | 227 <refentry id="lspst.1"> |
228 <refentryinfo> | 228 <refentryinfo> |
229 <date>2008-05-16</date> | 229 <date>2008-06-03</date> |
230 </refentryinfo> | 230 </refentryinfo> |
231 | 231 |
232 <refmeta> | 232 <refmeta> |
233 <refentrytitle>lspst</refentrytitle> | 233 <refentrytitle>lspst</refentrytitle> |
234 <manvolnum>1</manvolnum> | 234 <manvolnum>1</manvolnum> |
327 </refentry> | 327 </refentry> |
328 | 328 |
329 | 329 |
330 <refentry id="readpstlog.1"> | 330 <refentry id="readpstlog.1"> |
331 <refentryinfo> | 331 <refentryinfo> |
332 <date>2008-05-16</date> | 332 <date>2008-06-03</date> |
333 </refentryinfo> | 333 </refentryinfo> |
334 | 334 |
335 <refmeta> | 335 <refmeta> |
336 <refentrytitle>readpstlog</refentrytitle> | 336 <refentrytitle>readpstlog</refentrytitle> |
337 <manvolnum>1</manvolnum> | 337 <manvolnum>1</manvolnum> |
502 </refentry> | 502 </refentry> |
503 | 503 |
504 | 504 |
505 <refentry id="pst2ldif.1"> | 505 <refentry id="pst2ldif.1"> |
506 <refentryinfo> | 506 <refentryinfo> |
507 <date>2008-05-16</date> | 507 <date>2008-06-03</date> |
508 </refentryinfo> | 508 </refentryinfo> |
509 | 509 |
510 <refmeta> | 510 <refmeta> |
511 <refentrytitle>pst2ldif</refentrytitle> | 511 <refentrytitle>pst2ldif</refentrytitle> |
512 <manvolnum>1</manvolnum> | 512 <manvolnum>1</manvolnum> |
626 </refentry> | 626 </refentry> |
627 | 627 |
628 | 628 |
629 <refentry id="pst2dii.1"> | 629 <refentry id="pst2dii.1"> |
630 <refentryinfo> | 630 <refentryinfo> |
631 <date>2008-05-16</date> | 631 <date>2008-06-03</date> |
632 </refentryinfo> | 632 </refentryinfo> |
633 | 633 |
634 <refmeta> | 634 <refmeta> |
635 <refentrytitle>pst2dii</refentrytitle> | 635 <refentrytitle>pst2dii</refentrytitle> |
636 <manvolnum>1</manvolnum> | 636 <manvolnum>1</manvolnum> |
760 </refentry> | 760 </refentry> |
761 | 761 |
762 | 762 |
763 <refentry id="pst.5"> | 763 <refentry id="pst.5"> |
764 <refentryinfo> | 764 <refentryinfo> |
765 <date>2008-05-16</date> | 765 <date>2008-06-03</date> |
766 </refentryinfo> | 766 </refentryinfo> |
767 | 767 |
768 <refmeta> | 768 <refmeta> |
769 <refentrytitle>outlook.pst</refentrytitle> | 769 <refentrytitle>outlook.pst</refentrytitle> |
770 <manvolnum>5</manvolnum> | 770 <manvolnum>5</manvolnum> |
1575 with a size of 8 bytes in this descriptor block. The "b5" block has the | 1575 with a size of 8 bytes in this descriptor block. The "b5" block has the |
1576 following format: | 1576 following format: |
1577 </para> | 1577 </para> |
1578 <literallayout class="monospaced"><![CDATA[ | 1578 <literallayout class="monospaced"><![CDATA[ |
1579 0000 signature [2 bytes] 0x02b5 constant | 1579 0000 signature [2 bytes] 0x02b5 constant |
1580 0002 unknown [2 bytes] 0x0006 in this case | 1580 0002 datasize [2 bytes] 0x0006 constant +2 for 8 byte entries |
1581 0004 descoffset [4 bytes] 0x0040 index reference | 1581 0004 descoffset [4 bytes] 0x0040 index reference |
1582 ]]></literallayout> | 1582 ]]></literallayout> |
1583 <para> | 1583 <para> |
1584 Note the descoffset of 0x0040, which again is an index reference. In this | 1584 Note the descoffset of 0x0040, which again is an index reference. In this |
1585 case, it is an internal pointer reference, which needs to be right shifted by 4 bits | 1585 case, it is an internal pointer reference, which needs to be right shifted by 4 bits |
1586 to become 0x0004, which is then a byte offset to be added to the above | 1586 to become 0x0004, which is then a byte offset to be added to the above |
1587 indexOffset plus two (to skip the count), so it points to the (0x14, 0x7c) | 1587 indexOffset plus two (to skip the count), so it points to the (0x14, 0x7c) |
1588 pair. We now have the offset 0x14 of the descriptor array, composed of 8 byte | 1588 pair. The datasize (6) plus the b5 code (02) gives size of the entries, |
1589 entries. Each descriptor entry has the following format: | 1589 in this case 8 bytes. We now have the offset 0x14 of the descriptor array, |
1590 composed of 8 byte entries. Each descriptor entry has the following format: | |
1590 </para> | 1591 </para> |
1591 <literallayout class="monospaced"><![CDATA[ | 1592 <literallayout class="monospaced"><![CDATA[ |
1592 0000 itemType [2 bytes] | 1593 0000 itemType [2 bytes] |
1593 0002 referenceType [2 bytes] | 1594 0002 referenceType [2 bytes] |
1594 0004 value [4 bytes] | 1595 0004 value [4 bytes] |
1947 located at offset 0xc with a size of 8 bytes in this descriptor block. | 1948 located at offset 0xc with a size of 8 bytes in this descriptor block. |
1948 The "b5" block has the following format: | 1949 The "b5" block has the following format: |
1949 </para> | 1950 </para> |
1950 <literallayout class="monospaced"><![CDATA[ | 1951 <literallayout class="monospaced"><![CDATA[ |
1951 0000 signature [2 bytes] 0x04b5 constant | 1952 0000 signature [2 bytes] 0x04b5 constant |
1952 0002 unknown [2 bytes] 0x0002 in this case | 1953 0002 datasize [2 bytes] 0x0002 +4 for 6 byte entries in this case |
1953 0004 descoffset [4 bytes] 0x0060 index reference | 1954 0004 descoffset [4 bytes] 0x0060 index reference |
1954 ]]></literallayout> | 1955 ]]></literallayout> |
1955 <para> | 1956 <para> |
1956 Note the descoffset of 0x0060, which again is an index reference. In this | 1957 Note the descoffset of 0x0060, which again is an index reference. In this |
1957 case, it is an internal pointer reference, which needs to be right shifted by 4 | 1958 case, it is an internal pointer reference, which needs to be right shifted by 4 |
1958 bits to become 0x0006, which is then a byte offset to be added to the | 1959 bits to become 0x0006, which is then a byte offset to be added to the |
1959 above indexOffset plus two (to skip the count), so it points to the | 1960 above indexOffset plus two (to skip the count), so it points to the |
1960 (0xea, 0xf0) pair. That gives us (0xf0 - 0xea)/6 = 1, so we have a | 1961 (0xea, 0xf0) pair. The datasize (2) plus the b5 code (04) gives the size |
1961 recordCount of one. The actual data between 0xea and 0xf0 is unknown | 1962 of the entries, in this case 6 bytes. We now have the offset 0xea of an |
1962 and unused here. | 1963 unused block of data in an unknown format, composed of 6 byte entries. |
1964 That gives us (0xf0 - 0xea)/6 = 1, so we have a recordCount of one. | |
1963 </para> | 1965 </para> |
1964 <para> | 1966 <para> |
1965 We have seen cases where the descoffset in the b5 block is zero, and | 1967 We have seen cases where the descoffset in the b5 block is zero, and |
1966 the index2Offset in the 7c block is zero. This has been seen for | 1968 the index2Offset in the 7c block is zero. This has been seen for |
1967 objects that seem to be attachments on messages that have been | 1969 objects that seem to be attachments on messages that have been |