summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMatthias Melcher <github@matthiasm.com>2024-03-02 23:49:35 +0100
committerMatthias Melcher <github@matthiasm.com>2024-03-02 23:49:35 +0100
commitf1c9b198bba52d19a840efc7a77a9752d711ee57 (patch)
tree90ec58fa6e6ab849ae86ac39215588698feaa972
parent4ccadff4b9120cba114da964fd0e79c762a6fd3d (diff)
Promote fl_strlcpy to <FL/fl_string_functions.h>
-rw-r--r--FL/fl_string_functions.h4
-rw-r--r--documentation/src/editor.dox14
-rw-r--r--src/fl_string_functions.cxx32
-rw-r--r--src/flstring.c32
-rw-r--r--src/flstring.h4
-rw-r--r--test/editor.cxx14
6 files changed, 53 insertions, 47 deletions
diff --git a/FL/fl_string_functions.h b/FL/fl_string_functions.h
index 16e7a5ada..b88dc4973 100644
--- a/FL/fl_string_functions.h
+++ b/FL/fl_string_functions.h
@@ -28,6 +28,8 @@
extern "C" {
#endif
+#include <stddef.h> // size_t
+
/** \defgroup fl_string String handling functions
String handling functions declared in <FL/fl_string_functions.h>
@{
@@ -35,6 +37,8 @@ extern "C" {
FL_EXPORT char* fl_strdup(const char *s);
+FL_EXPORT size_t fl_strlcpy(char *, const char *, size_t);
+
/** @} */
#ifdef __cplusplus
diff --git a/documentation/src/editor.dox b/documentation/src/editor.dox
index 13b23b58d..299af9ff6 100644
--- a/documentation/src/editor.dox
+++ b/documentation/src/editor.dox
@@ -52,7 +52,6 @@ marked in the source code as `TUTORIAL_CHAPTER = 1`.
\code
#include <FL/Fl_Double_Window.H>
#include <FL/Fl.H>
-#include <string.h>
Fl_Double_Window *app_window = NULL;
@@ -113,6 +112,7 @@ a buffer for the current filename.
#include <FL/Fl_Menu_Bar.H>
#include <FL/fl_ask.H>
#include <FL/filename.H>
+#include <FL/fl_string_functions.h>
Fl_Menu_Bar *app_menu_bar = NULL;
bool text_changed = false;
@@ -161,7 +161,7 @@ NULL, the window title will revert to "FLTK Editor".
\code
void set_filename(const char *new_filename) {
if (new_filename) {
- strlcpy(app_filename, new_filename, FL_PATH_MAX);
+ fl_strlcpy(app_filename, new_filename, FL_PATH_MAX);
} else {
app_filename[0] = 0;
}
@@ -366,7 +366,7 @@ little chunk of code will separate the file name from the path before we call
// insert before `if (file_chooser.show()...`
if (app_filename[0]) {
char temp_filename[FL_PATH_MAX];
- strlcpy(temp_filename, app_filename, FL_PATH_MAX);
+ fl_strlcpy(temp_filename, app_filename, FL_PATH_MAX);
const char *name = fl_filename_name(temp_filename);
if (name) {
file_chooser.preset_file(name);
@@ -479,7 +479,7 @@ name:
...
if (app_filename[0]) {
char temp_filename[FL_PATH_MAX];
- strlcpy(temp_filename, app_filename, FL_PATH_MAX);
+ fl_strlcpy(temp_filename, app_filename, FL_PATH_MAX);
const char *name = fl_filename_name(temp_filename);
if (name) {
file_chooser.preset_file(name);
@@ -648,7 +648,7 @@ char last_find_text[1024] = "";
void menu_find_callback(Fl_Widget*, void* v) {
const char *find_text = fl_input("Find in text:", last_find_text);
if (find_text) {
- strlcpy(last_find_text, find_text, sizeof(last_find_text));
+ fl_strlcpy(last_find_text, find_text, sizeof(last_find_text));
find_next(find_text);
}
}
@@ -812,8 +812,8 @@ function:
\code
void Replace_Dialog::find_next_callback(Fl_Widget*, void* my_dialog) {
Replace_Dialog *dlg = static_cast<Replace_Dialog*>(my_dialog);
- strlcpy(last_find_text, dlg->find_text_input->value(), sizeof(last_find_text));
- strlcpy(last_replace_text, dlg->replace_text_input->value(), sizeof(last_replace_text));
+ fl_strlcpy(last_find_text, dlg->find_text_input->value(), sizeof(last_find_text));
+ fl_strlcpy(last_replace_text, dlg->replace_text_input->value(), sizeof(last_replace_text));
if (last_find_text[0])
find_next(last_find_text);
}
diff --git a/src/fl_string_functions.cxx b/src/fl_string_functions.cxx
index 6b7fcead7..2e5e5d5d4 100644
--- a/src/fl_string_functions.cxx
+++ b/src/fl_string_functions.cxx
@@ -32,3 +32,35 @@
char *fl_strdup(const char *s) {
return Fl::system_driver()->strdup(s);
}
+
+/*
+ * 'fl_strlcpy()' - Safely copy two strings.
+ */
+size_t /* O - Length of string */
+fl_strlcpy(char *dst, /* O - Destination string */
+ const char *src, /* I - Source string */
+ size_t size) { /* I - Size of destination string buffer */
+ size_t srclen; /* Length of source string */
+
+
+ /*
+ * Figure out how much room is needed...
+ */
+
+ size --;
+
+ srclen = strlen(src);
+
+ /*
+ * Copy the appropriate amount...
+ */
+
+ if (srclen > size) srclen = size;
+
+ memcpy(dst, src, srclen);
+ dst[srclen] = '\0';
+
+ return (srclen);
+}
+
+
diff --git a/src/flstring.c b/src/flstring.c
index 6298a6d70..fab89feed 100644
--- a/src/flstring.c
+++ b/src/flstring.c
@@ -56,38 +56,6 @@ fl_strlcat(char *dst, /* O - Destination string */
return (dstlen + srclen);
}
-
-/*
- * 'fl_strlcpy()' - Safely copy two strings.
- */
-
-size_t /* O - Length of string */
-fl_strlcpy(char *dst, /* O - Destination string */
- const char *src, /* I - Source string */
- size_t size) { /* I - Size of destination string buffer */
- size_t srclen; /* Length of source string */
-
-
- /*
- * Figure out how much room is needed...
- */
-
- size --;
-
- srclen = strlen(src);
-
- /*
- * Copy the appropriate amount...
- */
-
- if (srclen > size) srclen = size;
-
- memcpy(dst, src, srclen);
- dst[srclen] = '\0';
-
- return (srclen);
-}
-
#define C_RANGE(c,l,r) ( (c) >= (l) && (c) <= (r) )
/**
diff --git a/src/flstring.h b/src/flstring.h
index d902c0a9f..e4c7ea491 100644
--- a/src/flstring.h
+++ b/src/flstring.h
@@ -35,6 +35,7 @@
# include <strings.h>
# endif /* HAVE_STRINGS_H */
# include <ctype.h>
+# include <FL/fl_string_functions.h>
/*
* Apparently Unixware defines "index" to strchr (!) rather than
@@ -81,7 +82,8 @@ FL_EXPORT extern size_t fl_strlcat(char *, const char *, size_t);
# define strlcat fl_strlcat
# endif /* !HAVE_STRLCAT */
-FL_EXPORT extern size_t fl_strlcpy(char *, const char *, size_t);
+// promoted to <FL/fl_string_functions.h>
+//FL_EXPORT extern size_t fl_strlcpy(char *, const char *, size_t);
# ifndef HAVE_STRLCPY
# define strlcpy fl_strlcpy
# endif /* !HAVE_STRLCPY */
diff --git a/test/editor.cxx b/test/editor.cxx
index a6ab7734c..360e3eed7 100644
--- a/test/editor.cxx
+++ b/test/editor.cxx
@@ -26,7 +26,6 @@
#include <FL/Fl_Double_Window.H>
#include <FL/Fl.H>
-#include <string.h>
Fl_Double_Window *app_window = NULL;
@@ -50,6 +49,7 @@ int main (int argc, char **argv) {
#include <FL/Fl_Menu_Bar.H>
#include <FL/fl_ask.H>
#include <FL/filename.H>
+#include <FL/fl_string_functions.h>
Fl_Menu_Bar *app_menu_bar = NULL;
bool text_changed = false;
@@ -81,7 +81,7 @@ void set_changed(bool v) {
void set_filename(const char *new_filename) {
if (new_filename) {
- strlcpy(app_filename, new_filename, FL_PATH_MAX);
+ fl_strlcpy(app_filename, new_filename, FL_PATH_MAX);
} else {
app_filename[0] = 0;
}
@@ -188,7 +188,7 @@ void menu_save_as_callback(Fl_Widget*, void*) {
file_chooser.type(Fl_Native_File_Chooser::BROWSE_SAVE_FILE);
if (app_filename[0]) {
char temp_filename[FL_PATH_MAX];
- strlcpy(temp_filename, app_filename, FL_PATH_MAX);
+ fl_strlcpy(temp_filename, app_filename, FL_PATH_MAX);
const char *name = fl_filename_name(temp_filename);
if (name) {
file_chooser.preset_file(name);
@@ -263,7 +263,7 @@ void menu_open_callback(Fl_Widget*, void*) {
file_chooser.type(Fl_Native_File_Chooser::BROWSE_FILE);
if (app_filename[0]) {
char temp_filename[FL_PATH_MAX];
- strlcpy(temp_filename, app_filename, FL_PATH_MAX);
+ fl_strlcpy(temp_filename, app_filename, FL_PATH_MAX);
const char *name = fl_filename_name(temp_filename);
if (name) {
file_chooser.preset_file(name);
@@ -399,7 +399,7 @@ bool find_next(const char *needle) {
void menu_find_callback(Fl_Widget*, void* v) {
const char *find_text = fl_input("Find in text:", last_find_text);
if (find_text) {
- strlcpy(last_find_text, find_text, sizeof(last_find_text));
+ fl_strlcpy(last_find_text, find_text, sizeof(last_find_text));
find_next(find_text);
}
}
@@ -497,8 +497,8 @@ void Replace_Dialog::show() {
void Replace_Dialog::find_next_callback(Fl_Widget*, void* my_dialog) {
Replace_Dialog *dlg = static_cast<Replace_Dialog*>(my_dialog);
- strlcpy(last_find_text, dlg->find_text_input->value(), sizeof(last_find_text));
- strlcpy(last_replace_text, dlg->replace_text_input->value(), sizeof(last_replace_text));
+ fl_strlcpy(last_find_text, dlg->find_text_input->value(), sizeof(last_find_text));
+ fl_strlcpy(last_replace_text, dlg->replace_text_input->value(), sizeof(last_replace_text));
if (last_find_text[0])
find_next(last_find_text);
}