Show More
@@ -45,6 +45,38 b' fn inset(bitset: &[u32; 8], c: u8) -> bo' | |||
|
45 | 45 | bitset[(c as usize) >> 5] & (1 << (c & 31)) != 0 |
|
46 | 46 | } |
|
47 | 47 | |
|
48 | const MAXENCODE: usize = 4096 * 4; | |
|
49 | ||
|
50 | struct DestArr { | |
|
51 | buf: [u8; MAXENCODE], | |
|
52 | pub len: usize, | |
|
53 | } | |
|
54 | ||
|
55 | impl DestArr { | |
|
56 | pub fn create() -> Self { | |
|
57 | DestArr { | |
|
58 | buf: [0; MAXENCODE], | |
|
59 | len: 0, | |
|
60 | } | |
|
61 | } | |
|
62 | ||
|
63 | pub fn contents(&self) -> &[u8] { | |
|
64 | &self.buf[..self.len] | |
|
65 | } | |
|
66 | } | |
|
67 | ||
|
68 | impl Sink for DestArr { | |
|
69 | fn write_byte(&mut self, c: u8) { | |
|
70 | self.buf[self.len] = c; | |
|
71 | self.len += 1; | |
|
72 | } | |
|
73 | ||
|
74 | fn write_bytes(&mut self, src: &[u8]) { | |
|
75 | self.buf[self.len..self.len + src.len()].copy_from_slice(src); | |
|
76 | self.len += src.len(); | |
|
77 | } | |
|
78 | } | |
|
79 | ||
|
48 | 80 | struct Dest<'a> { |
|
49 | 81 | dest: Option<&'a mut [u8]>, |
|
50 | 82 | pub len: usize, |
@@ -567,26 +599,19 b' fn hash_mangle(src: &[u8], sha: &[u8]) -' | |||
|
567 | 599 | } |
|
568 | 600 | } |
|
569 | 601 | |
|
570 | const MAXENCODE: usize = 4096 * 4; | |
|
571 | 602 | fn hash_encode(src: &[u8]) -> Vec<u8> { |
|
572 | let dired = &mut [0; MAXENCODE]; | |
|
573 |
let mut |
|
|
574 | let lowered = &mut [0; MAXENCODE]; | |
|
575 | let mut lowered_dest = Dest::create(lowered); | |
|
576 | let auxed = &mut [0; MAXENCODE]; | |
|
577 | let mut auxed_dest = Dest::create(auxed); | |
|
603 | let mut dired = DestArr::create(); | |
|
604 | let mut lowered = DestArr::create(); | |
|
605 | let mut auxed = DestArr::create(); | |
|
578 | 606 | let baselen = (src.len() - 5) * 3; |
|
579 | 607 | if baselen >= MAXENCODE { |
|
580 | 608 | panic!("path_encode::hash_encore: string too long: {}", baselen) |
|
581 | 609 | }; |
|
582 |
encode_dir(&mut dired |
|
|
583 | let dirlen = dired_dest.len; | |
|
584 | let sha = Sha1::digest(&dired[..dirlen]); | |
|
585 | lower_encode(&mut lowered_dest, &dired[..dirlen][5..]); | |
|
586 | let lowerlen = lowered_dest.len; | |
|
587 | aux_encode(&mut auxed_dest, &lowered[..lowerlen]); | |
|
588 | let auxlen = auxed_dest.len; | |
|
589 | hash_mangle(&auxed[..auxlen], &sha) | |
|
610 | encode_dir(&mut dired, src); | |
|
611 | let sha = Sha1::digest(dired.contents()); | |
|
612 | lower_encode(&mut lowered, &dired.contents()[5..]); | |
|
613 | aux_encode(&mut auxed, lowered.contents()); | |
|
614 | hash_mangle(auxed.contents(), &sha) | |
|
590 | 615 | } |
|
591 | 616 | |
|
592 | 617 | pub fn path_encode(path: &[u8]) -> Vec<u8> { |
General Comments 0
You need to be logged in to leave comments.
Login now