Show More
@@ -527,9 +527,14 b' fn hash_mangle(src: &[u8], sha: &[u8]) -' | |||
|
527 | 527 | let maxshortdirslen = 68; |
|
528 | 528 | |
|
529 | 529 | let last_slash = src.iter().rposition(|b| *b == b'/'); |
|
530 | let last_dot: Option<usize> = { | |
|
531 | let s = last_slash.unwrap_or(0); | |
|
532 | src[s..].iter().rposition(|b| *b == b'.').map(|i| i + s) | |
|
530 | let basename_start = match last_slash { | |
|
531 | Some(slash) => slash + 1, | |
|
532 | None => 0, | |
|
533 | }; | |
|
534 | let basename = &src[basename_start..]; | |
|
535 | let ext = match basename.iter().rposition(|b| *b == b'.') { | |
|
536 | None => &[], | |
|
537 | Some(dot) => &basename[dot..], | |
|
533 | 538 | }; |
|
534 | 539 | |
|
535 | 540 | let mut dest = Vec::with_capacity(MAXSTOREPATHLEN); |
@@ -547,35 +552,17 b' fn hash_mangle(src: &[u8], sha: &[u8]) -' | |||
|
547 | 552 | } |
|
548 | 553 | } |
|
549 | 554 | |
|
550 |
let used = dest.len() + 40 + |
|
|
551 | if let Some(l) = last_dot { | |
|
552 | src.len() - l | |
|
553 | } else { | |
|
554 | 0 | |
|
555 | } | |
|
556 | }; | |
|
555 | let used = dest.len() + 40 + ext.len(); | |
|
557 | 556 | |
|
558 | 557 | if MAXSTOREPATHLEN > used { |
|
559 | 558 | let slop = MAXSTOREPATHLEN - used; |
|
560 | let basenamelen = match last_slash { | |
|
561 | Some(l) => src.len() - l - 1, | |
|
562 | None => src.len(), | |
|
563 | }; | |
|
564 | let basenamelen = std::cmp::min(basenamelen, slop); | |
|
565 | if basenamelen > 0 { | |
|
566 | let start = match last_slash { | |
|
567 | Some(l) => l + 1, | |
|
568 | None => 0, | |
|
569 | }; | |
|
570 | dest.write_bytes(&src[start..][..basenamelen]) | |
|
571 | } | |
|
559 | let len = std::cmp::min(basename.len(), slop); | |
|
560 | dest.write_bytes(&basename[..len]) | |
|
572 | 561 | } |
|
573 | 562 | for c in sha { |
|
574 | 563 | hexencode(&mut dest, *c); |
|
575 | 564 | } |
|
576 | if let Some(l) = last_dot { | |
|
577 | dest.write_bytes(&src[l..]); | |
|
578 | } | |
|
565 | dest.write_bytes(ext); | |
|
579 | 566 | dest.shrink_to_fit(); |
|
580 | 567 | dest |
|
581 | 568 | } |
General Comments 0
You need to be logged in to leave comments.
Login now