unsigned int err_msg_sum = 0; // sum of msg and format lengths
int err_format_len = 0;
int separator_len = 0;
- const char *separator = "\n";
+ const char *separator = "; ";
va_list ap;
- char *new_msg;
+ char *new_msg = NULL;
+ char *old_msg = NULL;
if (!cc)
return;
err_format_len = vasprintf(&new_msg, err_format, ap);
err_msg_len = strlen(cc->err_msg);
+ old_msg = cc->err_msg;
- /* Add new error message to older one */
+ /* Add new error message to the older one */
err_msg_sum = err_format_len + err_msg_len + separator_len + 1;
- cc->err_msg = (char *) realloc (cc->err_msg, (err_msg_sum)*sizeof(char));
+ cc->err_msg = (char *) malloc ((err_msg_sum)*sizeof(char));
if (cc->err_msg == NULL)
return;
- strcat (cc->err_msg, separator);
- strcat (cc->err_msg, new_msg);
+ strncpy(cc->err_msg, new_msg, err_format_len + 1);
+ strncat (cc->err_msg, separator, separator_len + 1);
+ strncat (cc->err_msg, old_msg, err_msg_len + 1);
free(new_msg);
+ free(old_msg);
}
/* If there was some error message in ctx, delete it and make new */
char *new_error = NULL;
char code_str[ERR_CODE_LEN];
int code_len = 0;
- char *separ = "\n";
+ char *separ = ": ";
int separ_len = 0;
- const char *msg_pref = "[CANL:MSG] ";
- int msg_pref_len = 0;
+ int err_msg_len = 0;
glb_ctx *ctx = (glb_ctx*) cc;
code_str[0] = '\0';
get_error_string(cc, code_str);
code_len = strlen(code_str);
+ err_msg_len = strlen(ctx->err_msg);
+
separ_len = strlen(separ);
- msg_pref_len = strlen(msg_pref);
- error_length = msg_pref_len + strlen(ctx->err_msg) + code_len +
- separ_len + 1;
+ error_length = err_msg_len + code_len + separ_len + 1;
new_error = (char *) malloc ((error_length) * sizeof (char));
if (!new_error) {
err = ENOMEM;
goto end;
}
- strncpy(new_error, code_str, code_len + 1);
+ strncpy(new_error, ctx->err_msg, err_msg_len + 1);
strncat(new_error, separ, separ_len + 1);
- strncat(new_error, msg_pref, msg_pref_len + 1);
- strncat(new_error, ctx->err_msg, error_length + 1);
+ strncat(new_error, code_str, code_len + 1);
end:
*reason = new_error;
/*TODO ! map error codes to their human readable strings */
static void get_error_string(glb_ctx *cc, char *code_str)
{
- int prefix_len = 0;
- char *ssl_prefix = "[CANL:ERR:OPEN_SSL] ";
- char *posix_prefix = "[CANL:ERR:POSIX] ";
char *posix_str = NULL;
switch (cc->err_orig) {
case ssl_error:
- prefix_len = strlen(ssl_prefix);
- strncpy(code_str, ssl_prefix, prefix_len + 1);
- ERR_error_string_n(cc->err_code, code_str + prefix_len,
- ERR_CODE_LEN - prefix_len);
+ ERR_error_string_n(cc->err_code, code_str,
+ ERR_CODE_LEN);
break;
case posix_error:
- prefix_len = strlen(posix_prefix);
- strncpy(code_str, posix_prefix, prefix_len + 1);
posix_str = strerror(cc->err_code);
if (posix_str) {
- strncpy(code_str + prefix_len, posix_str,
- ERR_CODE_LEN - prefix_len);
+ strncpy(code_str, posix_str,
+ ERR_CODE_LEN);
code_str[ERR_CODE_LEN - 1] = '\0';
}
break;