Changeset 1371 for trunk/src/core/RpEncode.cc
- Timestamp:
- Apr 1, 2009 3:54:46 PM (15 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/src/core/RpEncode.cc
r1367 r1371 31 31 return 0; 32 32 } 33 34 33 if (size < 0) { 35 34 size = strlen(buf); 36 35 } 37 38 for (int index = 0; index < size; index++) { 39 int c = *buf++; 40 // FIXME: use ctype's isascii and isprint 41 // TAB (011), LF(012), CR(015) is ascii. 42 // what about BS(010), VT(013), FF(014)? 43 if (((c >= '\000') && (c <= '\010')) || 44 ((c >= '\013') && (c <= '\014')) || 45 ((c >= '\016') && (c <= '\037')) || 46 ((c >= '\177') && (c <= '\377')) ) { 47 // data is binary 48 return index+1; 49 } 36 const char *cp, *endPtr; 37 for (cp = buf, endPtr = buf + size; cp < endPtr; cp++) { 38 if ((!isascii(*cp)) || (!isprint(*cp))) { 39 return (cp - buf) + 1; 40 } 50 41 } 51 42 return 0; … … 138 129 addHeader = (flags & RPENC_HDR); 139 130 131 if ((!compress) && (!base64)) { 132 return true; // Nothing to do. 133 } 140 134 if (outData.append(buf.bytes(), buf.size()) != (int)buf.size()) { 141 135 err.addError("can't append %d bytes", buf.size()); … … 143 137 } 144 138 if (outData.encode(err, compress, base64)) { 145 buf.clear(); 146 if (addHeader) { 147 if ((compress) && (!base64)) { 148 buf.append("@@RP-ENC:z\n", 11); 149 } else if ((!compress) && (base64)) { 150 buf.append("@@RP-ENC:b64\n", 13); 151 } else if ((compress) && (base64)) { 152 buf.append("@@RP-ENC:zb64\n", 14); 153 } else { 154 // do nothing 155 } 156 } else { 157 // do nothing 158 } 159 if (buf.append(outData.bytes(),outData.size()) != (int)outData.size()) { 160 err.addError("can't append %d bytes", outData.size()); 161 return false; 139 buf.clear(); 140 if (addHeader) { 141 if ((compress) && (!base64)) { 142 buf.append("@@RP-ENC:z\n", 11); 143 } else if ((!compress) && (base64)) { 144 buf.append("@@RP-ENC:b64\n", 13); 145 } else if ((compress) && (base64)) { 146 buf.append("@@RP-ENC:zb64\n", 14); 147 } else { 148 // do nothing 149 } 150 } else { 151 // do nothing 162 152 } 153 } 154 if (buf.append(outData.bytes(),outData.size()) != (int)outData.size()) { 155 err.addError("can't append %d bytes", outData.size()); 156 return false; 163 157 } 164 158 return true; … … 183 177 Rappture::Buffer outData; 184 178 185 bool decompress, base64, checkH DR;186 decompress = (flags & RPENC_Z);187 base64 = (flags & RPENC_B64);188 checkH DR= (flags & RPENC_HDR);179 bool decompress, base64, checkHeader; 180 decompress = (flags & RPENC_Z); 181 base64 = (flags & RPENC_B64); 182 checkHeader = (flags & RPENC_HDR); 189 183 190 184 off_t offset; 191 if ((buf.size() > 11) && (strncmp(buf.bytes(),"@@RP-ENC:z\n", 11) == 0)) { 192 offset = 11; 193 if ((checkHDR) || ((!decompress) && (!base64))) { 185 const char *bytes; 186 int size; 187 188 size = buf.size(); 189 bytes = buf.bytes(); 190 if (strncmp(bytes, "@@RP-ENC:z\n", 11) == 0) { 191 bytes += 11; 192 size -= 11; 193 if ((checkHeader) || ((!decompress) && (!base64))) { 194 194 decompress = true; 195 base64 = false;196 } 197 } else if ( (buf.size() > 13) &&198 (strncmp(buf.bytes(),"@@RP-ENC:b64\n",13) == 0)) {199 offset= 13;200 if ((checkH DR) || ((!decompress) && (!base64) )) {195 base64 = false; 196 } 197 } else if (strncmp(bytes, "@@RP-ENC:b64\n",13) == 0) { 198 bytes += 13; 199 size -= 13; 200 if ((checkHeader) || ((!decompress) && (!base64) )) { 201 201 decompress = false; 202 base64 = true;203 } 204 } else if ( (buf.size() > 14) &&205 (strncmp(buf.bytes(), "@@RP-ENC:zb64\n",14) == 0)) {206 offset= 14;207 if ((checkH DR) || ((!decompress) && (!base64))) {202 base64 = true; 203 } 204 } else if (strncmp(bytes, "@@RP-ENC:zb64\n",14) == 0) { 205 bytes += 14; 206 size -= 14; 207 if ((checkHeader) || ((!decompress) && (!base64))) { 208 208 decompress = true; 209 base64 = true;209 base64 = true; 210 210 } 211 211 } else { 212 212 offset = 0; 213 213 } 214 int nBytes = buf.size() - offset; 215 if (outData.append(buf.bytes() + offset, nBytes) != nBytes) { 216 err.addError("can't append %d bytes to buffer", nBytes); 214 if (outData.append(bytes, size) != size) { 215 err.addError("can't append %d bytes to buffer", size); 217 216 return false; 218 217 } 219 if (!outData.decode(err, decompress, base64)) { 220 return false; 218 if ((decompress) || (base64)) { 219 if (!outData.decode(err, decompress, base64)) { 220 return false; 221 } 221 222 } 222 223 buf.move(outData);
Note: See TracChangeset
for help on using the changeset viewer.