| line | true | false | branch | 
 
| 26 | 2111676 | 0 | if (ofs) { | 
 
| 28 | 2108358 | 3318 | if (utf8_default) { | 
 
| 40 | 18 | 2111658 | if (is_utf8 > 1) { | 
 
| 44 | 3540 | 2108118 | if (is_utf8) { | 
 
| 48 | 2108118 | 0 | if (ptr) { | 
 
| 60 | 270 | 905004 | if (index >= mph->num_buckets) { | 
 
| 65 | 0 | 905004 | if (val_sv) { | 
 
| 69 | 905004 | 0 | if (key_sv) { | 
 
| 92 | 1992 | 1204680 | if (SvUTF8(key_sv)) { | 
 
| 97 | 1206672 | 0 | key_pv= SvPV(key_sv,key_len); | 
 
| 103 | 0 | 1206672 | if (!bucket->xor_val) | 
 
| 107 | 443624 | 763048 | if ( bucket->index < 0 ) { | 
 
| 114 | 1206672 | 0 | if (bucket->key_len == key_len && memEQ(key_pv,got_key_pv,key_len)) { | 
 
|  | 1206672 | 0 | if (bucket->key_len == key_len && memEQ(key_pv,got_key_pv,key_len)) { | 
 
| 115 | 1206672 | 0 | if (val_sv) { | 
 
| 133 | 366 | 0 | if (error) | 
 
| 135 | 0 | 366 | if (fd < 0) { | 
 
| 136 | 0 | 0 | if (error) | 
 
| 140 | 0 | 366 | if (fstat(fd,&st)==-1) { | 
 
| 141 | 0 | 0 | if (error) | 
 
| 145 | 0 | 366 | if (st.st_size < sizeof(struct mph_header)) { | 
 
| 146 | 0 | 0 | if (error) | 
 
| 152 | 0 | 366 | if (ptr == MAP_FAILED) { | 
 
| 153 | 0 | 0 | if (error) | 
 
| 160 | 5 | 361 | if (head->magic_num != MAGIC_DECIMAL) { | 
 
| 161 | 0 | 5 | if (head->magic_num == MAGIC_BIG_ENDIAN_DECIMAL) { | 
 
| 162 | 0 | 0 | if (error) | 
 
| 165 | 5 | 0 | if (error) | 
 
| 169 | 0 | 361 | if (head->variant < MIN_VARIANT) { | 
 
| 170 | 0 | 0 | if (error) | 
 
| 174 | 4 | 357 | if (head->variant > MAX_VARIANT) { | 
 
| 175 | 4 | 0 | if (error) | 
 
| 181 | 0 | 357 | if (st.st_size % alignment) { | 
 
| 182 | 0 | 0 | if (error) | 
 
| 186 | 354 | 3 | if ( | 
 
| 187 | 350 | 4 | head->table_ofs < head->state_ofs           || | 
 
| 188 | 346 | 4 | head->key_flags_ofs < head->table_ofs       || | 
 
| 189 | 342 | 4 | head->val_flags_ofs < head->key_flags_ofs   || | 
 
| 190 | 3 | 339 | head->str_buf_ofs < head->val_flags_ofs     || | 
 
| 193 | 18 | 0 | if (error) | 
 
| 197 | 249 | 90 | if (flags & MPH_F_VALIDATE) { | 
 
| 205 | 158 | 91 | if (have_file_checksum != want_file_checksum) { | 
 
| 206 | 158 | 0 | if (error) | 
 
| 223 | 1 | 603401 | if (SvROK(sv)) { | 
 
| 227 | 0 | 603401 | if (SvOK(sv)) { | 
 
|  | 0 | 0 | if (SvOK(sv)) { | 
 
|  | 0 | 0 | if (SvOK(sv)) { | 
 
| 229 | 553225 | 50176 | char *pv= SvPV(sv,pv_len); | 
 
| 230 | 1 | 603400 | if (pv_len > 0xFFFF) | 
 
| 232 | 1030 | 602370 | if (SvUTF8(sv)) { | 
 
| 233 | 506 | 524 | if (downgrade) | 
 
| 235 | 1021 | 9 | if (SvUTF8(normalized_sv)) { | 
 
| 252 | 246 | 300 | if (r) { | 
 
| 278 | 301701 | 93 | while (he= hv_iternext(source_hv)) { | 
 
| 291 | 0 | 301701 | if (!val_sv) croak("panic: no sv for value?"); | 
 
| 292 | 0 | 301701 | if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; | 
 
|  | 0 | 0 | if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; | 
 
|  | 0 | 0 | if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; | 
 
|  | 0 | 0 | if (!SvOK(val_sv) && (compute_flags & MPH_F_FILTER_UNDEF)) continue; | 
 
| 315 | 301699 | 0 | key_pv= (U8 *)SvPV(key_normalized_sv,key_len); | 
 
| 320 | 93 | 0 | if (buf_length_sv) | 
 
| 331 | 301697 | 93 | for (i=0; i | 
 
| 342 | 301697 | 0 | if (!got_psv || !SvROK(*got_psv)) croak("panic: bad item in keys_av"); | 
 
|  | 0 | 301697 | if (!got_psv || !SvROK(*got_psv)) croak("panic: bad item in keys_av"); | 
 
| 345 | 0 | 301697 | if (!h0_he) croak("panic: no h0_he?"); | 
 
| 347 | 150572 | 151125 | h0= SvUV(h0_sv); | 
 
| 353 | 0 | 301697 | if (!got_psv) | 
 
| 355 | 190715 | 110982 | if (!SvPOK(*got_psv)) | 
 
| 360 | 0 | 301697 | if (!got_psv) | 
 
| 363 | 190715 | 110982 | if (!SvROK(*got_psv)) { | 
 
| 381 | 301644 | 93 | for( i = 0 ; i < keybuckets_count ; i++ ) { | 
 
| 387 | 110929 | 190715 | if (!got) continue; | 
 
| 390 | 0 | 190715 | if (len<1) continue; | 
 
| 393 | 190396 | 319 | if (SvPOK(*got)) { | 
 
| 410 | 0 | 190715 | if (!buckets_rvp) croak("panic: out of memory in buckets_av lvalue fetch"); | 
 
| 411 | 84805 | 105910 | if (!SvROK(*buckets_rvp)) { | 
 
| 413 | 0 | 84805 | if (!idx1_hv) croak("panic: out of memory creating new hash in buckets_av idx %u",idx1); | 
 
| 421 | 190715 | 0 | hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_XOR_VAL,xor_val); | 
 
| 422 | 190715 | 0 | hv_setuv_with_keysv(idx1_hv,MPH_KEYSV_H1_KEYS,keys_in_bucket_count); | 
 
| 425 | 301697 | 190715 | for (i= 0, idx2= idx_start; i < keys_in_bucket_count; i++,idx2++) { | 
 
| 433 | 0 | 301697 | if (!keys_rvp) croak("panic: no key_info in bucket %d", i); | 
 
| 437 | 0 | 301697 | if (!buckets_rvp) croak("panic: out of memory in lvalue fetch to buckets_av"); | 
 
| 439 | 216892 | 84805 | if (!SvROK(*buckets_rvp)) { | 
 
| 444 | 84805 | 0 | hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_XOR_VAL); | 
 
| 445 | 84805 | 0 | hv_copy_with_keysv(idx2_hv,keys_hv,MPH_KEYSV_H1_KEYS); | 
 
| 453 | 301697 | 0 | hv_setuv_with_keysv(keys_hv,MPH_KEYSV_IDX,*idx2); | 
 
| 462 | 226 | 0 | U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len); | 
 
| 466 | 79795 | 226 | for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) { | 
 
| 478 | 0 | 79795 | if (!got) | 
 
| 483 | 0 | 79795 | if (!got) | 
 
| 487 | 79795 | 0 | h2_start= (U32 *)SvPV(h2_sv,h2_strlen); | 
 
| 495 | 0 | 244616 | if (xor_val == max_xor_val) { | 
 
| 497 | 0 | 0 | while (h2_ptr < h2_end) | 
 
| 503 | 418752 | 79795 | while (h2_ptr < h2_end) { | 
 
| 507 | 164775 | 253977 | if (is_used[idx2]) | 
 
| 509 | 155533 | 253931 | for (check_idx= idx2_start; check_idx < idx2_ptr; check_idx++) { | 
 
| 510 | 46 | 155487 | if (*check_idx == idx2) | 
 
| 527 | 93 | 0 | U32 *idx1_start= (U32 *)SvPV(idx1_packed_sv,idx1_packed_sv_len); | 
 
| 533 | 110920 | 93 | for (idx1_ptr= idx1_start; idx1_ptr < idx1_end; idx1_ptr++) { | 
 
| 539 | 412354 | 0 | while (singleton_pos < bucket_count && is_used[singleton_pos]) { | 
 
|  | 301434 | 110920 | while (singleton_pos < bucket_count && is_used[singleton_pos]) { | 
 
| 542 | 0 | 110920 | if (singleton_pos == bucket_count) { | 
 
| 549 | 0 | 110920 | if (!got) | 
 
| 572 | 0 | 93 | Newxz(idx2_start, av_top_index(by_length_av)+1, U32); | 
 
| 576 | 339 | 93 | for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) { | 
 
|  | 339 | 0 | for (len_idx= av_top_index(by_length_av); len_idx > 0 && !bad_idx; len_idx--) { | 
 
| 581 | 319 | 20 | if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv)) | 
 
|  | 0 | 319 | if (!idx1_packed_sv || !SvPOK(*idx1_packed_sv)) | 
 
| 584 | 93 | 226 | if (len_idx == 1) { | 
 
| 658 | 3 | 0 | U8 *str_pv= (U8 *)SvPV(str_sv,str_len); | 
 
| 659 | 3 | 0 | state_pv= (U8 *)SvPV(state_sv,state_len); | 
 
| 660 | 0 | 3 | if (state_len != MPH_STATE_BYTES) { | 
 
| 680 | 0 | 96 | if (!SvOK(base_seed_sv)) | 
 
|  | 0 | 0 | if (!SvOK(base_seed_sv)) | 
 
|  | 0 | 0 | if (!SvOK(base_seed_sv)) | 
 
| 682 | 0 | 96 | if (SvROK(base_seed_sv)) | 
 
| 685 | 96 | 0 | seed_pv= (U8 *)SvPV(seed_sv,seed_len); | 
 
| 687 | 0 | 96 | if (seed_len != MPH_SEED_BYTES) { | 
 
| 688 | 0 | 0 | if (SvREADONLY(base_seed_sv)) { | 
 
| 689 | 0 | 0 | if (seed_len < MPH_SEED_BYTES) { | 
 
| 693 | 0 | 0 | else if (seed_len > MPH_SEED_BYTES) { | 
 
| 699 | 0 | 0 | if (seed_len < MPH_SEED_BYTES) { | 
 
| 701 | 0 | 0 | while (seed_len < MPH_SEED_BYTES) { | 
 
| 707 | 0 | 0 | seed_pv= (U8 *)SvPV(seed_sv,seed_len); | 
 
| 715 | 96 | 0 | state_pv= (U8 *)SvPV(RETVAL,state_len); | 
 
| 758 | 95 | 0 | if (he) { | 
 
| 759 | 0 | 95 | variant= SvUV(HeVAL(he)); | 
 
| 765 | 95 | 0 | if (he) { | 
 
| 766 | 0 | 95 | compute_flags= SvUV(HeVAL(he)); | 
 
| 772 | 95 | 0 | if (he) { | 
 
| 774 | 95 | 0 | state_pv= (U8 *)SvPV(state_sv,state_len); | 
 
| 775 | 0 | 95 | if (state_len != MPH_STATE_BYTES) { | 
 
| 783 | 95 | 0 | if (he) { | 
 
| 790 | 95 | 0 | if (he) { | 
 
| 797 | 95 | 0 | if (he) { | 
 
| 799 | 0 | 95 | if (SvROK(rv)) { | 
 
| 820 | 46 | 47 | if (compute_flags & MPH_F_DETERMINISTIC) | 
 
| 863 | 0 | 91 | U32 buf_length= SvUV(buf_length_sv); | 
 
| 867 | 91 | 0 | char *state_pv= SvPV(state_sv, state_len); | 
 
| 874 | 0 | 91 | U32 str_rlen= _roundup( buf_length | 
 
| 876 | 0 | 0 | + ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 ) | 
 
|  | 0 | 0 | + ( SvOK(comment_sv) ? sv_len(comment_sv) + 1 : 1 ) | 
 
| 902 | 301673 | 91 | for (i= 0; i < bucket_count; i++) { | 
 
| 907 | 0 | 301673 | key_is_utf8_count[SvUV(HeVAL(key_is_utf8_he))]++; | 
 
| 908 | 0 | 301673 | val_is_utf8_count[SvUV(HeVAL(val_is_utf8_he))]++; | 
 
| 911 | 73 | 18 | if (key_is_utf8_count[0]) { the_flag= 0; used_flags++; } | 
 
| 912 | 42 | 49 | if (key_is_utf8_count[1]) { the_flag= 1; used_flags++; } | 
 
| 913 | 6 | 85 | if (key_is_utf8_count[2]) { the_flag= 2; used_flags++; } | 
 
| 914 | 67 | 24 | if (used_flags == 1) { | 
 
| 919 | 73 | 18 | if (val_is_utf8_count[0]) { the_flag= 0; used_flags++; } | 
 
| 920 | 42 | 49 | if (val_is_utf8_count[1]) { the_flag= 1; used_flags++; } | 
 
| 921 | 67 | 24 | if (used_flags == 1) { | 
 
| 951 | 67 | 24 | if (val_is_utf8_generic >= 0) | 
 
| 953 | 67 | 24 | if (key_is_utf8_generic >= 0) | 
 
| 965 | 91 | 0 | pv= SvPV(comment_sv,pv_len); | 
 
| 969 | 301673 | 91 | for (i= 0; i < bucket_count; i++) { | 
 
| 976 | 190698 | 110975 | if (xor_val_he) { | 
 
| 977 | 0 | 190698 | table[i].xor_val= SvUV(HeVAL(xor_val_he)); | 
 
| 981 | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,key_normalized_he,table,key_ofs,key_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
| 982 | 301673 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301673 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 301673 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 485 | 301188 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 485 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 485 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 301188 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 485 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 485 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 0 | 485 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
|  | 485 | 0 | SETOFS(i,val_normalized_he,table,val_ofs,val_len,str_buf_start,str_buf_pos,str_buf_end,str_ofs_hv); | 
 
| 983 | 474 | 301199 | if ( key_is_utf8_generic < 0) { | 
 
| 985 | 474 | 0 | if (key_is_utf8_he) { | 
 
| 986 | 0 | 474 | UV u= SvUV(HeVAL(key_is_utf8_he)); | 
 
| 992 | 474 | 301199 | if ( val_is_utf8_generic < 0 ) { | 
 
| 994 | 474 | 0 | if (val_is_utf8_he) { | 
 
| 995 | 0 | 474 | UV u= SvUV(HeVAL(val_is_utf8_he)); | 
 
| 1006 | 88 | 3 | if (r) { | 
 
| 1030 | 366 | 0 | char *file_pv= SvPV(file_sv,file_len); | 
 
| 1032 | 185 | 181 | if (mmap_status < 0) { | 
 
| 1049 | 181 | 0 | struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv); | 
 
| 1051 | 0 | 181 | SvOK_off(mount_sv); | 
 
| 1062 | 905274 | 0 | struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv); | 
 
| 1063 | 905274 | 0 | SV* key_sv= items > 2 ? ST(2) : NULL; | 
 
| 1064 | 0 | 905274 | SV* val_sv= items > 3 ? ST(3) : NULL; | 
 
| 1065 | 0 | 905274 | if (items > 4) | 
 
| 1080 | 1206672 | 0 | SV* val_sv= items > 2 ? ST(2) : NULL; | 
 
| 1081 | 1206672 | 0 | struct mph_obj *obj= (struct mph_obj *)SvPV_nolen(mount_sv); | 
 
| 1082 | 0 | 1206672 | if (items > 3) | 
 
| 1115 | 0 | 1440 | if (!got) | 
 
| 1118 | 1440 | 0 | if (!mount_sv || !SvPOK(mount_sv)) | 
 
|  | 0 | 1440 | if (!mount_sv || !SvPOK(mount_sv)) | 
 
| 1120 | 1440 | 0 | obj= (struct mph_obj *)SvPV_nolen(mount_sv); |