… | |
… | |
2761 | faceinfo *f = face_info (idx); assert (f); |
2761 | faceinfo *f = face_info (idx); assert (f); |
2762 | facedata *d = f->face + faceset; |
2762 | facedata *d = f->face + faceset; |
2763 | sv_to (data, d->data); |
2763 | sv_to (data, d->data); |
2764 | STRLEN clen; |
2764 | STRLEN clen; |
2765 | char *cdata = SvPVbyte (chksum, clen); |
2765 | char *cdata = SvPVbyte (chksum, clen); |
2766 | clen = min (CHKSUM_MAXLEN, clen); |
|
|
2767 | |
2766 | |
|
|
2767 | assert (("cf::face::set_data called with too long checksum", clen <= CHKSUM_MAXLEN)); |
2768 | assert (("cf::face::set_data must be called with a non-empty checksum", clen)); |
2768 | assert (("cf::face::set_data must be called with a non-empty checksum", clen)); |
2769 | |
2769 | |
2770 | if (clen != d->chksum_len || memcmp (d->chksum, cdata, clen)) |
2770 | if (clen != d->chksum_len || memcmp (d->chksum, cdata, clen)) |
2771 | { |
2771 | { |
2772 | d->chksum_len = clen; |
2772 | d->chksum_len = clen; |
… | |
… | |
2796 | faceinfo *f = face_info (idx); assert (f); |
2796 | faceinfo *f = face_info (idx); assert (f); |
2797 | SvREFCNT_dec (f->meta_hv); |
2797 | SvREFCNT_dec (f->meta_hv); |
2798 | f->meta_hv = SvOK (sv) ? (HV *)SvREFCNT_inc (SvRV (sv)) : 0; |
2798 | f->meta_hv = SvOK (sv) ? (HV *)SvREFCNT_inc (SvRV (sv)) : 0; |
2799 | } |
2799 | } |
2800 | |
2800 | |
|
|
2801 | SV *mangle_chksum (SV *chksum) |
|
|
2802 | CODE: |
|
|
2803 | STRLEN len; |
|
|
2804 | char *data = SvPVbyte (chksum, len); |
|
|
2805 | RETVAL = newSVpvn (data, min (len, CHKSUM_MAXLEN)); |
|
|
2806 | OUTPUT: |
|
|
2807 | RETVAL |
|
|
2808 | |
2801 | SV *get_chksum (faceidx idx, int faceset = 0) |
2809 | SV *get_chksum (faceidx idx, int faceset = 0) |
2802 | CODE: |
2810 | CODE: |
2803 | facedata *d = face_data (idx, faceset); |
2811 | facedata *d = face_data (idx, faceset); |
2804 | if (!d) XSRETURN_UNDEF; |
2812 | if (!d) XSRETURN_UNDEF; |
2805 | RETVAL = newSVpvn ((char *)d->chksum, d->chksum_len); |
2813 | RETVAL = newSVpvn ((char *)d->chksum, d->chksum_len); |
… | |
… | |
2809 | int get_type (faceidx idx) |
2817 | int get_type (faceidx idx) |
2810 | CODE: |
2818 | CODE: |
2811 | faceinfo *f = face_info (idx); |
2819 | faceinfo *f = face_info (idx); |
2812 | if (!f) XSRETURN_UNDEF; |
2820 | if (!f) XSRETURN_UNDEF; |
2813 | RETVAL = f->type; |
2821 | RETVAL = f->type; |
|
|
2822 | OUTPUT: |
|
|
2823 | RETVAL |
|
|
2824 | |
|
|
2825 | SV *get_name (faceidx idx) |
|
|
2826 | CODE: |
|
|
2827 | faceinfo *f = face_info (idx); |
|
|
2828 | if (!f) XSRETURN_UNDEF; |
|
|
2829 | RETVAL = to_sv (f->name); |
2814 | OUTPUT: |
2830 | OUTPUT: |
2815 | RETVAL |
2831 | RETVAL |
2816 | |
2832 | |
2817 | SV *get_data (faceidx idx, int faceset = 0) |
2833 | SV *get_data (faceidx idx, int faceset = 0) |
2818 | CODE: |
2834 | CODE: |