58
58
#include "splint-defs.h"
59
59
#endif
60
60
61
- #ifdef WIN32
61
+ #ifdef G_OS_WIN32
62
62
#include <Winsock2.h>
63
- #define HOST_NAME_MAX 255
64
63
#define GETPID () GetCurrentProcessId()
65
64
#else
66
65
#include <limits.h>
67
66
#include <unistd.h>
68
- #ifdef DARWIN
69
- #define HOST_NAME_MAX _POSIX_HOST_NAME_MAX
70
- #endif
71
67
#define GETPID () getpid()
72
68
#endif
73
69
70
+ #define GNC_HOST_NAME_MAX 255
74
71
#define TRANSACTION_NAME "trans"
75
72
76
73
static QofLogModule log_module = G_LOG_DOMAIN ;
@@ -333,6 +330,7 @@ gnc_dbi_sqlite3_session_begin( QofBackend *qbe, QofSession *session,
333
330
result = dbi_conn_connect ( be -> conn );
334
331
g_free ( basename );
335
332
g_free ( dirname );
333
+ /* Need some better error handling here. In particular, need to emit a QOF_ERROR_LOCKED if the database is in use by another process. */
336
334
if ( result < 0 )
337
335
{
338
336
PERR ( "Unable to connect to %s: %d\n" , book_id , result );
@@ -478,8 +476,8 @@ gnc_dbi_lock_database ( QofBackend* qbe, gboolean ignore_lock )
478
476
dbi_result_free ( result );
479
477
result = NULL ;
480
478
}
481
- result = dbi_conn_queryf ( dcon , "CREATE TABLE GNCLOCK ( Hostname varchar(%d), PID int )" , HOST_NAME_MAX );
482
- if ( dbi_conn_error_flag ( dcon ) )
479
+ result = dbi_conn_queryf ( dcon , "CREATE TABLE GNCLOCK ( Hostname varchar(%d), PID int )" , GNC_HOST_NAME_MAX );
480
+ if ( dbi_conn_error ( dcon , NULL ) )
483
481
{
484
482
const gchar * errstr ;
485
483
dbi_conn_error ( dcon , & errstr );
@@ -503,7 +501,7 @@ gnc_dbi_lock_database ( QofBackend* qbe, gboolean ignore_lock )
503
501
if ( (result = dbi_conn_query ( dcon , "BEGIN" )) )
504
502
{
505
503
/* Check for an existing entry; delete it if ignore_lock is true, otherwise fail */
506
- gchar hostname [ HOST_NAME_MAX + 1 ];
504
+ gchar hostname [ GNC_HOST_NAME_MAX + 1 ];
507
505
if (result )
508
506
{
509
507
dbi_result_free ( result );
@@ -541,7 +539,7 @@ gnc_dbi_lock_database ( QofBackend* qbe, gboolean ignore_lock )
541
539
}
542
540
/* Add an entry and commit the transaction */
543
541
memset ( hostname , 0 , sizeof (hostname ) );
544
- gethostname ( hostname , HOST_NAME_MAX );
542
+ gethostname ( hostname , GNC_HOST_NAME_MAX );
545
543
result = dbi_conn_queryf ( dcon ,
546
544
"INSERT INTO GNCLOCK VALUES ('%s', '%d')" ,
547
545
hostname , (int )GETPID () );
@@ -588,7 +586,7 @@ gnc_dbi_unlock( QofBackend *qbe )
588
586
const gchar * dbname = NULL ;
589
587
590
588
g_return_if_fail ( dcon != NULL );
591
- g_return_if_fail ( dbi_conn_error_flag ( dcon ) == 0 );
589
+ g_return_if_fail ( dbi_conn_error ( dcon , NULL ) == 0 );
592
590
593
591
dbname = dbi_conn_get_option ( dcon , "dbname" );
594
592
/* Check if the lock table exists */
@@ -607,14 +605,14 @@ gnc_dbi_unlock( QofBackend *qbe )
607
605
if ( ( result = dbi_conn_query ( dcon , "BEGIN" )) )
608
606
{
609
607
/* Delete the entry if it's our hostname and PID */
610
- gchar hostname [ HOST_NAME_MAX + 1 ];
608
+ gchar hostname [ GNC_HOST_NAME_MAX + 1 ];
611
609
if (result )
612
610
{
613
611
dbi_result_free ( result );
614
612
result = NULL ;
615
613
}
616
614
memset ( hostname , 0 , sizeof (hostname ) );
617
- gethostname ( hostname , HOST_NAME_MAX );
615
+ gethostname ( hostname , GNC_HOST_NAME_MAX );
618
616
result = dbi_conn_queryf ( dcon , "SELECT * FROM GNCLOCK WHERE Hostname = '%s' AND PID = '%d'" , hostname , (int )GETPID () );
619
617
if ( result && dbi_result_get_numrows ( result ) )
620
618
{
0 commit comments