From 036f711efcccaf67a19ae7a489bdb58f856dee4c Mon Sep 17 00:00:00 2001 From: Mitar Date: Mon, 3 Nov 2025 22:54:34 +0100 Subject: [PATCH 1/7] Parse header on 64bit systems. --- src/pxparse.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pxparse.c b/src/pxparse.c index b1801ee..58cbef0 100644 --- a/src/pxparse.c +++ b/src/pxparse.c @@ -165,7 +165,7 @@ px_fieldInfo **PXparseCompleteHeader (int fd, px_header *header) { char unp_head[0x58]; char unp_head4[0x20]; unsigned char d[2]; - void *ptr; + char ptr[4]; int i; char c; From 4570dbc4b8d3926ab58eb3d74371c1c1b9465e02 Mon Sep 17 00:00:00 2001 From: Mitar Date: Tue, 4 Nov 2025 01:40:41 +0100 Subject: [PATCH 2/7] Do not escape characters. --- src/pxconvert.c | 27 +-------------------------- 1 file changed, 1 insertion(+), 26 deletions(-) diff --git a/src/pxconvert.c b/src/pxconvert.c index 9ac995d..1baf71f 100644 --- a/src/pxconvert.c +++ b/src/pxconvert.c @@ -325,17 +325,7 @@ int PXtoQuotedString(char *dst, const unsigned char *src, int type) { } while(*src) { - switch(*src) { -/* cp431(??) -> latin1 */ - case 0x81: *dst = 'ü'; break; - case 0x84: *dst = 'ä'; break; - case 0x8e: *dst = 'Ä'; break; - case 0x94: *dst = 'ö'; break; - case 0x99: *dst = 'Ö'; break; - case 0x9a: *dst = 'Ü'; break; - case 0xe1: *dst = 'ß'; break; - default: *dst = *src; - } + *dst = *src; dst++; src++; } @@ -344,21 +334,6 @@ int PXtoQuotedString(char *dst, const unsigned char *src, int type) { } char *PXNametoQuotedName(char *str) { - unsigned char *s = str; - while(*s) { - switch(*s) { - case 0x81: *s = 'ü'; break; - case 0x84: *s = 'ä'; break; - case 0x8e: *s = 'Ä'; break; - case 0x94: *s = 'ö'; break; - case 0x99: *s = 'Ö'; break; - case 0x9a: *s = 'Ü'; break; - case 0xe1: *s = 'ß'; break; - case 0x20: *s = '_'; break; - case '-' : *s = '_'; break; - } - s++; - } return str; } From f512d123cc53fab43e8fe458b07e4208388a2875 Mon Sep 17 00:00:00 2001 From: Mitar Date: Fri, 21 Nov 2025 09:10:17 +0100 Subject: [PATCH 3/7] Update .gitignore. --- .gitignore | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.gitignore b/.gitignore index 52bbdf9..23115a7 100644 --- a/.gitignore +++ b/.gitignore @@ -29,6 +29,8 @@ Makefile.in pxtools.spec +po/POTFILES + src/pxcsvdump src/pxinfo src/pxsqldump From 9d8051ab5823e10786ee18d2bf99197061f9b338 Mon Sep 17 00:00:00 2001 From: Mitar Date: Sat, 23 May 2026 10:44:29 +0200 Subject: [PATCH 4/7] Correctly read blobs. --- src/pxconvert.c | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/pxconvert.c b/src/pxconvert.c index 1baf71f..351ddbb 100644 --- a/src/pxconvert.c +++ b/src/pxconvert.c @@ -364,15 +364,15 @@ char *PXMEMOtoString(void *blob, int size, char *blobname) { copy_from_le(&offset, (char *)blob+(size-10), 4); copy_from_le(&length, (char *)blob+(size-6), 4); copy_from_le(&mod_number, (char *)blob+(size-2), 2); - + copy_from_le(&index, (char *)blob+(size-10), 1); - + offset &= 0xffffff00; -#ifdef DEBUG +#ifdef DEBUG fprintf(stderr, "[BLOB] offset: %08lx, length: %08lx, mod_number: %04x, index: %02x\n", offset, length, mod_number, index); #endif - if (index == 0x00) return NULL; - + if (offset == 0) return NULL; + if (!blobname) { fprintf(stderr, "[BLOB] offset: %08lx, length: %08lx, mod_number: %04x, index: %02x - do I need a BLOB-filename '-b ...' ?\n", offset, length, mod_number, index); return NULL; @@ -383,7 +383,7 @@ char *PXMEMOtoString(void *blob, int size, char *blobname) { fd = open(blobname, O_RDONLY); #endif if (fd == -1) return NULL; - + if (index == 0xff) { /* type 02 block */ mb_type2_pointer idx; @@ -480,14 +480,14 @@ int PXBLOBtoBinary(void *blob, int size, char *blobname, void ** binstorage, int copy_from_le(&offset, (char *)blob+(size-10), 4); copy_from_le(&length, (char *)blob+(size-6), 4); copy_from_le(&mod_number, (char *)blob+(size-2), 2); - + copy_from_le(&index, (char *)blob+(size-10), 1); - + offset &= 0xffffff00; -#ifdef DEBUG +#ifdef DEBUG fprintf(stderr, "[BLOB] offset: %08lx, length: %08lx, mod_number: %04x, index: %02x\n", offset, length, mod_number, index); #endif - if (index == 0x00) return 0; + if (offset == 0) return 0; if (!blobname) { fprintf(stderr, "[BLOB] offset: %08lx, length: %08lx, mod_number: %04x, index: %02x - do I need a BLOB-filename '-b ...' ?\n", offset, length, mod_number, index); From 7a8211a2c175eb9ccb61673a7b2f8aa614595cd6 Mon Sep 17 00:00:00 2001 From: Mitar Date: Sat, 23 May 2026 11:03:32 +0200 Subject: [PATCH 5/7] In binary_to_sql, do not truncate after escapes. --- src/pxsqldump.c | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) diff --git a/src/pxsqldump.c b/src/pxsqldump.c index 508cd43..0dfa54f 100644 --- a/src/pxsqldump.c +++ b/src/pxsqldump.c @@ -447,7 +447,8 @@ char * str_to_sql(const unsigned char *src) char * binary_to_sql(const unsigned char *src, int src_len, int *dst_len) { - unsigned int i, add; + int i; + unsigned int j, add; char * dst = NULL; /* count the numbers of ' */ @@ -457,14 +458,14 @@ char * binary_to_sql(const unsigned char *src, int src_len, int *dst_len) src[i] == '\\') add++; } - dst = malloc((i + add) * sizeof(char)); - *dst_len = i + add; + dst = malloc((src_len + add) * sizeof(char)); + *dst_len = src_len + add; - for (i = 0; i < src_len; src++) + for (i = 0, j = 0; i < src_len; i++) { unsigned int c = 0; - if (*src == '\'') + if (src[i] == '\'') { switch (dbtype) { @@ -472,7 +473,7 @@ char * binary_to_sql(const unsigned char *src, int src_len, int *dst_len) case DB_MYSQL: c = '\\'; break; } } - if (*src == '\\') + if (src[i] == '\\') { switch (dbtype) { @@ -482,9 +483,9 @@ char * binary_to_sql(const unsigned char *src, int src_len, int *dst_len) } if (c) - dst[i++] = c; + dst[j++] = c; - dst[i++] = *src; + dst[j++] = src[i]; } return dst; From 38ec1b594c8cf79dff013ecaa0e50750c9525a93 Mon Sep 17 00:00:00 2001 From: Mitar Date: Sat, 23 May 2026 11:05:05 +0200 Subject: [PATCH 6/7] Add missing comma. --- src/pxxmldump.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/pxxmldump.c b/src/pxxmldump.c index 463d845..cf626bb 100644 --- a/src/pxxmldump.c +++ b/src/pxxmldump.c @@ -25,7 +25,7 @@ const char *tags [] = { "logical", "timestamp", "incremental", - "bcd" + "bcd", "time", }; From b0fe4024c4421552b0df61c2d4bc7d0e830c6e11 Mon Sep 17 00:00:00 2001 From: Mitar Date: Sat, 23 May 2026 11:05:42 +0200 Subject: [PATCH 7/7] Remove debug fprintf. --- src/pxxmldump.c | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/src/pxxmldump.c b/src/pxxmldump.c index cf626bb..7ac4b00 100644 --- a/src/pxxmldump.c +++ b/src/pxxmldump.c @@ -77,13 +77,11 @@ int create_xml_line(px_header *header, px_fieldInfo **felder, px_records block, free(str); } else if (felder[i]->type == PX_Field_Type_BCD) { char *str = malloc(felder[i]->size + 1); - - fprintf(stderr,"aslhföasdhfsadbf\n"), - - BLOCK_COPY(str, felder[i]->size); - + + BLOCK_COPY(str, felder[i]->size); + printf("%s", str); - + free(str); } else if (felder[i]->type == PX_Field_Type_ShortInt) { unsigned short s;