/*! * l_autodecode_137() * * Input: index into array of functions * Return: data struct (e.g., pixa) in memory */ void * l_autodecode_137(l_int32 index) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; void *result = NULL; l_int32 nfunc = 2; PROCNAME("l_autodecode_137"); if (index < 0 || index >= nfunc) { L_ERROR("invalid index = %d; must be less than %d\n", procName, index, nfunc); return NULL; } lept_mkdir("lept/auto"); /* Unencode selected string, write to file, and read it */ switch (index) { case 0: data1 = decodeBase64(l_strdata_0, strlen(l_strdata_0), &size1); data2 = zlibUncompress(data1, size1, &size2); l_binaryWrite("/tmp/lept/auto/data.bin","w", data2, size2); result = (void *)pixaRead("/tmp/lept/auto/data.bin"); lept_free(data1); lept_free(data2); break; case 1: data1 = decodeBase64(l_strdata_1, strlen(l_strdata_1), &size1); data2 = zlibUncompress(data1, size1, &size2); l_binaryWrite("/tmp/lept/auto/data.bin","w", data2, size2); result = (void *)pixaRead("/tmp/lept/auto/data.bin"); lept_free(data1); lept_free(data2); break; default: L_ERROR("invalid index", procName); } return result; }
/*! * \brief l_bootnum_gen2() * * \return pixa of labelled digits * * <pre> * Call this way: * PIXA *pixa = l_bootnum_gen2(); (C) * Pixa *pixa = l_bootnum_gen2(); (C++) * </pre> */ PIXA * l_bootnum_gen2(void) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; PIXA *pixa; /* Unencode selected string, write to file, and read it */ data1 = decodeBase64(l_bootnum2, strlen(l_bootnum2), &size1); data2 = zlibUncompress(data1, size1, &size2); pixa = pixaReadMem(data2, size2); lept_free(data1); lept_free(data2); return pixa; }
/*! * l_bootnum_gen() * * Return: the bootnum pixa * * Call this way: * PIXA *pixa = (PIXA *)l_bootnum_gen(); (C) * Pixa *pixa = (Pixa *)l_bootnum_gen(); (C++) */ void * l_bootnum_gen() { l_uint8 *data1, *data2; l_int32 size1; size_t size2; void *result; /* Unencode selected string, write to file, and read it */ data1 = decodeBase64(l_bootnum, strlen(l_bootnum), &size1); data2 = zlibUncompress(data1, size1, &size2); l_binaryWrite("/tmp/data.bin", "w", data2, size2); result = (void *)pixaRead("/tmp/data.bin"); FREE(data1); FREE(data2); return result; }
/*! * \brief l_bootnum_gen3() * * \return pixa of labelled digits * * <pre> * Call this way: * PIXA *pixa = l_bootnum_gen3(); (C) * Pixa *pixa = l_bootnum_gen3(); (C++) * </pre> */ PIXA * l_bootnum_gen3(void) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; PIXA *pixa; lept_mkdir("lept/auto"); /* Unencode selected string, uncompress it, and read it */ data1 = decodeBase64(l_strdata_0, strlen(l_strdata_0), &size1); data2 = zlibUncompress(data1, size1, &size2); pixa = pixaReadMem(data2, size2); lept_free(data1); lept_free(data2); return pixa; }
/*! * l_bootnum_gen2() * * Return: the bootnum2 pixa * * Call this way: * PIXA *pixa = (PIXA *)l_bootnum_gen2(); (C) * Pixa *pixa = (Pixa *)l_bootnum_gen2(); (C++) */ void * l_bootnum_gen2(void) { l_uint8 *data1, *data2; l_int32 size1; size_t size2; void *result; lept_mkdir("lept/auto"); /* Unencode selected string, write to file, and read it */ data1 = decodeBase64(l_bootnum2, strlen(l_bootnum2), &size1); data2 = zlibUncompress(data1, size1, &size2); l_binaryWrite("/tmp/lept/auto/data.bin", "w", data2, size2); result = (void *)pixaRead("/tmp/lept/auto/data.bin"); lept_free(data1); lept_free(data2); return result; }
DataBuf PngChunk::parsePngChunk(const byte* pData, long size, long& index, int keysize) { DataBuf arr; if(!strncmp((char*)PNG_CHUNK_TYPE(pData, index), "zTXt", 4)) { // Extract a deflate compressed Latin-1 text chunk #ifdef DEBUG std::cerr << "Exiv2::PngChunk::parsePngChunk: We found a zTXt field\n"; #endif // we get the compression method after the key const byte* compressionMethod = &PNG_CHUNK_DATA(pData, index, keysize+1); if ( *compressionMethod != 0x00 ) { // then it isn't zlib compressed and we are sunk #ifdef DEBUG std::cerr << "Exiv2::PngChunk::parsePngChunk: Non-standard zTXt compression method.\n"; #endif throw Error(14); } // compressed string after the compression technique spec const byte* compressedText = &PNG_CHUNK_DATA(pData, index, keysize+2); unsigned int compressedTextSize = getLong(&pData[index], bigEndian)-keysize-2; // security check, also considering overflow wraparound from the addition -- // we may endup with a /smaller/ index if we wrap all the way around long firstIndex = (long)(compressedText - pData); long onePastLastIndex = firstIndex + compressedTextSize; if ( onePastLastIndex > size || onePastLastIndex <= firstIndex) throw Error(14); zlibUncompress(compressedText, compressedTextSize, arr); } else if (!strncmp((char*)PNG_CHUNK_TYPE(pData, index), "tEXt", 4)) { // Extract a non-compressed Latin-1 text chunk #ifdef DEBUG std::cerr << "Exiv2::PngChunk::parsePngChunk: We found a tEXt field\n"; #endif // the text comes after the key, but isn't null terminated const byte* text = &PNG_CHUNK_DATA(pData, index, keysize+1); long textsize = getLong(&pData[index], bigEndian)-keysize-1; // security check, also considering overflow wraparound from the addition -- // we may endup with a /smaller/ index if we wrap all the way around long firstIndex = (long)(text - pData); long onePastLastIndex = firstIndex + textsize; if ( onePastLastIndex > size || onePastLastIndex <= firstIndex) throw Error(14); arr.alloc(textsize); arr = DataBuf(text, textsize); } else if(!strncmp((char*)PNG_CHUNK_TYPE(pData, index), "iTXt", 4)) { // Extract a deflate compressed or uncompressed UTF-8 text chunk // we get the compression flag after the key const byte* compressionFlag = &PNG_CHUNK_DATA(pData, index, keysize+1); // we get the compression method after the compression flag const byte* compressionMethod = &PNG_CHUNK_DATA(pData, index, keysize+1); // language description string after the compression technique spec const byte* languageText = &PNG_CHUNK_DATA(pData, index, keysize+1); unsigned int languageTextSize = getLong(&pData[index], bigEndian)-keysize-1; // translated keyword string after the language description const byte* translatedKeyText = &PNG_CHUNK_DATA(pData, index, keysize+1); unsigned int translatedKeyTextSize = getLong(&pData[index], bigEndian)-keysize-1; if ( *compressionFlag == 0x00 ) { // then it's an uncompressed iTXt chunk #ifdef DEBUG std::cerr << "Exiv2::PngChunk::parsePngChunk: We found an uncompressed iTXt field\n"; #endif // the text comes after the translated keyword, but isn't null terminated const byte* text = &PNG_CHUNK_DATA(pData, index, keysize+1); long textsize = getLong(&pData[index], bigEndian)-keysize-1; // security check, also considering overflow wraparound from the addition -- // we may endup with a /smaller/ index if we wrap all the way around long firstIndex = (long)(text - pData); long onePastLastIndex = firstIndex + textsize; if ( onePastLastIndex > size || onePastLastIndex <= firstIndex) throw Error(14); arr.alloc(textsize); arr = DataBuf(text, textsize); } else if ( *compressionMethod == 0x00 ) { // then it's a zlib compressed iTXt chunk #ifdef DEBUG std::cerr << "Exiv2::PngChunk::parsePngChunk: We found a zlib compressed iTXt field\n"; #endif // the compressed text comes after the translated keyword, but isn't null terminated const byte* compressedText = &PNG_CHUNK_DATA(pData, index, keysize+1); long compressedTextSize = getLong(&pData[index], bigEndian)-keysize-1; // security check, also considering overflow wraparound from the addition -- // we may endup with a /smaller/ index if we wrap all the way around long firstIndex = (long)(compressedText - pData); long onePastLastIndex = firstIndex + compressedTextSize; if ( onePastLastIndex > size || onePastLastIndex <= firstIndex) throw Error(14); zlibUncompress(compressedText, compressedTextSize, arr); } else { // then it isn't zlib compressed and we are sunk #ifdef DEBUG std::cerr << "Exiv2::PngChunk::parsePngChunk: Non-standard iTXt compression method.\n"; #endif throw Error(14); } } else { #ifdef DEBUG std::cerr << "Exiv2::PngChunk::parsePngChunk: We found a field, not expected though\n"; #endif throw Error(14); } return arr; } // PngChunk::parsePngChunk
main(int argc, char **argv) { char *filein, *fileout; l_uint8 *array1, *array2, *dataout, *dataout2; l_int32 i, blocksize; size_t nbytes, nout, nout2; BBUFFER *bb, *bb2; FILE *fp; static char mainName[] = "buffertest"; if (argc != 3) exit(ERROR_INT(" Syntax: buffertest filein fileout", mainName, 1)); filein = argv[1]; fileout = argv[2]; if ((array1 = l_binaryRead(filein, &nbytes)) == NULL) exit(ERROR_INT("array not made", mainName, 1)); fprintf(stderr, " Bytes read from file: %ld\n", nbytes); /* Application of byte buffer ops: compress/decompress in memory */ #if 1 dataout = zlibCompress(array1, nbytes, &nout); l_binaryWrite(fileout, "w", dataout, nout); dataout2 = zlibUncompress(dataout, nout, &nout2); l_binaryWrite("/tmp/junktest", "w", dataout2, nout2); fprintf(stderr, "nbytes in = %ld, nbytes comp = %ld, nbytes uncomp = %ld\n", nbytes, nout, nout2); lept_free(dataout); lept_free(dataout2); #endif /* Low-level byte buffer read/write test */ #if 0 bb = bbufferCreate(array1, nbytes); bbufferRead(bb, array1, nbytes); array2 = (l_uint8 *)lept_calloc(2 * nbytes, sizeof(l_uint8)); fprintf(stderr, " Bytes initially in buffer: %d\n", bb->n); blocksize = (2 * nbytes) / NBLOCKS; for (i = 0; i <= NBLOCKS; i++) { bbufferWrite(bb, array2, blocksize, &nout); fprintf(stderr, " block %d: wrote %d bytes\n", i + 1, nout); } fprintf(stderr, " Bytes left in buffer: %d\n", bb->n); bb2 = bbufferCreate(NULL, 0); bbufferRead(bb2, array1, nbytes); fp = lept_fopen(fileout, "wb"); bbufferWriteStream(bb2, fp, nbytes, &nout); fprintf(stderr, " bytes written out to fileout: %d\n", nout); bbufferDestroy(&bb); bbufferDestroy(&bb2); lept_free(array2); #endif lept_free(array1); return 0; }