summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <fltk@matthiasm.com>2006-04-20 04:34:18 +0000
committerMatthias Melcher <fltk@matthiasm.com>2006-04-20 04:34:18 +0000
commit0b98e816d858a5bc49b0596293760c5237f58e8d (patch)
tree8ffca9ff2b6de8bc6308444efaf2e910e1406c3a
parenta82e7879ceb7eb6e261ca46b0d797d7808a8afce (diff)
Fixed crash in Fl_Preferences if 2nd or 3rd argument in the 'path' constructor were NULL
git-svn-id: file:///fltk/svn/fltk/branches/branch-1.1@5007 ea41ed52-d2ee-0310-a9c1-e6b18d33e121
-rw-r--r--CHANGES5
-rw-r--r--documentation/Fl_Preferences.html20
-rw-r--r--src/Fl_Preferences.cxx15
3 files changed, 25 insertions, 15 deletions
diff --git a/CHANGES b/CHANGES
index 7fa425737..bd4b1370e 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,9 +1,6 @@
-CHANGES IN FLTK 1.1.9
-
- - caret key lookup was missing for OS X
-
CHANGES IN FLTK 1.1.8
+ - caret key lookup was missing for OS X
- FLUID didn't handle loading .fl files with
international characters properly with all compilers
(STR #1150)
diff --git a/documentation/Fl_Preferences.html b/documentation/Fl_Preferences.html
index fc5c723d4..e39b6cdd3 100644
--- a/documentation/Fl_Preferences.html
+++ b/documentation/Fl_Preferences.html
@@ -69,9 +69,11 @@ method.
</ul>
-<H4><a name="Fl_Preferences.Fl_Preferences">Fl_Preferences(enum Root root,
-const char *vendor, const char *application)<BR>
-Fl_Preferences(Fl_Preferences &amp;p, const char *groupname)</a></H4>
+<H4><a name="Fl_Preferences.Fl_Preferences">
+Fl_Preferences(enum Root root, const char *vendor, const char *application)<BR>
+Fl_Preferences(const char *path, const char *vendor, const char *application)<BR>
+Fl_Preferences(Fl_Preferences &amp;p, const char *groupname)<BR>
+</a></H4>
<P>The constructor creates a group that manages name/value pairs and
child groups. Groups are ready for reading and writing at any time.
@@ -89,9 +91,15 @@ name of your application. Both <tt>vendor</tt> and
<tt>application</tt> must be valid relative UNIX pathnames and
may contain '/'s to create deeper file structures.
-<P>The <tt>groupname</tt> argument identifies a group of
-entries. It can contain '/'s to get quick access to individual
-elements inside the hierarchy.
+<P>The second format is used to create a preferences file at an
+arbitrary position in the file system. The file name is generated
+as <tt><i>path</i>/<i>application</i>.prefs</tt>. If <i>application</i>
+is 0, <i>path</i> must contain the full file name.
+
+<P>The third format generates a new group of preference entries
+inside the group or file <i>p</i>. The <tt>groupname</tt> argument
+identifies a group of entries. It can contain '/'s to get quick
+access to individual elements inside the hierarchy.
<H4><a name="Fl_Preferences.~Fl_Preferences">~Fl_Preferences()</a></H4>
diff --git a/src/Fl_Preferences.cxx b/src/Fl_Preferences.cxx
index 98321d28a..dd3ee828e 100644
--- a/src/Fl_Preferences.cxx
+++ b/src/Fl_Preferences.cxx
@@ -693,12 +693,17 @@ Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, Root root, const char
// - construct the name of the file that will hold our preferences
Fl_Preferences::RootNode::RootNode( Fl_Preferences *prefs, const char *path, const char *vendor, const char *application )
{
- char filename[ FL_PATH_MAX ]; filename[0] = 0;
-
- snprintf(filename, sizeof(filename), "%s/%s.prefs", path, application);
-
+ if (!vendor)
+ vendor = "unknown";
+ if (!application) {
+ application = "unknown";
+ filename_ = strdup(path);
+ } else {
+ char filename[ FL_PATH_MAX ]; filename[0] = 0;
+ snprintf(filename, sizeof(filename), "%s/%s.prefs", path, application);
+ filename_ = strdup(filename);
+ }
prefs_ = prefs;
- filename_ = strdup(filename);
vendor_ = strdup(vendor);
application_ = strdup(application);