Mercurial > libavcodec.hg
comparison lcldec.c @ 9764:dd6bcbec3c24 libavcodec
Use srcptr_end variable to avoid having to update both srcptr and srclen.
author | reimar |
---|---|
date | Sun, 31 May 2009 10:26:58 +0000 |
parents | d359d5ee74b9 |
children | 350826aae685 |
comparison
equal
deleted
inserted
replaced
9763:d359d5ee74b9 | 9764:dd6bcbec3c24 |
---|---|
73 | 73 |
74 static unsigned int mszh_decomp(unsigned char * srcptr, int srclen, unsigned char * destptr, unsigned int destsize) | 74 static unsigned int mszh_decomp(unsigned char * srcptr, int srclen, unsigned char * destptr, unsigned int destsize) |
75 { | 75 { |
76 unsigned char *destptr_bak = destptr; | 76 unsigned char *destptr_bak = destptr; |
77 unsigned char *destptr_end = destptr + destsize; | 77 unsigned char *destptr_end = destptr + destsize; |
78 unsigned char *srcptr_end = srcptr + srclen; | |
78 unsigned char mask = 0; | 79 unsigned char mask = 0; |
79 unsigned char maskbit = 0; | 80 unsigned char maskbit = 0; |
80 unsigned int ofs, cnt; | 81 unsigned int ofs, cnt; |
81 | 82 |
82 while (srclen > 0 && destptr < destptr_end) { | 83 while (srcptr < srcptr_end && destptr < destptr_end) { |
83 if (maskbit == 0) { | 84 if (maskbit == 0) { |
84 mask = *srcptr++; | 85 mask = *srcptr++; |
85 maskbit = 8; | 86 maskbit = 8; |
86 srclen--; | |
87 continue; | 87 continue; |
88 } | 88 } |
89 if ((mask & (1 << (--maskbit))) == 0) { | 89 if ((mask & (1 << (--maskbit))) == 0) { |
90 if (destptr_end - destptr < 4) | 90 if (destptr_end - destptr < 4) |
91 break; | 91 break; |
92 memcpy(destptr, srcptr, 4); | 92 memcpy(destptr, srcptr, 4); |
93 srclen -= 4; | |
94 destptr += 4; | 93 destptr += 4; |
95 srcptr += 4; | 94 srcptr += 4; |
96 } else { | 95 } else { |
97 ofs = *srcptr++; | 96 ofs = *srcptr++; |
98 cnt = *srcptr++; | 97 cnt = *srcptr++; |
99 ofs += cnt * 256; | 98 ofs += cnt * 256; |
100 cnt = ((cnt >> 3) & 0x1f) + 1; | 99 cnt = ((cnt >> 3) & 0x1f) + 1; |
101 ofs &= 0x7ff; | 100 ofs &= 0x7ff; |
102 srclen -= 2; | |
103 cnt *= 4; | 101 cnt *= 4; |
104 if (destptr_end - destptr < cnt) { | 102 if (destptr_end - destptr < cnt) { |
105 cnt = destptr_end - destptr; | 103 cnt = destptr_end - destptr; |
106 } | 104 } |
107 for (; cnt > 0; cnt--) { | 105 for (; cnt > 0; cnt--) { |