| 917 | | |
| 918 | | if ((*taken = MIN(blen, d->in.size - d->in.used))) |
| 919 | | { |
| 920 | | memcpy (d->in.buff + d->in.used, _buff, *taken); |
| 921 | | d->in.used += *taken; |
| 922 | | } |
| 923 | | } |
| 924 | | |
| | 919 | |
| | 920 | /* shortcut the identity mapping and save one copying pass */ |
| | 921 | |
| | 922 | if (d->just_take_id) |
| | 923 | b = &d->out; |
| | 924 | else |
| | 925 | b = &d->in; |
| | 926 | |
| | 927 | if ((*taken = MIN(blen, b->size - b->used))) |
| | 928 | { |
| | 929 | memcpy (b->buff + b->used, _buff, *taken); |
| | 930 | b->used += *taken; |
| | 931 | } |
| | 932 | } |
| | 933 | |
| | 934 | int mutt_decoder_push_one (DECODER *d, char c) |
| | 935 | { |
| | 936 | struct decoder_buff *b; |
| | 937 | |
| | 938 | if (d->just_take_id) |
| | 939 | b = &d->out; |
| | 940 | else |
| | 941 | b = &d->in; |
| | 942 | |
| | 943 | if (b->used == b->size) |
| | 944 | return -1; |
| | 945 | |
| | 946 | b->buff[b->used++] = c; |
| | 947 | return 0; |
| | 948 | } |
| 944 | | |
| 945 | | do |
| 946 | | { |
| 947 | | mutt_decoder_pop (d, tmp, sizeof (tmp), &l); |
| 948 | | for (i = 0; i < l; i++) |
| 949 | | state_prefix_putc (tmp[i], s); |
| 950 | | } |
| 951 | | while (l > 0); |
| | 968 | |
| | 969 | if (s->prefix) |
| | 970 | { |
| | 971 | do |
| | 972 | { |
| | 973 | mutt_decoder_pop (d, tmp, sizeof (tmp), &l); |
| | 974 | for (i = 0; i < l; i++) |
| | 975 | state_prefix_putc (tmp[i], s); |
| | 976 | } |
| | 977 | while (l > 0); |
| | 978 | } |
| | 979 | else |
| | 980 | { |
| | 981 | do |
| | 982 | { |
| | 983 | mutt_decoder_pop (d, tmp, sizeof (tmp), &l); |
| | 984 | fwrite (tmp, l, 1, s->fpout); |
| | 985 | } |
| | 986 | while (l > 0); |
| | 987 | } |