gchar *gnc_uri_normalize_uri (const gchar *uri, gboolean allow_password) { gchar *protocol = NULL; gchar *hostname = NULL; gint32 port = 0; gchar *username = NULL; gchar *password = NULL; gchar *path = NULL; gchar *newuri = NULL; gnc_uri_get_components ( uri, &protocol, &hostname, &port, &username, &password, &path ); if (allow_password) newuri = gnc_uri_create_uri ( protocol, hostname, port, username, password, path); else newuri = gnc_uri_create_uri ( protocol, hostname, port, username, /* no password */ NULL, path); g_free (protocol); g_free (hostname); g_free (username); g_free (password); g_free (path); return newuri; }
gchar *gnc_uri_get_path (const gchar *uri) { gchar *protocol = NULL; gchar *hostname = NULL; gint32 port = 0; gchar *username = NULL; gchar *password = NULL; gchar *path = NULL; gnc_uri_get_components ( uri, &protocol, &hostname, &port, &username, &password, &path ); g_free (protocol); g_free (hostname); g_free (username); g_free (password); return path; }
UriStrings::UriStrings(const std::string& uri) { gchar *protocol, *host, *username, *password, *dbname; int portnum; gnc_uri_get_components(uri.c_str(), &protocol, &host, &portnum, &username, &password, &dbname); m_protocol = std::string{protocol}; m_host = std::string{host}; m_dbname = std::string{dbname}; m_username = std::string{username}; m_password = std::string{password}; m_portnum = portnum; g_free(protocol); g_free(host); g_free(username); g_free(password); g_free(dbname); }
static void gnc_state_set_base (const QofSession *session) { gchar *basename, *original = NULL, *filename, *file_guid; gchar *sf_extension = NULL, *newstyle_filename = NULL; const gchar *uri; gchar guid_string[GUID_ENCODING_LENGTH+1]; QofBook *book; const GncGUID *guid; GKeyFile *key_file = NULL; gint i; /* Reset filenames possibly found in a previous run */ g_free (state_file_name); g_free (state_file_name_pre_241); state_file_name = NULL; state_file_name_pre_241 = NULL; uri = qof_session_get_url(session); ENTER("session %p (%s)", session, uri ? uri : "(null)"); if (!uri) { LEAVE("no uri, nothing to do"); return; } /* Get the book GncGUID */ book = qof_session_get_book(session); guid = qof_entity_get_guid(QOF_INSTANCE(book)); guid_to_string_buff(guid, guid_string); if (gnc_uri_is_file_uri (uri)) { /* The book_uri is a true file, use its basename. */ gchar *path = gnc_uri_get_path (uri); basename = g_path_get_basename (path); g_free (path); } else { /* The book_uri is composed of database connection parameters. */ gchar* protocol = NULL; gchar* host = NULL; gchar* dbname = NULL; gchar* username = NULL; gchar* password = NULL; gint portnum = 0; gnc_uri_get_components (uri, &protocol, &host, &portnum, &username, &password, &dbname); basename = g_strjoin ("_", protocol, host, username, dbname, NULL); g_free (protocol); g_free (host); g_free (username); g_free (password); g_free (dbname); } DEBUG ("Basename %s", basename); original = gnc_build_book_path (basename); g_free (basename); DEBUG ("Original %s", original); sf_extension = g_strdup (STATE_FILE_EXT); i = 1; while (1) { if (i == 1) filename = g_strconcat (original, sf_extension, NULL); else filename = g_strdup_printf ("%s_%d%s", original, i, sf_extension); DEBUG ("Trying %s", filename); key_file = gnc_key_file_load_from_file (filename, TRUE, FALSE, NULL); DEBUG ("Result %p", key_file); if (!key_file) { DEBUG ("No key file by that name"); if (g_strcmp0 (sf_extension, STATE_FILE_EXT) == 0) { DEBUG ("Trying old state file names for compatibility"); i = 1; g_free (sf_extension); sf_extension = g_strdup (""); /* Regardless of whether or not an old state file is found, * the currently tested name should be used for the future * state file. */ state_file_name = filename; continue; } /* No old style file found. We'll return with the new file name * we set earlier, and no existing key file. */ g_free (filename); break; } file_guid = g_key_file_get_string (key_file, STATE_FILE_TOP, STATE_FILE_BOOK_GUID, NULL); DEBUG ("File GncGUID is %s", file_guid ? file_guid : "<not found>"); if (g_strcmp0 (guid_string, file_guid) == 0) { DEBUG ("Matched !!!"); /* Save the found file for later use. Which name to save to * depends on whether it was an old or new style file name */ if (g_strcmp0 (sf_extension, STATE_FILE_EXT) == 0) state_file_name = filename; else state_file_name_pre_241 = filename; g_free (file_guid); break; } DEBUG ("Clean up this pass"); g_free (file_guid); g_key_file_free (key_file); g_free (filename); i++; } DEBUG("Clean up"); g_free(sf_extension); g_free(original); g_key_file_free (key_file); LEAVE (); }
int main(int argc, char **argv) { int i; qof_init(); /* TEST: gnc_uri_get_components */ for (i = 0; strs[i].uri != NULL; i++) { gchar *tprotocol = NULL; gchar *thostname = NULL; gchar *tusername = NULL; gchar *tpassword = NULL; gchar *tpath = NULL; gint32 tport = 0; gboolean testresult; gnc_uri_get_components( strs[i].uri, &tprotocol, &thostname, &tport, &tusername, &tpassword, &tpath ); testresult = ( safe_strcmp ( tprotocol, strs[i].protocol ) == 0 ) & ( safe_strcmp ( thostname, strs[i].hostname ) == 0 ) & ( safe_strcmp ( tusername, strs[i].username ) == 0 ) & ( safe_strcmp ( tpassword, strs[i].password ) == 0 ) & ( safe_strcmp ( tpath, strs[i].path ) == 0 ) & ( tport == strs[i].port ); do_test_args(testresult, "gnc_uri_get_components", __FILE__, __LINE__, "\n %s:\n" " Expected: %s, %s, %s, %s, %s, %d\n" " Got : %s, %s, %s, %s, %s, %d\n", strs[i].uri, strs[i].protocol, strs[i].hostname, strs[i].username, strs[i].password, strs[i].path, strs[i].port, tprotocol, thostname, tusername, tpassword, tpath, tport); g_free(tprotocol); g_free(thostname); g_free(tusername); g_free(tpassword); g_free(tpath); } /* TEST: gnc_uri_get_protocol */ for (i = 0; strs[i].uri != NULL; i++) { gchar *tprotocol = NULL; gboolean testresult; tprotocol = gnc_uri_get_protocol( strs[i].uri ); testresult = ( safe_strcmp ( tprotocol, strs[i].protocol ) == 0 ); do_test_args(testresult, "gnc_uri_get_protocol", __FILE__, __LINE__, "\n %s:\n" " Expected: %s\n" " Got : %s\n", strs[i].uri, strs[i].protocol, tprotocol ); g_free(tprotocol); } /* TEST: gnc_uri_get_path */ for (i = 0; strs[i].uri != NULL; i++) { gchar *tpath = NULL; gboolean testresult; tpath = gnc_uri_get_path( strs[i].uri ); testresult = ( safe_strcmp ( tpath, strs[i].path ) == 0 ); do_test_args(testresult, "gnc_uri_get_path", __FILE__, __LINE__, "\n %s:\n" " Expected: %s\n" " Got : %s\n", strs[i].uri, strs[i].path, tpath ); g_free(tpath); } /* TEST: gnc_uri_create_uri */ for (i = 0; strs[i].uri != NULL; i++) { gchar *turi = NULL; gboolean testresult; turi = gnc_uri_create_uri( strs[i].protocol, strs[i].hostname, strs[i].port, strs[i].username, strs[i].password, strs[i].path ); testresult = ( safe_strcmp ( turi, strs[i].created_uri ) == 0 ); do_test_args(testresult, "gnc_uri_create_uri", __FILE__, __LINE__, "\n %s, %s, %s, %s, %s, %d:\n" " Expected: %s\n" " Got : %s\n", strs[i].protocol, strs[i].hostname, strs[i].username, strs[i].password, strs[i].path, strs[i].port, strs[i].created_uri, turi); g_free(turi); } /* TEST: gnc_uri_normalize_uri */ for (i = 0; strs[i].uri != NULL; i++) { gchar *turi = NULL; gboolean testresult; turi = gnc_uri_normalize_uri( strs[i].uri, strs[i].want_password ); testresult = ( safe_strcmp ( turi, strs[i].normalized_uri ) == 0 ); do_test_args(testresult, "gnc_uri_normalize_uri", __FILE__, __LINE__, "\n %s:\n" " Expected: %s\n" " Got : %s\n", strs[i].uri, strs[i].normalized_uri, turi ); g_free(turi); } /* TEST: gnc_uri_is_file_protocol */ for (i = 0; strs[i].uri != NULL; i++) { gboolean tis_file_protocol; gboolean testresult; tis_file_protocol = gnc_uri_is_file_protocol( strs[i].protocol ); testresult = ( tis_file_protocol == strs[i].is_file_protocol ); do_test_args(testresult, "gnc_uri_is_file_protocol", __FILE__, __LINE__, "\n %s:\n" " Expected: %s\n" " Got : %s\n", strs[i].uri, strs[i].is_file_protocol, tis_file_protocol ); } /* TEST: gnc_uri_is_file_uri */ for (i = 0; strs[i].uri != NULL; i++) { gboolean tis_file_uri; gboolean testresult; tis_file_uri = gnc_uri_is_file_uri( strs[i].uri ); testresult = ( tis_file_uri == strs[i].is_file_protocol ); do_test_args(testresult, "gnc_uri_is_file_uri", __FILE__, __LINE__, "\n %s:\n" " Expected: %s\n" " Got : %s\n", strs[i].uri, strs[i].is_file_protocol, tis_file_uri ); } print_test_results(); return get_rv(); }