[PATCH] sharutils-4.15.2/src/uuencode.c
"Stefan Kanthak" <[email protected]> Sat, 18 Jun 2022 14:01:47 +0200
| Newsgroups | gmane.comp.gnu.utils |
|---|---|
| Organization | Me, myself & IT |
| Message-ID | <E744B4FD3B7949B89A8E8754644DDFBC@H270> |
This is a multi-part message in MIME format.
------=_NextPart_000_05B9_01D8831B.F3247CC0
Content-Type: text/plain;
charset="iso-8859-1"
Content-Transfer-Encoding: 7bit
Remove the almost duplicate code to process the last 1 or 2 input characters;
Access each input character only once, not twice;
Don't decrement 'in_len' AND increment 'in' inside the loop, one
loop counter is enough.
------=_NextPart_000_05B9_01D8831B.F3247CC0
Content-Type: application/octet-stream;
name="uuencode.patch"
Content-Transfer-Encoding: quoted-printable
Content-Disposition: attachment;
filename="uuencode.patch"
--- old/uuencode.c=0A=
+++ new/uuencode.c=0A=
@@ -112,28 +112,33 @@=0A=
`------------------------------------------------*/=0A=
=0A=
static size_t=0A=
-encode_block (char * out, unsigned char const * in, size_t in_len)=0A=
+encode_block (char * out, unsigned char * in, int in_len)=0A=
{=0A=
char * start =3D out;=0A=
+ unsigned char * in_end =3D in + in_len;=0A=
+ unsigned int triplet;=0A=
=0A=
- while (in_len >=3D 3)=0A=
+ switch (in_len % 3)=0A=
{=0A=
- *(out++) =3D ENC (in[0] >> 2);=0A=
- *(out++) =3D ENC (((in[0] & 0x03) << 4) + ((in[1] >> 4) & 0x0F));=0A=
- *(out++) =3D ENC (((in[1] & 0x0F) << 2) + ((in[2] >> 6) & 0x03));=0A=
- *(out++) =3D ENC (in[2] & 0x3F);=0A=
- in_len -=3D 3;=0A=
- in +=3D 3;=0A=
+ case 1:=0A=
+ *(in_end++) =3D '\0';=0A=
+ case 2:=0A=
+ *(in_end++) =3D '\0';=0A=
}=0A=
=0A=
- if (in_len > 0)=0A=
+ do=0A=
{=0A=
- unsigned char lc =3D (in_len > 1) ? in[1] : '\0';=0A=
- *(out++) =3D ENC (in[0] >> 2);=0A=
- *(out++) =3D ENC (((in[0] & 0x03) << 4) + ((lc >> 4) & 0x0F));=0A=
- *(out++) =3D ENC ((lc & 0x0F) << 2);=0A=
- *(out++) =3D ENC (0);=0A=
- }=0A=
+ triplet =3D *(in++);=0A=
+ triplet <<=3D 8;=0A=
+ triplet =3D *(in++);=0A=
+ triplet <<=3D 8;=0A=
+ triplet =3D *(in++);=0A=
+=0A=
+ *(out++) =3D ENC (triplet >> 18);=0A=
+ *(out++) =3D ENC (triplet >> 12);=0A=
+ *(out++) =3D ENC (triplet >> 6);=0A=
+ *(out++) =3D ENC (triplet);=0A=
+ } while (in < in_end);=0A=
=0A=
return out - start;=0A=
}=0A=
------=_NextPart_000_05B9_01D8831B.F3247CC0--