Hello,
I am sending a patch for this package.
This was already suggested by vincentbernat upstream.
With this patch package was successfully built on mips, mipsel, i386.
I have changed a type of str_hash in file src/ha_pinba.cc
--- pinba-engine-mysql-1.1.0.orig/src/ha_pinba.cc
+++ pinba-engine-mysql-1.1.0/src/ha_pinba.cc
@@ -2680,7 +2680,7 @@ int ha_pinba::read_next_row(unsigned cha
PPvoid_t ppvalue;
char name[PINBA_MAX_LINE_LEN] = {0};
pinba_tag *tag;
- uint64_t str_hash;
+ Word_t str_hash;
str_hash = this_index[active_index].ival;
loking at a pinba-engine-mysql-1.1.0/src/ha_pinba.h one can notice that ival
is of type size_t:
typedef struct pinba_index_st { /* {{{ */
union {
size_t ival;
struct {
unsigned char *val;
uint len;
} str;
};
struct {
unsigned char *val;
uint len;
} subindex;
size_t position;
} pinba_index_st;
/* }}} */
However if we replace "uint64_t str_hash;" with "size_t str_hash;" on 32bit
archs we have following problem:
ha_pinba.cc:2687:59: error: invalid conversion from 'size_t* {aka unsigned
int*}' to 'Word_t* {aka long unsigned int*}' [-fpermissive]
Taking a look at a Word_t one can find that:
A Word_t is a typedef unsigned long int in Judy.h and must be the same size as
sizeof(void *) I.E. a pointer.
Same size as size_t but on 32bit one is "unsigned int" (size_t) and the other
"long unsigned int" (Word_t)
While on 64bit they are both "long unsigned int".
Taking this into consideration i have proposed a patch that i think it is safer
than one proposed upstream, which will probably fail during run-time on
big-endian:
https://github.com/tony2001/pinba_engine/issues/40
Please include this patch.
Regards,
Jurica Stanojkovic
--- pinba-engine-mysql-1.1.0.orig/src/ha_pinba.cc
+++ pinba-engine-mysql-1.1.0/src/ha_pinba.cc
@@ -2680,7 +2680,7 @@ int ha_pinba::read_next_row(unsigned cha
PPvoid_t ppvalue;
char name[PINBA_MAX_LINE_LEN] = {0};
pinba_tag *tag;
- uint64_t str_hash;
+ Word_t str_hash;
str_hash = this_index[active_index].ival;