You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

error.c 803B

123456789101112131415161718192021222324252627282930313233343536
  1. #include "parse/parse.h"
  2. #include <stdio.h>
  3. #include <stdarg.h>
  4. void l2_parse_err(struct l2_parse_error *err, struct l2_token *tok, const char *fmt, ...) {
  5. err->line = tok->line;
  6. err->ch = tok->ch;
  7. char buf[256];
  8. va_list va;
  9. va_start(va, fmt);
  10. int n = vsnprintf(buf, sizeof(buf), fmt, va);
  11. if (n < 0) {
  12. const char *message = "Failed to generate error message!";
  13. err->message = malloc(strlen(message) + 1);
  14. strcpy(err->message, message);
  15. va_end(va);
  16. return;
  17. } else if (n + 1 < sizeof(buf)) {
  18. err->message = malloc(n + 1);
  19. strcpy(err->message, buf);
  20. va_end(va);
  21. return;
  22. }
  23. // Need to allocate for this one
  24. err->message = malloc(n + 1);
  25. vsnprintf(err->message, n + 1, fmt, va);
  26. va_end(va);
  27. }
  28. void l2_parse_error_free(struct l2_parse_error *err) {
  29. free(err->message);
  30. }