aboutsummaryrefslogtreecommitdiffstats
path: root/src/include/ipxe
diff options
context:
space:
mode:
Diffstat (limited to 'src/include/ipxe')
-rw-r--r--src/include/ipxe/editbox.h2
-rw-r--r--src/include/ipxe/editstring.h33
-rw-r--r--src/include/ipxe/errfile.h1
3 files changed, 23 insertions, 13 deletions
diff --git a/src/include/ipxe/editbox.h b/src/include/ipxe/editbox.h
index 2c70e0b6b..c14bbdc5b 100644
--- a/src/include/ipxe/editbox.h
+++ b/src/include/ipxe/editbox.h
@@ -36,7 +36,7 @@ enum edit_box_flags {
EDITBOX_STARS = 0x0001,
};
-extern void init_editbox ( struct edit_box *box, char *buf, size_t len,
+extern void init_editbox ( struct edit_box *box, char **buf,
WINDOW *win, unsigned int row, unsigned int col,
unsigned int width, unsigned int flags )
__attribute__ (( nonnull (1, 2) ));
diff --git a/src/include/ipxe/editstring.h b/src/include/ipxe/editstring.h
index a00a8adaa..7ad8fb304 100644
--- a/src/include/ipxe/editstring.h
+++ b/src/include/ipxe/editstring.h
@@ -11,10 +11,8 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
/** An editable string */
struct edit_string {
- /** Buffer for string */
- char *buf;
- /** Size of buffer (including terminating NUL) */
- size_t len;
+ /** Dynamically allocated string buffer */
+ char **buf;
/** Cursor position */
unsigned int cursor;
@@ -32,17 +30,28 @@ struct edit_string {
* Initialise editable string
*
* @v string Editable string
- * @v buf Buffer for string
- * @v len Length of buffer
+ * @v buf Dynamically allocated string buffer
+ *
+ * The @c buf parameter must be the address of a caller-provided
+ * pointer to a NUL-terminated string allocated using malloc() (or
+ * equivalent, such as strdup()). Any edits made to the string will
+ * realloc() the string buffer as needed.
+ *
+ * The caller may choose leave the initial string buffer pointer as @c
+ * NULL, in which case it will be allocated upon the first attempt to
+ * insert a character into the buffer. If the caller does this, then
+ * it must be prepared to find the pointer still @c NULL after
+ * editing, since the user may never attempt to insert any characters.
*/
-static inline void init_editstring ( struct edit_string *string, char *buf,
- size_t len ) {
+static inline __nonnull void init_editstring ( struct edit_string *string,
+ char **buf ) {
+
string->buf = buf;
- string->len = len;
}
-extern void replace_string ( struct edit_string *string,
- const char *replacement ) __nonnull;
-extern int edit_string ( struct edit_string *string, int key ) __nonnull;
+extern __attribute__ (( nonnull ( 1 ) )) int
+replace_string ( struct edit_string *string, const char *replacement );
+
+extern __nonnull int edit_string ( struct edit_string *string, int key );
#endif /* _IPXE_EDITSTRING_H */
diff --git a/src/include/ipxe/errfile.h b/src/include/ipxe/errfile.h
index 0ab37230a..96981dd06 100644
--- a/src/include/ipxe/errfile.h
+++ b/src/include/ipxe/errfile.h
@@ -416,6 +416,7 @@ FILE_LICENCE ( GPL2_OR_LATER_OR_UBDL );
#define ERRFILE_efi_settings ( ERRFILE_OTHER | 0x005e0000 )
#define ERRFILE_x25519 ( ERRFILE_OTHER | 0x005f0000 )
#define ERRFILE_des ( ERRFILE_OTHER | 0x00600000 )
+#define ERRFILE_editstring ( ERRFILE_OTHER | 0x00610000 )
/** @} */