@@ -28,19 +28,17 @@ func (c *SQLiteConn) loadExtensions(extensions []string) error {
28
28
}
29
29
30
30
for _ , extension := range extensions {
31
- cext := C .CString (extension )
32
- defer C .free (unsafe .Pointer (cext ))
33
- rv = C .sqlite3_load_extension (c .db , cext , nil , nil )
34
- if rv != C .SQLITE_OK {
31
+ if err := c .loadExtension (extension , nil ); err != nil {
35
32
C .sqlite3_enable_load_extension (c .db , 0 )
36
- return errors . New ( C . GoString ( C . sqlite3_errmsg ( c . db )))
33
+ return err
37
34
}
38
35
}
39
36
40
37
rv = C .sqlite3_enable_load_extension (c .db , 0 )
41
38
if rv != C .SQLITE_OK {
42
39
return errors .New (C .GoString (C .sqlite3_errmsg (c .db )))
43
40
}
41
+
44
42
return nil
45
43
}
46
44
@@ -51,19 +49,35 @@ func (c *SQLiteConn) LoadExtension(lib string, entry string) error {
51
49
return errors .New (C .GoString (C .sqlite3_errmsg (c .db )))
52
50
}
53
51
54
- clib := C . CString (lib )
55
- defer C . free ( unsafe . Pointer ( clib ) )
56
- centry := C . CString ( entry )
57
- defer C . free ( unsafe . Pointer ( centry ))
52
+ if err := c . loadExtension (lib , & entry ); err != nil {
53
+ C . sqlite3_enable_load_extension ( c . db , 0 )
54
+ return err
55
+ }
58
56
59
- rv = C .sqlite3_load_extension (c .db , clib , centry , nil )
57
+ rv = C .sqlite3_enable_load_extension (c .db , 0 )
60
58
if rv != C .SQLITE_OK {
61
59
return errors .New (C .GoString (C .sqlite3_errmsg (c .db )))
62
60
}
63
61
64
- rv = C .sqlite3_enable_load_extension (c .db , 0 )
62
+ return nil
63
+ }
64
+
65
+ func (c * SQLiteConn ) loadExtension (lib string , entry * string ) error {
66
+ clib := C .CString (lib )
67
+ defer C .free (unsafe .Pointer (clib ))
68
+
69
+ var centry * C.char
70
+ if entry != nil {
71
+ centry := C .CString (* entry )
72
+ defer C .free (unsafe .Pointer (centry ))
73
+ }
74
+
75
+ var errMsg * C.char
76
+ defer C .sqlite3_free (unsafe .Pointer (errMsg ))
77
+
78
+ rv := C .sqlite3_load_extension (c .db , clib , centry , & errMsg )
65
79
if rv != C .SQLITE_OK {
66
- return errors .New (C .GoString (C . sqlite3_errmsg ( c . db ) ))
80
+ return errors .New (C .GoString (errMsg ))
67
81
}
68
82
69
83
return nil
0 commit comments