diff options
Diffstat (limited to 'utils/seat_dialog_text.c')
-rw-r--r-- | utils/seat_dialog_text.c | 41 |
1 files changed, 41 insertions, 0 deletions
diff --git a/utils/seat_dialog_text.c b/utils/seat_dialog_text.c new file mode 100644 index 00000000..03890b93 --- /dev/null +++ b/utils/seat_dialog_text.c @@ -0,0 +1,41 @@ +/* + * Helper routines for dealing with SeatDialogText structures. + */ + +#include <stdarg.h> + +#include "putty.h" + +SeatDialogText *seat_dialog_text_new(void) +{ + SeatDialogText *sdt = snew(SeatDialogText); + sdt->nitems = sdt->itemsize = 0; + sdt->items = NULL; + return sdt; +} + +void seat_dialog_text_free(SeatDialogText *sdt) +{ + for (size_t i = 0; i < sdt->nitems; i++) + sfree(sdt->items[i].text); + sfree(sdt->items); + sfree(sdt); +} + +static void seat_dialog_text_append_v( + SeatDialogText *sdt, SeatDialogTextType type, const char *fmt, va_list ap) +{ + sgrowarray(sdt->items, sdt->itemsize, sdt->nitems); + SeatDialogTextItem *item = &sdt->items[sdt->nitems++]; + item->type = type; + item->text = dupvprintf(fmt, ap); +} + +void seat_dialog_text_append(SeatDialogText *sdt, SeatDialogTextType type, + const char *fmt, ...) +{ + va_list ap; + va_start(ap, fmt); + seat_dialog_text_append_v(sdt, type, fmt, ap); + va_end(ap); +} |