seat_dialog_text.c 1.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /*
  2. * Helper routines for dealing with SeatDialogText structures.
  3. */
  4. #include <stdarg.h>
  5. #include "putty.h"
  6. SeatDialogText *seat_dialog_text_new(void)
  7. {
  8. SeatDialogText *sdt = snew(SeatDialogText);
  9. sdt->nitems = sdt->itemsize = 0;
  10. sdt->items = NULL;
  11. return sdt;
  12. }
  13. void seat_dialog_text_free(SeatDialogText *sdt)
  14. {
  15. size_t i; // WINSCP
  16. for (i = 0; i < sdt->nitems; i++)
  17. sfree(sdt->items[i].text);
  18. sfree(sdt->items);
  19. sfree(sdt);
  20. }
  21. static void seat_dialog_text_append_v(
  22. SeatDialogText *sdt, SeatDialogTextType type, const char *fmt, va_list ap)
  23. {
  24. sgrowarray(sdt->items, sdt->itemsize, sdt->nitems);
  25. { // WINSCP
  26. SeatDialogTextItem *item = &sdt->items[sdt->nitems++];
  27. item->type = type;
  28. item->text = dupvprintf(fmt, ap);
  29. } // WINSCP
  30. }
  31. void seat_dialog_text_append(SeatDialogText *sdt, SeatDialogTextType type,
  32. const char *fmt, ...)
  33. {
  34. va_list ap;
  35. va_start(ap, fmt);
  36. seat_dialog_text_append_v(sdt, type, fmt, ap);
  37. va_end(ap);
  38. }