summaryrefslogtreecommitdiff
path: root/src/mint/mint_db.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/mint/mint_db.c')
-rw-r--r--src/mint/mint_db.c41
1 files changed, 40 insertions, 1 deletions
diff --git a/src/mint/mint_db.c b/src/mint/mint_db.c
index c07490805..35f803e1b 100644
--- a/src/mint/mint_db.c
+++ b/src/mint/mint_db.c
@@ -2007,7 +2007,7 @@ db_conn_destroy (void *cls)
* Initialize database subsystem.
*
* @param connection_cfg configuration to use to talk to DB
- * @return GNUNET_OK on success
+ * @return #GNUNET_OK on success
*/
int
TALER_MINT_DB_init (const char *connection_cfg)
@@ -2022,3 +2022,42 @@ TALER_MINT_DB_init (const char *connection_cfg)
TALER_MINT_db_connection_cfg_str = GNUNET_strdup (connection_cfg);
return GNUNET_OK;
}
+
+
+int
+TALER_TALER_DB_extract_amount_nbo (PGresult *result,
+ unsigned int row,
+ int indices[3],
+ struct TALER_AmountNBO *denom_nbo)
+{
+ if ((indices[0] < 0) || (indices[1] < 0) || (indices[2] < 0))
+ return GNUNET_NO;
+ if (sizeof (uint32_t) != PQgetlength (result, row, indices[0]))
+ return GNUNET_SYSERR;
+ if (sizeof (uint32_t) != PQgetlength (result, row, indices[1]))
+ return GNUNET_SYSERR;
+ if (PQgetlength (result, row, indices[2]) > TALER_CURRENCY_LEN)
+ return GNUNET_SYSERR;
+ denom_nbo->value = *(uint32_t *) PQgetvalue (result, row, indices[0]);
+ denom_nbo->fraction = *(uint32_t *) PQgetvalue (result, row, indices[1]);
+ memset (denom_nbo->currency, 0, TALER_CURRENCY_LEN);
+ memcpy (denom_nbo->currency, PQgetvalue (result, row, indices[2]), PQgetlength (result, row, indices[2]));
+ return GNUNET_OK;
+}
+
+
+int
+TALER_TALER_DB_extract_amount (PGresult *result,
+ unsigned int row,
+ int indices[3],
+ struct TALER_Amount *denom)
+{
+ struct TALER_AmountNBO denom_nbo;
+ int res;
+
+ res = TALER_TALER_DB_extract_amount_nbo (result, row, indices, &denom_nbo);
+ if (GNUNET_OK != res)
+ return res;
+ *denom = TALER_amount_ntoh (denom_nbo);
+ return GNUNET_OK;
+}