Guest User

Untitled

a guest
Aug 25th, 2015
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.43 KB | None | 0 0
  1. import sequtils
  2.  
  3. type
  4. Header* = object
  5. name*: array[0..100, char]
  6. mode*: array[0..8, char]
  7. uid*: array[0..8, char]
  8. gid*: array[0..8, char]
  9. size*: array[0..12, char]
  10. mktime*: array[0..12, char]
  11. chksum*: array[0..8, char]
  12. typeflag*: char
  13. linkname*: array[0..100, char]
  14. magic*: array[0..6, char]
  15. version*: array[0..2, char]
  16. uname*: array[0..32, char]
  17. gname*: array[0..32, char]
  18. devmajor*: array[0..8, char]
  19. devminor*: array[0..8, char]
  20. prefix*: array[0..155, char]
  21. gnu_longname*: ref char
  22. gnu_longlink*: ref char
  23.  
  24. ArchiveFile* = object
  25. header*: Header
  26. pos*: uint64
  27. size*: uint64
  28.  
  29. Archive* = object
  30. file: File
  31. files*: seq[ArchiveFile]
  32. position: uint64
  33.  
  34. ArchiveException = object of Exception
  35.  
  36.  
  37. proc newTarArchive*(f: File): Archive =
  38. result = Archive(
  39. file: f
  40. )
  41.  
  42. proc newHeader*(): Header =
  43. result = Header()
  44.  
  45.  
  46. proc parseBufferToHeader*(buffer: var array[0..512, char]): Header =
  47. result = newHeader()
  48. #result.name = buffer[0..100]
  49. result.name = buffer[0..100]
  50.  
  51. proc readArchiveFile*(a: Archive): ArchiveFile =
  52. var buffer: array[0..512, char]
  53.  
  54. let readCount: int = readChars(a.file, buffer, a.position, 512)
  55. if readCount != 512:
  56. raise newException(ArchiveException, "Could not read 512 bytes")
  57.  
  58. let header = buffer.parseBufferToHeader()
  59. result = ArchiveFile(
  60. header: header)
Advertisement
Add Comment
Please, Sign In to add comment