header.js.html 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <title>Code coverage report for tar/lib/header.js</title>
  5. <meta charset="utf-8" />
  6. <link rel="stylesheet" href="../../prettify.css" />
  7. <link rel="stylesheet" href="../../base.css" />
  8. <meta name="viewport" content="width=device-width, initial-scale=1">
  9. <style type='text/css'>
  10. .coverage-summary .sorter {
  11. background-image: url(../../sort-arrow-sprite.png);
  12. }
  13. </style>
  14. </head>
  15. <body>
  16. <div class='wrapper'>
  17. <div class='pad1'>
  18. <h1>
  19. <a href="../../index.html">All files</a> / <a href="index.html">tar/lib</a> header.js
  20. </h1>
  21. <div class='clearfix'>
  22. <div class='fl pad1y space-right2'>
  23. <span class="strong">100% </span>
  24. <span class="quiet">Statements</span>
  25. <span class='fraction'>161/161</span>
  26. </div>
  27. <div class='fl pad1y space-right2'>
  28. <span class="strong">100% </span>
  29. <span class="quiet">Branches</span>
  30. <span class='fraction'>120/120</span>
  31. </div>
  32. <div class='fl pad1y space-right2'>
  33. <span class="strong">100% </span>
  34. <span class="quiet">Functions</span>
  35. <span class='fraction'>20/20</span>
  36. </div>
  37. <div class='fl pad1y space-right2'>
  38. <span class="strong">100% </span>
  39. <span class="quiet">Lines</span>
  40. <span class='fraction'>159/159</span>
  41. </div>
  42. </div>
  43. </div>
  44. <div class='status-line high'></div>
  45. <pre><table class="coverage">
  46. <tr><td class="line-count quiet">1
  47. 2
  48. 3
  49. 4
  50. 5
  51. 6
  52. 7
  53. 8
  54. 9
  55. 10
  56. 11
  57. 12
  58. 13
  59. 14
  60. 15
  61. 16
  62. 17
  63. 18
  64. 19
  65. 20
  66. 21
  67. 22
  68. 23
  69. 24
  70. 25
  71. 26
  72. 27
  73. 28
  74. 29
  75. 30
  76. 31
  77. 32
  78. 33
  79. 34
  80. 35
  81. 36
  82. 37
  83. 38
  84. 39
  85. 40
  86. 41
  87. 42
  88. 43
  89. 44
  90. 45
  91. 46
  92. 47
  93. 48
  94. 49
  95. 50
  96. 51
  97. 52
  98. 53
  99. 54
  100. 55
  101. 56
  102. 57
  103. 58
  104. 59
  105. 60
  106. 61
  107. 62
  108. 63
  109. 64
  110. 65
  111. 66
  112. 67
  113. 68
  114. 69
  115. 70
  116. 71
  117. 72
  118. 73
  119. 74
  120. 75
  121. 76
  122. 77
  123. 78
  124. 79
  125. 80
  126. 81
  127. 82
  128. 83
  129. 84
  130. 85
  131. 86
  132. 87
  133. 88
  134. 89
  135. 90
  136. 91
  137. 92
  138. 93
  139. 94
  140. 95
  141. 96
  142. 97
  143. 98
  144. 99
  145. 100
  146. 101
  147. 102
  148. 103
  149. 104
  150. 105
  151. 106
  152. 107
  153. 108
  154. 109
  155. 110
  156. 111
  157. 112
  158. 113
  159. 114
  160. 115
  161. 116
  162. 117
  163. 118
  164. 119
  165. 120
  166. 121
  167. 122
  168. 123
  169. 124
  170. 125
  171. 126
  172. 127
  173. 128
  174. 129
  175. 130
  176. 131
  177. 132
  178. 133
  179. 134
  180. 135
  181. 136
  182. 137
  183. 138
  184. 139
  185. 140
  186. 141
  187. 142
  188. 143
  189. 144
  190. 145
  191. 146
  192. 147
  193. 148
  194. 149
  195. 150
  196. 151
  197. 152
  198. 153
  199. 154
  200. 155
  201. 156
  202. 157
  203. 158
  204. 159
  205. 160
  206. 161
  207. 162
  208. 163
  209. 164
  210. 165
  211. 166
  212. 167
  213. 168
  214. 169
  215. 170
  216. 171
  217. 172
  218. 173
  219. 174
  220. 175
  221. 176
  222. 177
  223. 178
  224. 179
  225. 180
  226. 181
  227. 182
  228. 183
  229. 184
  230. 185
  231. 186
  232. 187
  233. 188
  234. 189
  235. 190
  236. 191
  237. 192
  238. 193
  239. 194
  240. 195
  241. 196
  242. 197
  243. 198
  244. 199
  245. 200
  246. 201
  247. 202
  248. 203
  249. 204
  250. 205
  251. 206
  252. 207
  253. 208
  254. 209
  255. 210
  256. 211
  257. 212
  258. 213
  259. 214
  260. 215
  261. 216
  262. 217
  263. 218
  264. 219
  265. 220
  266. 221
  267. 222
  268. 223
  269. 224
  270. 225
  271. 226
  272. 227
  273. 228
  274. 229
  275. 230
  276. 231
  277. 232
  278. 233
  279. 234
  280. 235
  281. 236
  282. 237
  283. 238
  284. 239
  285. 240
  286. 241
  287. 242
  288. 243
  289. 244
  290. 245
  291. 246
  292. 247
  293. 248
  294. 249
  295. 250
  296. 251
  297. 252
  298. 253
  299. 254
  300. 255
  301. 256
  302. 257
  303. 258
  304. 259
  305. 260
  306. 261
  307. 262
  308. 263
  309. 264
  310. 265
  311. 266
  312. 267
  313. 268
  314. 269
  315. 270
  316. 271
  317. 272
  318. 273</td><td class="line-coverage quiet"><span class="cline-any cline-neutral">&nbsp;</span>
  319. <span class="cline-any cline-neutral">&nbsp;</span>
  320. <span class="cline-any cline-neutral">&nbsp;</span>
  321. <span class="cline-any cline-neutral">&nbsp;</span>
  322. <span class="cline-any cline-neutral">&nbsp;</span>
  323. <span class="cline-any cline-neutral">&nbsp;</span>
  324. <span class="cline-any cline-yes">13x</span>
  325. <span class="cline-any cline-yes">13x</span>
  326. <span class="cline-any cline-yes">13x</span>
  327. <span class="cline-any cline-neutral">&nbsp;</span>
  328. <span class="cline-any cline-yes">13x</span>
  329. <span class="cline-any cline-neutral">&nbsp;</span>
  330. <span class="cline-any cline-neutral">&nbsp;</span>
  331. <span class="cline-any cline-neutral">&nbsp;</span>
  332. <span class="cline-any cline-yes">13121x</span>
  333. <span class="cline-any cline-yes">13121x</span>
  334. <span class="cline-any cline-yes">13121x</span>
  335. <span class="cline-any cline-neutral">&nbsp;</span>
  336. <span class="cline-any cline-yes">13121x</span>
  337. <span class="cline-any cline-yes">13121x</span>
  338. <span class="cline-any cline-yes">13121x</span>
  339. <span class="cline-any cline-yes">13121x</span>
  340. <span class="cline-any cline-yes">13121x</span>
  341. <span class="cline-any cline-yes">13121x</span>
  342. <span class="cline-any cline-yes">13121x</span>
  343. <span class="cline-any cline-yes">13121x</span>
  344. <span class="cline-any cline-yes">13121x</span>
  345. <span class="cline-any cline-yes">13121x</span>
  346. <span class="cline-any cline-yes">13121x</span>
  347. <span class="cline-any cline-yes">13121x</span>
  348. <span class="cline-any cline-yes">13121x</span>
  349. <span class="cline-any cline-yes">13121x</span>
  350. <span class="cline-any cline-yes">13121x</span>
  351. <span class="cline-any cline-yes">13121x</span>
  352. <span class="cline-any cline-neutral">&nbsp;</span>
  353. <span class="cline-any cline-yes">13121x</span>
  354. <span class="cline-any cline-yes">6393x</span>
  355. <span class="cline-any cline-yes">6728x</span>
  356. <span class="cline-any cline-yes">6726x</span>
  357. <span class="cline-any cline-neutral">&nbsp;</span>
  358. <span class="cline-any cline-neutral">&nbsp;</span>
  359. <span class="cline-any cline-neutral">&nbsp;</span>
  360. <span class="cline-any cline-yes">6393x</span>
  361. <span class="cline-any cline-yes">2795x</span>
  362. <span class="cline-any cline-neutral">&nbsp;</span>
  363. <span class="cline-any cline-yes">6393x</span>
  364. <span class="cline-any cline-yes">1x</span>
  365. <span class="cline-any cline-neutral">&nbsp;</span>
  366. <span class="cline-any cline-yes">6392x</span>
  367. <span class="cline-any cline-yes">6392x</span>
  368. <span class="cline-any cline-yes">6392x</span>
  369. <span class="cline-any cline-yes">6392x</span>
  370. <span class="cline-any cline-yes">6392x</span>
  371. <span class="cline-any cline-yes">6392x</span>
  372. <span class="cline-any cline-yes">6392x</span>
  373. <span class="cline-any cline-neutral">&nbsp;</span>
  374. <span class="cline-any cline-neutral">&nbsp;</span>
  375. <span class="cline-any cline-yes">6392x</span>
  376. <span class="cline-any cline-yes">6392x</span>
  377. <span class="cline-any cline-yes">1990x</span>
  378. <span class="cline-any cline-yes">6392x</span>
  379. <span class="cline-any cline-yes">2x</span>
  380. <span class="cline-any cline-neutral">&nbsp;</span>
  381. <span class="cline-any cline-neutral">&nbsp;</span>
  382. <span class="cline-any cline-neutral">&nbsp;</span>
  383. <span class="cline-any cline-neutral">&nbsp;</span>
  384. <span class="cline-any cline-neutral">&nbsp;</span>
  385. <span class="cline-any cline-neutral">&nbsp;</span>
  386. <span class="cline-any cline-yes">6392x</span>
  387. <span class="cline-any cline-yes">1594x</span>
  388. <span class="cline-any cline-neutral">&nbsp;</span>
  389. <span class="cline-any cline-yes">6392x</span>
  390. <span class="cline-any cline-yes">6392x</span>
  391. <span class="cline-any cline-yes">4275x</span>
  392. <span class="cline-any cline-yes">4275x</span>
  393. <span class="cline-any cline-yes">4275x</span>
  394. <span class="cline-any cline-yes">4275x</span>
  395. <span class="cline-any cline-yes">4275x</span>
  396. <span class="cline-any cline-neutral">&nbsp;</span>
  397. <span class="cline-any cline-yes">2x</span>
  398. <span class="cline-any cline-yes">2x</span>
  399. <span class="cline-any cline-neutral">&nbsp;</span>
  400. <span class="cline-any cline-yes">4273x</span>
  401. <span class="cline-any cline-yes">4273x</span>
  402. <span class="cline-any cline-yes">295x</span>
  403. <span class="cline-any cline-yes">4273x</span>
  404. <span class="cline-any cline-yes">4273x</span>
  405. <span class="cline-any cline-neutral">&nbsp;</span>
  406. <span class="cline-any cline-neutral">&nbsp;</span>
  407. <span class="cline-any cline-neutral">&nbsp;</span>
  408. <span class="cline-any cline-yes">6392x</span>
  409. <span class="cline-any cline-yes">6392x</span>
  410. <span class="cline-any cline-yes">946016x</span>
  411. <span class="cline-any cline-neutral">&nbsp;</span>
  412. <span class="cline-any cline-yes">6392x</span>
  413. <span class="cline-any cline-yes">2275552x</span>
  414. <span class="cline-any cline-neutral">&nbsp;</span>
  415. <span class="cline-any cline-yes">6392x</span>
  416. <span class="cline-any cline-yes">6392x</span>
  417. <span class="cline-any cline-yes">1860x</span>
  418. <span class="cline-any cline-neutral">&nbsp;</span>
  419. <span class="cline-any cline-neutral">&nbsp;</span>
  420. <span class="cline-any cline-neutral">&nbsp;</span>
  421. <span class="cline-any cline-yes">6719x</span>
  422. <span class="cline-any cline-yes">6600x</span>
  423. <span class="cline-any cline-yes">6600x</span>
  424. <span class="cline-any cline-neutral">&nbsp;</span>
  425. <span class="cline-any cline-neutral">&nbsp;</span>
  426. <span class="cline-any cline-yes">6719x</span>
  427. <span class="cline-any cline-yes">6717x</span>
  428. <span class="cline-any cline-neutral">&nbsp;</span>
  429. <span class="cline-any cline-yes">6719x</span>
  430. <span class="cline-any cline-yes">1x</span>
  431. <span class="cline-any cline-neutral">&nbsp;</span>
  432. <span class="cline-any cline-yes">6718x</span>
  433. <span class="cline-any cline-yes">6718x</span>
  434. <span class="cline-any cline-yes">6718x</span>
  435. <span class="cline-any cline-yes">6718x</span>
  436. <span class="cline-any cline-yes">6718x</span>
  437. <span class="cline-any cline-neutral">&nbsp;</span>
  438. <span class="cline-any cline-yes">6718x</span>
  439. <span class="cline-any cline-yes">6718x</span>
  440. <span class="cline-any cline-yes">6718x</span>
  441. <span class="cline-any cline-yes">6718x</span>
  442. <span class="cline-any cline-yes">6718x</span>
  443. <span class="cline-any cline-yes">6718x</span>
  444. <span class="cline-any cline-yes">6718x</span>
  445. <span class="cline-any cline-yes">6718x</span>
  446. <span class="cline-any cline-yes">6718x</span>
  447. <span class="cline-any cline-yes">6718x</span>
  448. <span class="cline-any cline-yes">6718x</span>
  449. <span class="cline-any cline-yes">6718x</span>
  450. <span class="cline-any cline-yes">6718x</span>
  451. <span class="cline-any cline-yes">6718x</span>
  452. <span class="cline-any cline-yes">6718x</span>
  453. <span class="cline-any cline-yes">2x</span>
  454. <span class="cline-any cline-neutral">&nbsp;</span>
  455. <span class="cline-any cline-yes">6716x</span>
  456. <span class="cline-any cline-yes">6716x</span>
  457. <span class="cline-any cline-yes">6716x</span>
  458. <span class="cline-any cline-neutral">&nbsp;</span>
  459. <span class="cline-any cline-neutral">&nbsp;</span>
  460. <span class="cline-any cline-yes">6718x</span>
  461. <span class="cline-any cline-yes">6718x</span>
  462. <span class="cline-any cline-yes">994264x</span>
  463. <span class="cline-any cline-neutral">&nbsp;</span>
  464. <span class="cline-any cline-yes">6718x</span>
  465. <span class="cline-any cline-yes">2391608x</span>
  466. <span class="cline-any cline-neutral">&nbsp;</span>
  467. <span class="cline-any cline-yes">6718x</span>
  468. <span class="cline-any cline-yes">6718x</span>
  469. <span class="cline-any cline-yes">6718x</span>
  470. <span class="cline-any cline-neutral">&nbsp;</span>
  471. <span class="cline-any cline-yes">6718x</span>
  472. <span class="cline-any cline-neutral">&nbsp;</span>
  473. <span class="cline-any cline-neutral">&nbsp;</span>
  474. <span class="cline-any cline-neutral">&nbsp;</span>
  475. <span class="cline-any cline-yes">6728x</span>
  476. <span class="cline-any cline-yes">73451x</span>
  477. <span class="cline-any cline-yes">66740x</span>
  478. <span class="cline-any cline-neutral">&nbsp;</span>
  479. <span class="cline-any cline-neutral">&nbsp;</span>
  480. <span class="cline-any cline-neutral">&nbsp;</span>
  481. <span class="cline-any cline-neutral">&nbsp;</span>
  482. <span class="cline-any cline-yes">8178x</span>
  483. <span class="cline-any cline-neutral">&nbsp;</span>
  484. <span class="cline-any cline-neutral">&nbsp;</span>
  485. <span class="cline-any cline-neutral">&nbsp;</span>
  486. <span class="cline-any cline-yes">4x</span>
  487. <span class="cline-any cline-neutral">&nbsp;</span>
  488. <span class="cline-any cline-neutral">&nbsp;</span>
  489. <span class="cline-any cline-neutral">&nbsp;</span>
  490. <span class="cline-any cline-yes">6723x</span>
  491. <span class="cline-any cline-yes">6719x</span>
  492. <span class="cline-any cline-neutral">&nbsp;</span>
  493. <span class="cline-any cline-yes">4x</span>
  494. <span class="cline-any cline-neutral">&nbsp;</span>
  495. <span class="cline-any cline-neutral">&nbsp;</span>
  496. <span class="cline-any cline-neutral">&nbsp;</span>
  497. <span class="cline-any cline-yes">13x</span>
  498. <span class="cline-any cline-yes">6718x</span>
  499. <span class="cline-any cline-yes">6718x</span>
  500. <span class="cline-any cline-yes">6718x</span>
  501. <span class="cline-any cline-neutral">&nbsp;</span>
  502. <span class="cline-any cline-yes">6718x</span>
  503. <span class="cline-any cline-neutral">&nbsp;</span>
  504. <span class="cline-any cline-yes">6718x</span>
  505. <span class="cline-any cline-yes">6683x</span>
  506. <span class="cline-any cline-neutral">&nbsp;</span>
  507. <span class="cline-any cline-neutral">&nbsp;</span>
  508. <span class="cline-any cline-yes">35x</span>
  509. <span class="cline-any cline-yes">35x</span>
  510. <span class="cline-any cline-neutral">&nbsp;</span>
  511. <span class="cline-any cline-yes">35x</span>
  512. <span class="cline-any cline-neutral">&nbsp;</span>
  513. <span class="cline-any cline-yes">49x</span>
  514. <span class="cline-any cline-neutral">&nbsp;</span>
  515. <span class="cline-any cline-yes">21x</span>
  516. <span class="cline-any cline-neutral">&nbsp;</span>
  517. <span class="cline-any cline-neutral">&nbsp;</span>
  518. <span class="cline-any cline-yes">28x</span>
  519. <span class="cline-any cline-neutral">&nbsp;</span>
  520. <span class="cline-any cline-yes">13x</span>
  521. <span class="cline-any cline-neutral">&nbsp;</span>
  522. <span class="cline-any cline-neutral">&nbsp;</span>
  523. <span class="cline-any cline-neutral">&nbsp;</span>
  524. <span class="cline-any cline-yes">15x</span>
  525. <span class="cline-any cline-yes">15x</span>
  526. <span class="cline-any cline-neutral">&nbsp;</span>
  527. <span class="cline-any cline-neutral">&nbsp;</span>
  528. <span class="cline-any cline-neutral">&nbsp;</span>
  529. <span class="cline-any cline-neutral">&nbsp;</span>
  530. <span class="cline-any cline-yes">35x</span>
  531. <span class="cline-any cline-yes">1x</span>
  532. <span class="cline-any cline-neutral">&nbsp;</span>
  533. <span class="cline-any cline-yes">6718x</span>
  534. <span class="cline-any cline-neutral">&nbsp;</span>
  535. <span class="cline-any cline-neutral">&nbsp;</span>
  536. <span class="cline-any cline-yes">13x</span>
  537. <span class="cline-any cline-yes">32001x</span>
  538. <span class="cline-any cline-neutral">&nbsp;</span>
  539. <span class="cline-any cline-yes">13x</span>
  540. <span class="cline-any cline-yes">14938x</span>
  541. <span class="cline-any cline-neutral">&nbsp;</span>
  542. <span class="cline-any cline-yes">14938x</span>
  543. <span class="cline-any cline-neutral">&nbsp;</span>
  544. <span class="cline-any cline-yes">13x</span>
  545. <span class="cline-any cline-yes">55448x</span>
  546. <span class="cline-any cline-neutral">&nbsp;</span>
  547. <span class="cline-any cline-neutral">&nbsp;</span>
  548. <span class="cline-any cline-yes">55411x</span>
  549. <span class="cline-any cline-neutral">&nbsp;</span>
  550. <span class="cline-any cline-yes">13x</span>
  551. <span class="cline-any cline-yes">55411x</span>
  552. <span class="cline-any cline-neutral">&nbsp;</span>
  553. <span class="cline-any cline-neutral">&nbsp;</span>
  554. <span class="cline-any cline-neutral">&nbsp;</span>
  555. <span class="cline-any cline-neutral">&nbsp;</span>
  556. <span class="cline-any cline-yes">13x</span>
  557. <span class="cline-any cline-neutral">&nbsp;</span>
  558. <span class="cline-any cline-neutral">&nbsp;</span>
  559. <span class="cline-any cline-neutral">&nbsp;</span>
  560. <span class="cline-any cline-neutral">&nbsp;</span>
  561. <span class="cline-any cline-yes">13x</span>
  562. <span class="cline-any cline-yes">66910x</span>
  563. <span class="cline-any cline-neutral">&nbsp;</span>
  564. <span class="cline-any cline-neutral">&nbsp;</span>
  565. <span class="cline-any cline-neutral">&nbsp;</span>
  566. <span class="cline-any cline-neutral">&nbsp;</span>
  567. <span class="cline-any cline-yes">13x</span>
  568. <span class="cline-any cline-yes">66615x</span>
  569. <span class="cline-any cline-neutral">&nbsp;</span>
  570. <span class="cline-any cline-yes">13x</span>
  571. <span class="cline-any cline-yes">66615x</span>
  572. <span class="cline-any cline-neutral">&nbsp;</span>
  573. <span class="cline-any cline-yes">13x</span>
  574. <span class="cline-any cline-yes">66615x</span>
  575. <span class="cline-any cline-neutral">&nbsp;</span>
  576. <span class="cline-any cline-neutral">&nbsp;</span>
  577. <span class="cline-any cline-yes">13x</span>
  578. <span class="cline-any cline-yes">20150x</span>
  579. <span class="cline-any cline-neutral">&nbsp;</span>
  580. <span class="cline-any cline-neutral">&nbsp;</span>
  581. <span class="cline-any cline-neutral">&nbsp;</span>
  582. <span class="cline-any cline-yes">13x</span>
  583. <span class="cline-any cline-neutral">&nbsp;</span>
  584. <span class="cline-any cline-yes">13x</span>
  585. <span class="cline-any cline-yes">40308x</span>
  586. <span class="cline-any cline-neutral">&nbsp;</span>
  587. <span class="cline-any cline-neutral">&nbsp;</span>
  588. <span class="cline-any cline-neutral">&nbsp;</span>
  589. <span class="cline-any cline-yes">13x</span>
  590. <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">'use strict'
  591. // parse a 512-byte header block to a data object, or vice-versa
  592. // encode returns `true` if a pax extended header is needed, because
  593. // the data could not be faithfully encoded in a simple header.
  594. // (Also, check header.needPax to see if it needs a pax header.)
  595. &nbsp;
  596. const types = require('./types.js')
  597. const pathModule = require('path')
  598. const large = require('./large-numbers.js')
  599. &nbsp;
  600. const TYPE = Symbol('type')
  601. &nbsp;
  602. class Header {
  603. constructor (data, off) {
  604. this.cksumValid = false
  605. this.needPax = false
  606. this.nullBlock = false
  607. &nbsp;
  608. this.block = null
  609. this.path = null
  610. this.mode = null
  611. this.uid = null
  612. this.gid = null
  613. this.size = null
  614. this.mtime = null
  615. this.cksum = null
  616. this[TYPE] = '0'
  617. this.linkpath = null
  618. this.uname = null
  619. this.gname = null
  620. this.devmaj = 0
  621. this.devmin = 0
  622. this.atime = null
  623. this.ctime = null
  624. &nbsp;
  625. if (Buffer.isBuffer(data)) {
  626. this.decode(data, off || 0)
  627. } else if (data)
  628. this.set(data)
  629. }
  630. &nbsp;
  631. decode (buf, off) {
  632. if (!off)
  633. off = 0
  634. &nbsp;
  635. if (!buf || !(buf.length &gt;= off + 512))
  636. throw new Error('need 512 bytes for header')
  637. &nbsp;
  638. this.path = decString(buf, off, 100)
  639. this.mode = decNumber(buf, off + 100, 8)
  640. this.uid = decNumber(buf, off + 108, 8)
  641. this.gid = decNumber(buf, off + 116, 8)
  642. this.size = decNumber(buf, off + 124, 12)
  643. this.mtime = decDate(buf, off + 136, 12)
  644. this.cksum = decNumber(buf, off + 148, 12)
  645. &nbsp;
  646. // old tar versions marked dirs as a file with a trailing /
  647. this[TYPE] = decString(buf, off + 156, 1)
  648. if (this[TYPE] === '')
  649. this[TYPE] = '0'
  650. if (this[TYPE] === '0' &amp;&amp; this.path.substr(-1) === '/')
  651. this[TYPE] = '5'
  652. &nbsp;
  653. // tar implementations sometimes incorrectly put the stat(dir).size
  654. // as the size in the tarball, even though Directory entries are
  655. // not able to have any body at all. In the very rare chance that
  656. // it actually DOES have a body, we weren't going to do anything with
  657. // it anyway, and it'll just be a warning about an invalid header.
  658. if (this[TYPE] === '5')
  659. this.size = 0
  660. &nbsp;
  661. this.linkpath = decString(buf, off + 157, 100)
  662. if (buf.slice(off + 257, off + 265).toString() === 'ustar\u000000') {
  663. this.uname = decString(buf, off + 265, 32)
  664. this.gname = decString(buf, off + 297, 32)
  665. this.devmaj = decNumber(buf, off + 329, 8)
  666. this.devmin = decNumber(buf, off + 337, 8)
  667. if (buf[off + 475] !== 0) {
  668. // definitely a prefix, definitely &gt;130 chars.
  669. const prefix = decString(buf, off + 345, 155)
  670. this.path = prefix + '/' + this.path
  671. } else {
  672. const prefix = decString(buf, off + 345, 130)
  673. if (prefix)
  674. this.path = prefix + '/' + this.path
  675. this.atime = decDate(buf, off + 476, 12)
  676. this.ctime = decDate(buf, off + 488, 12)
  677. }
  678. }
  679. &nbsp;
  680. let sum = 8 * 0x20
  681. for (let i = off; i &lt; off + 148; i++) {
  682. sum += buf[i]
  683. }
  684. for (let i = off + 156; i &lt; off + 512; i++) {
  685. sum += buf[i]
  686. }
  687. this.cksumValid = sum === this.cksum
  688. if (this.cksum === null &amp;&amp; sum === 8 * 0x20)
  689. this.nullBlock = true
  690. }
  691. &nbsp;
  692. encode (buf, off) {
  693. if (!buf) {
  694. buf = this.block = Buffer.alloc(512)
  695. off = 0
  696. }
  697. &nbsp;
  698. if (!off)
  699. off = 0
  700. &nbsp;
  701. if (!(buf.length &gt;= off + 512))
  702. throw new Error('need 512 bytes for header')
  703. &nbsp;
  704. const prefixSize = this.ctime || this.atime ? 130 : 155
  705. const split = splitPrefix(this.path || '', prefixSize)
  706. const path = split[0]
  707. const prefix = split[1]
  708. this.needPax = split[2]
  709. &nbsp;
  710. this.needPax = encString(buf, off, 100, path) || this.needPax
  711. this.needPax = encNumber(buf, off + 100, 8, this.mode) || this.needPax
  712. this.needPax = encNumber(buf, off + 108, 8, this.uid) || this.needPax
  713. this.needPax = encNumber(buf, off + 116, 8, this.gid) || this.needPax
  714. this.needPax = encNumber(buf, off + 124, 12, this.size) || this.needPax
  715. this.needPax = encDate(buf, off + 136, 12, this.mtime) || this.needPax
  716. buf[off + 156] = this[TYPE].charCodeAt(0)
  717. this.needPax = encString(buf, off + 157, 100, this.linkpath) || this.needPax
  718. buf.write('ustar\u000000', off + 257, 8)
  719. this.needPax = encString(buf, off + 265, 32, this.uname) || this.needPax
  720. this.needPax = encString(buf, off + 297, 32, this.gname) || this.needPax
  721. this.needPax = encNumber(buf, off + 329, 8, this.devmaj) || this.needPax
  722. this.needPax = encNumber(buf, off + 337, 8, this.devmin) || this.needPax
  723. this.needPax = encString(buf, off + 345, prefixSize, prefix) || this.needPax
  724. if (buf[off + 475] !== 0)
  725. this.needPax = encString(buf, off + 345, 155, prefix) || this.needPax
  726. else {
  727. this.needPax = encString(buf, off + 345, 130, prefix) || this.needPax
  728. this.needPax = encDate(buf, off + 476, 12, this.atime) || this.needPax
  729. this.needPax = encDate(buf, off + 488, 12, this.ctime) || this.needPax
  730. }
  731. &nbsp;
  732. let sum = 8 * 0x20
  733. for (let i = off; i &lt; off + 148; i++) {
  734. sum += buf[i]
  735. }
  736. for (let i = off + 156; i &lt; off + 512; i++) {
  737. sum += buf[i]
  738. }
  739. this.cksum = sum
  740. encNumber(buf, off + 148, 8, this.cksum)
  741. this.cksumValid = true
  742. &nbsp;
  743. return this.needPax
  744. }
  745. &nbsp;
  746. set (data) {
  747. for (let i in data) {
  748. if (data[i] !== null &amp;&amp; data[i] !== undefined)
  749. this[i] = data[i]
  750. }
  751. }
  752. &nbsp;
  753. get type () {
  754. return types.name.get(this[TYPE]) || this[TYPE]
  755. }
  756. &nbsp;
  757. get typeKey () {
  758. return this[TYPE]
  759. }
  760. &nbsp;
  761. set type (type) {
  762. if (types.code.has(type))
  763. this[TYPE] = types.code.get(type)
  764. else
  765. this[TYPE] = type
  766. }
  767. }
  768. &nbsp;
  769. const splitPrefix = (p, prefixSize) =&gt; {
  770. const pathSize = 100
  771. let pp = p
  772. let prefix = ''
  773. let ret
  774. const root = pathModule.parse(p).root || '.'
  775. &nbsp;
  776. if (Buffer.byteLength(pp) &lt; pathSize)
  777. ret = [pp, prefix, false]
  778. else {
  779. // first set prefix to the dir, and path to the base
  780. prefix = pathModule.dirname(pp)
  781. pp = pathModule.basename(pp)
  782. &nbsp;
  783. do {
  784. // both fit!
  785. if (Buffer.byteLength(pp) &lt;= pathSize &amp;&amp;
  786. Buffer.byteLength(prefix) &lt;= prefixSize)
  787. ret = [pp, prefix, false]
  788. &nbsp;
  789. // prefix fits in prefix, but path doesn't fit in path
  790. else if (Buffer.byteLength(pp) &gt; pathSize &amp;&amp;
  791. Buffer.byteLength(prefix) &lt;= prefixSize)
  792. ret = [pp.substr(0, pathSize - 1), prefix, true]
  793. &nbsp;
  794. else {
  795. // make path take a bit from prefix
  796. pp = pathModule.join(pathModule.basename(prefix), pp)
  797. prefix = pathModule.dirname(prefix)
  798. }
  799. } while (prefix !== root &amp;&amp; !ret)
  800. &nbsp;
  801. // at this point, found no resolution, just truncate
  802. if (!ret)
  803. ret = [p.substr(0, pathSize - 1), '', true]
  804. }
  805. return ret
  806. }
  807. &nbsp;
  808. const decString = (buf, off, size) =&gt;
  809. buf.slice(off, off + size).toString('utf8').replace(/\0.*/, '')
  810. &nbsp;
  811. const decDate = (buf, off, size) =&gt;
  812. numToDate(decNumber(buf, off, size))
  813. &nbsp;
  814. const numToDate = num =&gt; num === null ? null : new Date(num * 1000)
  815. &nbsp;
  816. const decNumber = (buf, off, size) =&gt;
  817. buf[off] &amp; 0x80 ? large.parse(buf.slice(off, off + size))
  818. : decSmallNumber(buf, off, size)
  819. &nbsp;
  820. const nanNull = value =&gt; isNaN(value) ? null : value
  821. &nbsp;
  822. const decSmallNumber = (buf, off, size) =&gt;
  823. nanNull(parseInt(
  824. buf.slice(off, off + size)
  825. .toString('utf8').replace(/\0.*$/, '').trim(), 8))
  826. &nbsp;
  827. // the maximum encodable as a null-terminated octal, by field size
  828. const MAXNUM = {
  829. 12: 0o77777777777,
  830. 8 : 0o7777777
  831. }
  832. &nbsp;
  833. const encNumber = (buf, off, size, number) =&gt;
  834. number === null ? false :
  835. number &gt; MAXNUM[size] || number &lt; 0
  836. ? (large.encode(number, buf.slice(off, off + size)), true)
  837. : (encSmallNumber(buf, off, size, number), false)
  838. &nbsp;
  839. const encSmallNumber = (buf, off, size, number) =&gt;
  840. buf.write(octalString(number, size), off, size, 'ascii')
  841. &nbsp;
  842. const octalString = (number, size) =&gt;
  843. padOctal(Math.floor(number).toString(8), size)
  844. &nbsp;
  845. const padOctal = (string, size) =&gt;
  846. (string.length === size - 1 ? string
  847. : new Array(size - string.length - 1).join('0') + string + ' ') + '\0'
  848. &nbsp;
  849. const encDate = (buf, off, size, date) =&gt;
  850. date === null ? false :
  851. encNumber(buf, off, size, date.getTime() / 1000)
  852. &nbsp;
  853. // enough to fill the longest string we've got
  854. const NULLS = new Array(156).join('\0')
  855. // pad with nulls, return true if it's longer or non-ascii
  856. const encString = (buf, off, size, string) =&gt;
  857. string === null ? false :
  858. (buf.write(string + NULLS, off, size, 'utf8'),
  859. string.length !== Buffer.byteLength(string) || string.length &gt; size)
  860. &nbsp;
  861. module.exports = Header
  862. &nbsp;</pre></td></tr>
  863. </table></pre>
  864. <div class='push'></div><!-- for sticky footer -->
  865. </div><!-- /wrapper -->
  866. <div class='footer quiet pad2 space-top1 center small'>
  867. Code coverage
  868. generated by <a href="https://istanbul.js.org/" target="_blank">istanbul</a> at Mon Nov 20 2017 16:00:38 GMT-0800 (PST)
  869. </div>
  870. </div>
  871. <script src="../../prettify.js"></script>
  872. <script>
  873. window.onload = function () {
  874. if (typeof prettyPrint === 'function') {
  875. prettyPrint();
  876. }
  877. };
  878. </script>
  879. <script src="../../sorter.js"></script>
  880. </body>
  881. </html>