fixed endianness in taler_sq_lib
This commit is contained in:
parent
83319e1782
commit
9bbaff19c1
@ -29,7 +29,7 @@
|
||||
* Function called to convert input argument into SQL parameters.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param data pointer to input argument, here a `struct TALER_AmountNBO`
|
||||
* @param data pointer to input argument, here a `struct TALER_Amount`
|
||||
* @param data_len number of bytes in @a data (if applicable)
|
||||
* @param stmt sqlite statement to parameters for
|
||||
* @param off offset of the argument to bind in @a stmt, numbered from 1,
|
||||
@ -37,16 +37,16 @@
|
||||
* @return #GNUNET_SYSERR on error, #GNUNET_OK on success
|
||||
*/
|
||||
static int
|
||||
qconv_amount_nbo (void *cls,
|
||||
const void *data,
|
||||
size_t data_len,
|
||||
sqlite3_stmt *stmt,
|
||||
unsigned int off)
|
||||
qconv_amount (void *cls,
|
||||
const void *data,
|
||||
size_t data_len,
|
||||
sqlite3_stmt *stmt,
|
||||
unsigned int off)
|
||||
{
|
||||
const struct TALER_AmountNBO *amount = data;
|
||||
const struct TALER_Amount *amount = data;
|
||||
|
||||
(void) cls;
|
||||
GNUNET_assert (sizeof (struct TALER_AmountNBO) == data_len);
|
||||
GNUNET_assert (sizeof (struct TALER_Amount) == data_len);
|
||||
if (SQLITE_OK != sqlite3_bind_int64 (stmt,
|
||||
(int) off,
|
||||
(sqlite3_int64) amount->value))
|
||||
@ -67,10 +67,10 @@ qconv_amount_nbo (void *cls,
|
||||
* @param x pointer to the query parameter to pass
|
||||
*/
|
||||
struct GNUNET_SQ_QueryParam
|
||||
TALER_SQ_query_param_amount_nbo (const struct TALER_AmountNBO *x)
|
||||
TALER_SQ_query_param_amount (const struct TALER_Amount *x)
|
||||
{
|
||||
struct GNUNET_SQ_QueryParam res =
|
||||
{ &qconv_amount_nbo, NULL, x, sizeof (*x), 2 };
|
||||
{ &qconv_amount, NULL, x, sizeof (*x), 2 };
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -79,7 +79,7 @@ TALER_SQ_query_param_amount_nbo (const struct TALER_AmountNBO *x)
|
||||
* Function called to convert input argument into SQL parameters.
|
||||
*
|
||||
* @param cls closure
|
||||
* @param data pointer to input argument, here a `struct TALER_Amount`
|
||||
* @param data pointer to input argument, here a `struct TALER_AmountNBO`
|
||||
* @param data_len number of bytes in @a data (if applicable)
|
||||
* @param stmt sqlite statement to parameters for
|
||||
* @param off offset of the argument to bind in @a stmt, numbered from 1,
|
||||
@ -87,24 +87,23 @@ TALER_SQ_query_param_amount_nbo (const struct TALER_AmountNBO *x)
|
||||
* @return #GNUNET_SYSERR on error, #GNUNET_OK on success
|
||||
*/
|
||||
static int
|
||||
qconv_amount (void *cls,
|
||||
const void *data,
|
||||
size_t data_len,
|
||||
sqlite3_stmt *stmt,
|
||||
unsigned int off)
|
||||
qconv_amount_nbo (void *cls,
|
||||
const void *data,
|
||||
size_t data_len,
|
||||
sqlite3_stmt *stmt,
|
||||
unsigned int off)
|
||||
{
|
||||
const struct TALER_Amount *amount_hbo = data;
|
||||
struct TALER_AmountNBO amount;
|
||||
const struct TALER_AmountNBO *amount = data;
|
||||
struct TALER_Amount amount_hbo;
|
||||
|
||||
(void) cls;
|
||||
GNUNET_assert (sizeof (struct TALER_AmountNBO) == data_len);
|
||||
TALER_amount_hton (&amount,
|
||||
amount_hbo);
|
||||
return qconv_amount_nbo (cls,
|
||||
&amount,
|
||||
sizeof (struct TALER_AmountNBO),
|
||||
stmt,
|
||||
off);
|
||||
TALER_amount_ntoh (&amount_hbo,
|
||||
amount);
|
||||
return qconv_amount (cls,
|
||||
&amount_hbo,
|
||||
sizeof (struct TALER_Amount),
|
||||
stmt,
|
||||
off);
|
||||
}
|
||||
|
||||
|
||||
@ -116,10 +115,10 @@ qconv_amount (void *cls,
|
||||
* @param x pointer to the query parameter to pass
|
||||
*/
|
||||
struct GNUNET_SQ_QueryParam
|
||||
TALER_SQ_query_param_amount (const struct TALER_Amount *x)
|
||||
TALER_SQ_query_param_amount_nbo (const struct TALER_AmountNBO *x)
|
||||
{
|
||||
struct GNUNET_SQ_QueryParam res =
|
||||
{ &qconv_amount, NULL, x, sizeof (*x), 2 };
|
||||
{ &qconv_amount_nbo, NULL, x, sizeof (*x), 2 };
|
||||
return res;
|
||||
}
|
||||
|
||||
@ -199,7 +198,6 @@ qconv_round_time (void *cls,
|
||||
{
|
||||
const struct GNUNET_TIME_Absolute *at = data;
|
||||
struct GNUNET_TIME_Absolute tmp;
|
||||
struct GNUNET_TIME_AbsoluteNBO buf;
|
||||
|
||||
(void) cls;
|
||||
GNUNET_assert (sizeof (struct GNUNET_TIME_AbsoluteNBO) == data_len);
|
||||
@ -207,10 +205,9 @@ qconv_round_time (void *cls,
|
||||
tmp = *at;
|
||||
GNUNET_assert (GNUNET_OK ==
|
||||
GNUNET_TIME_round_abs (&tmp));
|
||||
buf = GNUNET_TIME_absolute_hton (tmp);
|
||||
if (SQLITE_OK != sqlite3_bind_int64 (stmt,
|
||||
(int) off,
|
||||
(sqlite3_int64) buf.abs_value_us__))
|
||||
(sqlite3_int64) at->abs_value_us))
|
||||
return GNUNET_SYSERR;
|
||||
return GNUNET_OK;
|
||||
}
|
||||
@ -263,7 +260,7 @@ qconv_round_time_abs (void *cls,
|
||||
GNUNET_TIME_round_abs (&tmp));
|
||||
if (SQLITE_OK != sqlite3_bind_int64 (stmt,
|
||||
(int) off,
|
||||
(sqlite3_int64) at->abs_value_us__))
|
||||
(sqlite3_int64) tmp.abs_value_us))
|
||||
return GNUNET_SYSERR;
|
||||
return GNUNET_OK;
|
||||
}
|
||||
|
@ -39,15 +39,15 @@
|
||||
* #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
|
||||
*/
|
||||
static int
|
||||
extract_amount_nbo (void *cls,
|
||||
sqlite3_stmt *result,
|
||||
unsigned int column,
|
||||
size_t *dst_size,
|
||||
void *dst)
|
||||
extract_amount (void *cls,
|
||||
sqlite3_stmt *result,
|
||||
unsigned int column,
|
||||
size_t *dst_size,
|
||||
void *dst)
|
||||
{
|
||||
struct TALER_AmountNBO *amount = dst;
|
||||
struct TALER_Amount *amount = dst;
|
||||
const char *currency = cls;
|
||||
if ((sizeof (struct TALER_AmountNBO) != *dst_size) ||
|
||||
if ((sizeof (struct TALER_Amount) != *dst_size) ||
|
||||
(SQLITE_INTEGER != sqlite3_column_type (result,
|
||||
(int) column)) ||
|
||||
(SQLITE_INTEGER != sqlite3_column_type (result,
|
||||
@ -56,11 +56,13 @@ extract_amount_nbo (void *cls,
|
||||
GNUNET_break (0);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
GNUNET_strlcpy (amount->currency, currency, TALER_CURRENCY_LEN);
|
||||
GNUNET_strlcpy (amount->currency,
|
||||
currency,
|
||||
TALER_CURRENCY_LEN);
|
||||
amount->value = (uint64_t) sqlite3_column_int64 (result,
|
||||
(int) column);
|
||||
uint64_t frac = (uint64_t) sqlite3_column_int64 (result,
|
||||
column + 1);
|
||||
(int) column + 1);
|
||||
amount->fraction = (uint32_t) frac;
|
||||
return GNUNET_YES;
|
||||
}
|
||||
@ -74,14 +76,14 @@ extract_amount_nbo (void *cls,
|
||||
* @return array entry for the result specification to use
|
||||
*/
|
||||
struct GNUNET_SQ_ResultSpec
|
||||
TALER_SQ_result_spec_amount_nbo (const char *currency,
|
||||
struct TALER_AmountNBO *amount)
|
||||
TALER_SQ_result_spec_amount (const char *currency,
|
||||
struct TALER_Amount *amount)
|
||||
{
|
||||
struct GNUNET_SQ_ResultSpec res = {
|
||||
.conv = &extract_amount_nbo,
|
||||
.conv = &extract_amount,
|
||||
.cls = (void *) currency,
|
||||
.dst = (void *) amount,
|
||||
.dst_size = sizeof (struct TALER_AmountNBO),
|
||||
.dst_size = sizeof (struct TALER_Amount),
|
||||
.num_params = 2
|
||||
};
|
||||
|
||||
@ -102,29 +104,27 @@ TALER_SQ_result_spec_amount_nbo (const char *currency,
|
||||
* #GNUNET_SYSERR if a result was invalid (non-existing field or NULL)
|
||||
*/
|
||||
static int
|
||||
extract_amount (void *cls,
|
||||
sqlite3_stmt *result,
|
||||
unsigned int column,
|
||||
size_t *dst_size,
|
||||
void *dst)
|
||||
extract_amount_nbo (void *cls,
|
||||
sqlite3_stmt *result,
|
||||
unsigned int column,
|
||||
size_t *dst_size,
|
||||
void *dst)
|
||||
{
|
||||
struct TALER_Amount *amount = dst;
|
||||
struct TALER_AmountNBO amount_nbo;
|
||||
if (GNUNET_YES == extract_amount_nbo (cls,
|
||||
result,
|
||||
column,
|
||||
dst_size,
|
||||
&amount_nbo))
|
||||
{
|
||||
TALER_amount_ntoh (amount,
|
||||
&amount_nbo);
|
||||
return GNUNET_YES;
|
||||
}
|
||||
else
|
||||
struct TALER_AmountNBO *amount = dst;
|
||||
struct TALER_Amount amount_hbo;
|
||||
size_t amount_hbo_size = sizeof (struct TALER_Amount);
|
||||
if (GNUNET_YES != extract_amount (cls,
|
||||
result,
|
||||
column,
|
||||
&amount_hbo_size,
|
||||
&amount_hbo))
|
||||
{
|
||||
GNUNET_break (0);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
|
||||
TALER_amount_hton (amount,
|
||||
&amount_hbo);
|
||||
return GNUNET_YES;
|
||||
}
|
||||
|
||||
|
||||
@ -136,14 +136,14 @@ extract_amount (void *cls,
|
||||
* @return array entry for the result specification to use
|
||||
*/
|
||||
struct GNUNET_SQ_ResultSpec
|
||||
TALER_SQ_result_spec_amount (const char *currency,
|
||||
struct TALER_Amount *amount)
|
||||
TALER_SQ_result_spec_amount_nbo (const char *currency,
|
||||
struct TALER_AmountNBO *amount)
|
||||
{
|
||||
struct GNUNET_SQ_ResultSpec res = {
|
||||
.conv = &extract_amount,
|
||||
.conv = &extract_amount_nbo,
|
||||
.cls = (void *) currency,
|
||||
.dst = (void *) amount,
|
||||
.dst_size = sizeof (struct TALER_Amount),
|
||||
.dst_size = sizeof (struct TALER_AmountNBO),
|
||||
.num_params = 2
|
||||
};
|
||||
|
||||
@ -264,7 +264,6 @@ extract_round_time (void *cls,
|
||||
void *dst)
|
||||
{
|
||||
struct GNUNET_TIME_Absolute *udst = dst;
|
||||
struct GNUNET_TIME_AbsoluteNBO res;
|
||||
struct GNUNET_TIME_Absolute tmp;
|
||||
|
||||
(void) cls;
|
||||
@ -280,9 +279,8 @@ extract_round_time (void *cls,
|
||||
GNUNET_break (0);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
res.abs_value_us__ = sqlite3_column_int64 (result,
|
||||
(int) column);
|
||||
tmp = GNUNET_TIME_absolute_ntoh (res);
|
||||
tmp.abs_value_us = sqlite3_column_int64 (result,
|
||||
(int) column);
|
||||
GNUNET_break (GNUNET_OK ==
|
||||
GNUNET_TIME_round_abs (&tmp));
|
||||
*udst = tmp;
|
||||
@ -333,7 +331,6 @@ extract_round_time_nbo (void *cls,
|
||||
void *dst)
|
||||
{
|
||||
struct GNUNET_TIME_AbsoluteNBO *udst = dst;
|
||||
struct GNUNET_TIME_AbsoluteNBO res;
|
||||
struct GNUNET_TIME_Absolute tmp;
|
||||
|
||||
(void) cls;
|
||||
@ -349,9 +346,8 @@ extract_round_time_nbo (void *cls,
|
||||
GNUNET_break (0);
|
||||
return GNUNET_SYSERR;
|
||||
}
|
||||
res.abs_value_us__ = sqlite3_column_int64 (result,
|
||||
(int) column);
|
||||
tmp = GNUNET_TIME_absolute_ntoh (res);
|
||||
tmp.abs_value_us = sqlite3_column_int64 (result,
|
||||
(int) column);
|
||||
GNUNET_break (GNUNET_OK ==
|
||||
GNUNET_TIME_round_abs (&tmp));
|
||||
*udst = GNUNET_TIME_absolute_hton (tmp);
|
||||
|
Loading…
Reference in New Issue
Block a user