diff options
author | Thomas Deutschmann <whissi@gentoo.org> | 2021-03-30 10:59:39 +0200 |
---|---|---|
committer | Thomas Deutschmann <whissi@gentoo.org> | 2021-04-01 00:04:14 +0200 |
commit | 5ff1d6955496b3cf9a35042c9ac35db43bc336b1 (patch) | |
tree | 6d470f7eb448f59f53e8df1010aec9dad8ce1f72 /leptonica/prog/bytea_reg.c | |
parent | Import Ghostscript 9.53.1 (diff) | |
download | ghostscript-gpl-patches-5ff1d6955496b3cf9a35042c9ac35db43bc336b1.tar.gz ghostscript-gpl-patches-5ff1d6955496b3cf9a35042c9ac35db43bc336b1.tar.bz2 ghostscript-gpl-patches-5ff1d6955496b3cf9a35042c9ac35db43bc336b1.zip |
Import Ghostscript 9.54ghostscript-9.54
Signed-off-by: Thomas Deutschmann <whissi@gentoo.org>
Diffstat (limited to 'leptonica/prog/bytea_reg.c')
-rw-r--r-- | leptonica/prog/bytea_reg.c | 180 |
1 files changed, 180 insertions, 0 deletions
diff --git a/leptonica/prog/bytea_reg.c b/leptonica/prog/bytea_reg.c new file mode 100644 index 00000000..d62614ea --- /dev/null +++ b/leptonica/prog/bytea_reg.c @@ -0,0 +1,180 @@ +/*====================================================================* + - Copyright (C) 2001 Leptonica. All rights reserved. + - + - Redistribution and use in source and binary forms, with or without + - modification, are permitted provided that the following conditions + - are met: + - 1. Redistributions of source code must retain the above copyright + - notice, this list of conditions and the following disclaimer. + - 2. Redistributions in binary form must reproduce the above + - copyright notice, this list of conditions and the following + - disclaimer in the documentation and/or other materials + - provided with the distribution. + - + - THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + - ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + - LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + - A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL ANY + - CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + - EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + - PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + - PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + - OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + - NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + - SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + *====================================================================*/ + +/* + * bytea_reg.c + * + * This tests the byte array utility. + */ + +#ifdef HAVE_CONFIG_H +#include <config_auto.h> +#endif /* HAVE_CONFIG_H */ + +#include <string.h> +#include "allheaders.h" + +int main(int argc, + char **argv) +{ +char *str1, *str2; +l_uint8 *data1, *data2; +l_int32 i, n; +size_t size1, size2, slice, total, start; +FILE *fp; +L_DNA *da; +SARRAY *sa; +L_BYTEA *lba1, *lba2, *lba3, *lba4; +L_REGPARAMS *rp; + +#if !defined(HAVE_LIBJPEG) + L_ERROR("This test requires libjpeg to run.\n", "bytea_reg"); + exit(77); +#endif + + if (regTestSetup(argc, argv, &rp)) + return 1; + + lept_mkdir("lept/bytea"); + + /* Test basic init and join */ + lba1 = l_byteaInitFromFile("feyn.tif"); + lba2 = l_byteaInitFromFile("test24.jpg"); + lba3 = l_byteaCopy(lba2, L_COPY); + size1 = l_byteaGetSize(lba1); + size2 = l_byteaGetSize(lba2); + l_byteaJoin(lba1, &lba3); /* destroys lba3 */ + l_byteaWrite("/tmp/lept/bytea/lba2.bya", lba2, 0, 0); + regTestCheckFile(rp, "/tmp/lept/bytea/lba2.bya"); /* 0 */ + + /* Test split, using init from memory */ + lba3 = l_byteaInitFromMem(lba1->data, size1); + lba4 = l_byteaInitFromMem(lba1->data + size1, size2); + regTestCompareStrings(rp, lba1->data, size1, lba3->data, lba3->size); + regTestCompareStrings(rp, lba2->data, size2, lba4->data, lba4->size); + /* 1, 2 */ + l_byteaDestroy(&lba4); + + /* Test split using the split function */ + l_byteaSplit(lba1, size1, &lba4); /* zeroes lba1 beyond size1 */ + regTestCompareStrings(rp, lba2->data, size2, lba4->data, lba4->size); + /* 3 */ + l_byteaDestroy(&lba1); + l_byteaDestroy(&lba2); + l_byteaDestroy(&lba3); + l_byteaDestroy(&lba4); + + /* Test appending with strings + * In order to make sure it succeeds on windows, where text + * lines are typically terminated with with "\r\n" instead + * of '\n', we remove the '\r' characters. Also, note that + * for files opened for read with "rb", as we do throughout + * leptonica with fopenReadStream(), windows will not + * append the '\r'. We have 3 ways to remove the '\r' + * characters from the byte array data1 with size1 bytes: + * str1 = (char *)arrayReplaceEachSequence(data1, size1, + * (l_uint8 *)"\r", 1, NULL, 0, &size2, NULL); + * str1 = stringReplaceEachSubstr((char *)data1, "\r", + * "", NULL); + * str1 = stringRemoveChars((char *)data1, "\r"); + * which can then be used to initialize a L_Bytea using + * lba1 = l_byteaInitFromMem((l_uint8 *)str1, strlen(str1)); + */ + + data1 = l_binaryRead("kernel_reg.c", &size1); +#if 0 + str1 = (char *)arrayReplaceEachSequence(data1, size1, (l_uint8 *)"\r", 1, + NULL, 0, &size2, NULL); + lba1 = l_byteaInitFromMem((l_uint8 *)str1, size2); +#elif 0 + str1 = stringReplaceEachSubstr((char *)data1, "\r", "", NULL); + lba1 = l_byteaInitFromMem((l_uint8 *)str1, strlen(str1)); +#else + str1 = stringRemoveChars((char *)data1, "\r"); + lba1 = l_byteaInitFromMem((l_uint8 *)str1, strlen(str1)); +#endif + sa = sarrayCreateLinesFromString(str1, 1); + lba2 = l_byteaCreate(0); + n = sarrayGetCount(sa); + for (i = 0; i < n; i++) { + str2 = sarrayGetString(sa, i, L_NOCOPY); + l_byteaAppendString(lba2, str2); + l_byteaAppendString(lba2, "\n"); + } + data2 = l_byteaGetData(lba1, &size2); + regTestCompareStrings(rp, lba1->data, lba1->size, lba2->data, lba2->size); + /* 4 */ + lept_free(data1); + lept_free(str1); + sarrayDestroy(&sa); + l_byteaDestroy(&lba1); + l_byteaDestroy(&lba2); + + /* Test appending with binary data */ + slice = 1000; + total = nbytesInFile("breviar.38.150.jpg"); + lba1 = l_byteaCreate(100); + n = 2 + total / slice; /* using 1 is correct; using 2 gives two errors */ + lept_stderr("******************************************************\n"); + lept_stderr("* Testing error checking: ignore two reported errors *\n"); + for (i = 0, start = 0; i < n; i++, start += slice) { + data2 = l_binaryReadSelect("breviar.38.150.jpg", start, slice, &size2); + l_byteaAppendData(lba1, data2, size2); + lept_free(data2); + } + lept_stderr("******************************************************\n"); + data1 = l_byteaGetData(lba1, &size1); + data2 = l_binaryRead("breviar.38.150.jpg", &size2); + regTestCompareStrings(rp, data1, size1, data2, size2); /* 5 */ + l_byteaDestroy(&lba1); + lept_free(data2); + + /* Test search */ + convertToPdf("test24.jpg", L_JPEG_ENCODE, 0, "/tmp/lept/bytea/test24.pdf", + 0, 0, 100, NULL, NULL, 0); + lba1 = l_byteaInitFromFile("/tmp/lept/bytea/test24.pdf"); + l_byteaFindEachSequence(lba1, (l_uint8 *)" 0 obj\n", 7, &da); + n = l_dnaGetCount(da); + regTestCompareValues(rp, 6, n, 0.0); /* 6 */ + l_byteaDestroy(&lba1); + l_dnaDestroy(&da); + + /* Test write to file */ + lba1 = l_byteaInitFromFile("feyn.tif"); + size1 = l_byteaGetSize(lba1); + fp = lept_fopen("/tmp/lept/bytea/feyn.dat", "wb"); + for (start = 0; start < size1; start += 1000) { + l_byteaWriteStream(fp, lba1, start, 1000); + } + lept_fclose(fp); + lba2 = l_byteaInitFromFile("/tmp/lept/bytea/feyn.dat"); + regTestCompareStrings(rp, lba1->data, size1, lba2->data, + lba2->size); /* 7 */ + l_byteaDestroy(&lba1); + l_byteaDestroy(&lba2); + + return regTestCleanup(rp); +} |