|
11 | 11 | #include <sqlite3.h> |
12 | 12 |
|
13 | 13 | #define MAX_ATOM_LENGTH 255 |
14 | | -#define MAX_PATHNAME 512 |
15 | 14 |
|
16 | 15 | static ErlNifResourceType* connection_type = NULL; |
17 | 16 | static ErlNifResourceType* statement_type = NULL; |
@@ -197,23 +196,24 @@ exqlite_open(ErlNifEnv* env, int argc, const ERL_NIF_TERM argv[]) |
197 | 196 | connection_t* conn = NULL; |
198 | 197 | sqlite3* db = NULL; |
199 | 198 | ErlNifMutex* mutex = NULL; |
200 | | - char filename[MAX_PATHNAME]; |
201 | 199 | ERL_NIF_TERM result; |
| 200 | + ErlNifBinary bin; |
| 201 | + |
| 202 | + ERL_NIF_TERM eos = enif_make_int(env, 0); |
202 | 203 |
|
203 | 204 | if (argc != 2) { |
204 | 205 | return enif_make_badarg(env); |
205 | 206 | } |
206 | 207 |
|
207 | | - size = enif_get_string(env, argv[0], filename, MAX_PATHNAME, ERL_NIF_LATIN1); |
208 | | - if (size <= 0) { |
| 208 | + if (!enif_inspect_iolist_as_binary(env, enif_make_list2(env, argv[0], eos), &bin)) { |
209 | 209 | return make_error_tuple(env, "invalid_filename"); |
210 | 210 | } |
211 | 211 |
|
212 | 212 | if (!enif_get_int(env, argv[1], &flags)) { |
213 | 213 | return make_error_tuple(env, "invalid_flags"); |
214 | 214 | } |
215 | 215 |
|
216 | | - rc = sqlite3_open_v2(filename, &db, flags, NULL); |
| 216 | + rc = sqlite3_open_v2((char*)bin.data, &db, flags, NULL); |
217 | 217 | if (rc != SQLITE_OK) { |
218 | 218 | return make_error_tuple(env, "database_open_failed"); |
219 | 219 | } |
|
0 commit comments