Changeset: 93501b1cb37f for MonetDB
URL: https://dev.monetdb.org/hg/MonetDB/rev/93501b1cb37f
Modified Files:
        clients/Tests/exports.stable.out
        clients/mapilib/msettings.c
        clients/mapilib/msettings.h
Branch: odbc-tls
Log Message:

Add msettings_reset function


diffs (71 lines):

diff --git a/clients/Tests/exports.stable.out b/clients/Tests/exports.stable.out
--- a/clients/Tests/exports.stable.out
+++ b/clients/Tests/exports.stable.out
@@ -776,6 +776,7 @@ const msettings *msettings_default;
 msettings *msettings_destroy(msettings *mp);
 bool msettings_malloc_failed(msettings_error err);
 bool msettings_parse_url(msettings *mp, const char *url, char **error_buffer);
+void msettings_reset(msettings *mp);
 void msettings_set_localizer(msettings *mp, const char *(*localizer)(const 
void *data, mparm parm), void *data);
 bool msettings_validate(msettings *mp, char **errmsg);
 const char *wsaerror(int);
diff --git a/clients/mapilib/msettings.c b/clients/mapilib/msettings.c
--- a/clients/mapilib/msettings.c
+++ b/clients/mapilib/msettings.c
@@ -264,7 +264,6 @@ msettings *msettings_create(void)
 {
        msettings *mp = malloc(sizeof(*mp));
        if (!mp) {
-               free(mp);
                return NULL;
        }
        *mp = msettings_default_values;
@@ -323,6 +322,37 @@ bailout:
        return NULL;
 }
 
+void
+msettings_reset(msettings *mp)
+{
+       // free modified string settings
+       struct string *start = &mp->dummy_start_string;
+       struct string *end = &mp->dummy_end_string;
+       for (struct string *p = start; p < end; p++) {
+               if (p->must_free)
+                       free(p->str);
+       }
+
+       // free unknown parameters
+       if (mp->nr_unknown) {
+               for (size_t i = 0; i < 2 * mp->nr_unknown; i++)
+                       free(mp->unknown_parameters[i]);
+               free(mp->unknown_parameters);
+       }
+
+       // free the buffer
+       free(mp->unix_sock_name_buffer);
+
+       // keep the localizer
+       void *localizer = mp->localizer;
+       void *localizer_data = mp->localizer_data;
+
+       // now overwrite the whole thing
+       *mp = *msettings_default;
+       mp->localizer = localizer;
+       mp->localizer_data = localizer_data;
+}
+
 msettings *
 msettings_destroy(msettings *mp)
 {
diff --git a/clients/mapilib/msettings.h b/clients/mapilib/msettings.h
--- a/clients/mapilib/msettings.h
+++ b/clients/mapilib/msettings.h
@@ -126,6 +126,7 @@ mapi_export bool msettings_malloc_failed
 /* returns NULL if could not allocate */
 mapi_export msettings *msettings_create(void);
 mapi_export msettings *msettings_clone(const msettings *mp);
+mapi_export void msettings_reset(msettings *mp);
 mapi_export const msettings *msettings_default;
 
 /* always returns NULL */
_______________________________________________
checkin-list mailing list -- checkin-list@monetdb.org
To unsubscribe send an email to checkin-list-le...@monetdb.org

Reply via email to