[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[pdf-devel] GHM gift: LZW amd64 patch.
From: |
Juan Pedro Bolivar Puente |
Subject: |
[pdf-devel] GHM gift: LZW amd64 patch. |
Date: |
Sat, 14 Nov 2009 17:43:15 +0200 |
User-agent: |
Mozilla-Thunderbird 2.0.0.22 (X11/20090701) |
-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1
Hi,
I have solved the problems of the LZW filter in non 32-bits architectures.
Patch attached.
JP
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.10 (GNU/Linux)
Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org
iEYEARECAAYFAkr+0BMACgkQchi8veCammeBtACcDRm0NbOplCgSCHhQK1Ihy+Nc
F0QAn1vI3WF6/Nkynd+/I/eT17mqlaR8
=W7yo
-----END PGP SIGNATURE-----
# Bazaar merge directive format 2 (Bazaar 0.90)
# revision_id: address@hidden
# target_branch: http://bzr.savannah.gnu.org/r/pdf/libgnupdf/branches\
# /trunk/
# testament_sha1: b4bd70e4c4339d45505abde87c24f362eb3e6d55
# timestamp: 2009-11-14 17:16:31 +0200
# base_revision_id: address@hidden
#
# Begin patch
=== modified file 'ChangeLog'
--- ChangeLog 2009-11-13 10:16:32 +0000
+++ ChangeLog 2009-11-14 15:16:11 +0000
@@ -1,3 +1,9 @@
+2009-11-14 <address@hidden>
+
+ * src/base/pdf-stm-f-lzw.c: Added lzw_code_t type and parametrized
+ all code bit operations on sizeof (lzw_code_t) to achieve full
+ portability.
+
2009-11-13 Jose E. Marchesi <address@hidden>
* README.cvs: Clarify text. Concrete branch command added.
=== modified file 'src/base/pdf-stm-f-lzw.c'
--- src/base/pdf-stm-f-lzw.c 2009-09-05 20:59:39 +0000
+++ src/base/pdf-stm-f-lzw.c 2009-11-14 15:16:11 +0000
@@ -46,8 +46,10 @@
LZW_FIRST_CODE
};
+typedef unsigned lzw_code_t;
+#define LZW_CODE_SIZE (sizeof (lzw_code_t) << 3)
+
/* -- LZW code output/input -- */
-
/*
* Object to read and write codes of variable bitsize in a buffer.
* Warning: using both get and put functions may break the buffer.
@@ -56,12 +58,12 @@
{
pdf_buffer_t buf;
pdf_char_t cache [LZW_CACHE_SIZE];
- int cache_rp;
- int cache_wp;
- unsigned long valbuf;
+ pdf_size_t cache_rp;
+ pdf_size_t cache_wp;
+ lzw_code_t valbuf;
+ lzw_code_t maxval;
+ int bitsize;
int valbits;
- int bitsize;
- int maxval;
};
typedef struct lzw_buffer_s* lzw_buffer_t;
@@ -87,12 +89,12 @@
static pdf_status_t
lzw_buffer_get_code (lzw_buffer_t b,
- unsigned int* code,
+ lzw_code_t* code,
pdf_bool_t finish_p)
{
- unsigned long r;
+ lzw_code_t r;
- while (b->valbits <= 24 && !finish_p)
+ while (b->valbits <= LZW_CODE_SIZE - 8 && !finish_p)
{
if (pdf_buffer_eob_p (b->buf))
{
@@ -101,8 +103,8 @@
else
{
b->valbuf |=
- (unsigned int) b->buf->data [b->buf->rp++] <<
- (24 - b->valbits);
+ (lzw_code_t) b->buf->data [b->buf->rp++]
+ << (LZW_CODE_SIZE - 8 - b->valbits);
b->valbits += 8;
}
@@ -113,10 +115,10 @@
return PDF_EEOF;
}
- r = b->valbuf >> (32 - b->bitsize);
+ r = b->valbuf >> (LZW_CODE_SIZE - b->bitsize);
b->valbuf <<= b->bitsize;
b->valbits -= b->bitsize;
-
+
*code = r;
return PDF_OK;
@@ -125,20 +127,22 @@
/* Once finished, call with 0 as code value to flush the buffer. */
static void
lzw_buffer_put_code (lzw_buffer_t b,
- unsigned int code)
+ lzw_code_t code)
{
- b->valbuf |= (unsigned long) code << (32 - b->bitsize - b->valbits);
+ b->valbuf |= (lzw_code_t) code << (LZW_CODE_SIZE - b->bitsize - b->valbits);
b->valbits += b->bitsize;
while (b->valbits >= 8)
{
if (pdf_buffer_full_p (b->buf))
{
- b->cache [b->cache_wp++] = (pdf_char_t) (b->valbuf >> 24);
+ b->cache [b->cache_wp++] =
+ (pdf_char_t) (b->valbuf >> (LZW_CODE_SIZE - 8));
}
else
{
- b->buf->data [b->buf->wp++] = (pdf_char_t) (b->valbuf >> 24);
+ b->buf->data [b->buf->wp++] =
+ (pdf_char_t) (b->valbuf >> (LZW_CODE_SIZE - 8));
}
b->valbuf <<= 8;
b->valbits -= 8;
@@ -165,7 +169,7 @@
return PDF_OK;
}
-static int
+static pdf_status_t
lzw_buffer_inc_bitsize (lzw_buffer_t b)
{
if (b->bitsize == LZW_MAX_BITSIZE)
@@ -194,12 +198,12 @@
*/
struct lzw_string_s
{
- unsigned prefix; /* Prefix string code */
+ lzw_code_t prefix; /* Prefix string code */
pdf_char_t suffix; /* Appended character */
- unsigned first; /* First string with the same prefix. */
- unsigned left; /* Next string with smaller suffix and same prefix. */
- unsigned right; /* Next string with greater suffix and same prefix. */
+ lzw_code_t first; /* First string with the same prefix. */
+ lzw_code_t left; /* Next string with smaller suffix and same prefix. */
+ lzw_code_t right; /* Next string with greater suffix and same prefix. */
};
typedef struct lzw_string_s* lzw_string_t;
@@ -213,7 +217,7 @@
struct lzw_dict_s
{
struct lzw_string_s table [LZW_MAX_DICTSIZE];
- unsigned size;
+ pdf_size_t size;
};
typedef struct lzw_dict_s* lzw_dict_t;
@@ -238,8 +242,8 @@
lzw_dict_add (lzw_dict_t d,
lzw_string_t s)
{
- unsigned index;
- int must_add;
+ lzw_code_t index;
+ pdf_bool_t must_add;
if (s->prefix == LZW_NULL_INDEX)
{
@@ -303,7 +307,7 @@
static void
lzw_dict_fast_add (lzw_dict_t d,
- unsigned prefix,
+ lzw_code_t prefix,
pdf_char_t suffix)
{
d->table[d->size].prefix = prefix;
@@ -313,9 +317,9 @@
static void
lzw_dict_decode (lzw_dict_t d,
- unsigned code,
+ lzw_code_t code,
pdf_char_t** decode,
- unsigned* size)
+ pdf_size_t* size)
{
*size = 0;
@@ -494,10 +498,10 @@
/* state */
pdf_char_t dec_buf [LZW_MAX_DICTSIZE];
pdf_char_t* decoded;
- unsigned dec_size;
+ pdf_size_t dec_size;
- unsigned new_code;
- unsigned old_code;
+ lzw_code_t new_code;
+ lzw_code_t old_code;
/* flow managment */
enum lzwdec_state state_pos;
# Begin bundle
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
lzw-amd64.patch.sig
Description: PGP signature
- [pdf-devel] GHM gift: LZW amd64 patch.,
Juan Pedro Bolivar Puente <=