Author: Pekka Riikonen <priikone@silcnet.org>
- Copyright (C) 2007 Pekka Riikonen
+ Copyright (C) 2007 - 2008 Pekka Riikonen
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
*/
-#include "silc.h"
+#include "silcruntime.h"
/* Get last error */
return;
}
- SILC_LOG_DEBUG(("Error: %s (%d)", silc_errno_string(error), error));
-
tls->error_reason[0] = '\0';
+ tls->filename[0] = '\0';
tls->error = error;
}
if (!tls)
return;
- SILC_LOG_DEBUG(("Error: %s (%d)", silc_errno_string(error), error));
-
tls->error_reason[0] = '\0';
+ tls->filename[0] = '\0';
tls->error = error;
}
return;
}
- va_start(va, format);
- silc_vsnprintf(tls->error_reason, sizeof(tls->error_reason), format, va);
- va_end(va);
-
- SILC_LOG_DEBUG(("Error: %s (%d): %s", silc_errno_string(error), error,
- tls->error_reason));
+ if (format) {
+ va_start(va, format);
+ silc_vsnprintf(tls->error_reason, sizeof(tls->error_reason), format, va);
+ va_end(va);
+ }
tls->error = error;
}
if (!tls)
return;
- va_start(va, format);
- silc_vsnprintf(tls->error_reason, sizeof(tls->error_reason), format, va);
- va_end(va);
-
- SILC_LOG_DEBUG(("Error: %s (%d): %s", silc_errno_string(error), error,
- tls->error_reason));
+ if (format) {
+ va_start(va, format);
+ silc_vsnprintf(tls->error_reason, sizeof(tls->error_reason), format, va);
+ va_end(va);
+ }
tls->error = error;
}
"Interrupted",
"Not valid",
"Limit reached",
- "",
+ "Syntax error",
"",
"",
"",
"Address already in use",
"Network is down",
"End of stream",
-
"",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+
+ "Badly placed parenthesis",
+ "Bad hexadecimal number",
+ "Bad match register number",
+ "Badly placed special character",
+ "Regular expression too complex",
+ "Bad regular expression opcode",
+ "Bad repeat value",
};
/* Map error to string */
return silc_errno_strings[error];
}
+
+/* Set error location */
+
+void silc_set_errno_location(const char *filename,
+ SilcUInt32 current_line_number,
+ SilcUInt32 current_column_number)
+{
+ SilcTls tls = silc_thread_get_tls();
+
+ if (!tls)
+ return;
+
+ if (filename)
+ silc_snprintf(tls->filename, sizeof(tls->filename), filename);
+ tls->cur_line = current_line_number;
+ tls->cur_column = current_column_number;
+}
+
+/* Get error location */
+
+SilcBool silc_errno_location(const char **filename,
+ SilcUInt32 *current_line,
+ SilcUInt32 *current_column)
+{
+ SilcTls tls = silc_thread_get_tls();
+
+ if (!tls)
+ return FALSE;
+ if (tls->filename[0] == '\0' && !tls->cur_line && !tls->cur_column)
+ return FALSE;
+
+ if (filename)
+ *filename = tls->filename;
+ if (current_line)
+ *current_line = tls->cur_line;
+ if (current_column)
+ *current_column = tls->cur_column;
+
+ return TRUE;
+}