541 |
541 |
542 let mut dest = vec![0; MAXSTOREPATHLEN]; |
542 let mut dest = vec![0; MAXSTOREPATHLEN]; |
543 memcopy(Some(&mut dest), &mut destlen, b"dh/"); |
543 memcopy(Some(&mut dest), &mut destlen, b"dh/"); |
544 |
544 |
545 if let Some(last_slash) = last_slash { |
545 if let Some(last_slash) = last_slash { |
546 let mut first = true; |
|
547 for slice in src[..last_slash].split(|b| *b == b'/') { |
546 for slice in src[..last_slash].split(|b| *b == b'/') { |
548 let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)]; |
547 let slice = &slice[..std::cmp::min(slice.len(), dirprefixlen)]; |
549 if destlen + (slice.len() + if first { 0 } else { 1 }) |
548 if destlen + slice.len() > maxshortdirslen + 3 { |
550 > maxshortdirslen + 3 |
|
551 { |
|
552 break; |
549 break; |
553 } else { |
550 } else { |
554 if !first { |
|
555 charcopy(Some(&mut dest), &mut destlen, b'/') |
|
556 }; |
|
557 memcopy(Some(&mut dest), &mut destlen, slice); |
551 memcopy(Some(&mut dest), &mut destlen, slice); |
558 if dest[destlen - 1] == b'.' || dest[destlen - 1] == b' ' { |
552 if dest[destlen - 1] == b'.' || dest[destlen - 1] == b' ' { |
559 dest[destlen - 1] = b'_' |
553 dest[destlen - 1] = b'_' |
560 } |
554 } |
561 } |
555 } |
562 first = false; |
|
563 } |
|
564 if !first { |
|
565 charcopy(Some(&mut dest), &mut destlen, b'/'); |
556 charcopy(Some(&mut dest), &mut destlen, b'/'); |
566 } |
557 } |
567 } |
558 } |
568 |
559 |
569 let used = destlen + 40 + { |
560 let used = destlen + 40 + { |