summaryrefslogtreecommitdiff
path: root/extra/comp_err.c
diff options
context:
space:
mode:
authorMarc Alff <marc.alff@sun.com>2010-02-23 17:45:49 -0700
committerMarc Alff <marc.alff@sun.com>2010-02-23 17:45:49 -0700
commitc7fa0c1b34169b225a89b586a87b8065fd54ec27 (patch)
tree9f96cd5e5aa2b4da3e522a2c30dd778961c93301 /extra/comp_err.c
parent10ca1ec054f972c5efcec340bc023977547c7097 (diff)
downloadmariadb-git-c7fa0c1b34169b225a89b586a87b8065fd54ec27.tar.gz
Bug#10143 Perror not showing error description
Backport to 5.5.99
Diffstat (limited to 'extra/comp_err.c')
-rw-r--r--extra/comp_err.c32
1 files changed, 29 insertions, 3 deletions
diff --git a/extra/comp_err.c b/extra/comp_err.c
index 0b894dae477..e4a07caa2ef 100644
--- a/extra/comp_err.c
+++ b/extra/comp_err.c
@@ -199,11 +199,34 @@ int main(int argc, char *argv[])
}
+static void print_escaped_string(FILE *f, const char *str)
+{
+ const char *tmp = str;
+
+ while (tmp[0] != 0)
+ {
+ switch (tmp[0])
+ {
+ case '\\': fprintf(f, "\\\\"); break;
+ case '\'': fprintf(f, "\\\'"); break;
+ case '\"': fprintf(f, "\\\""); break;
+ case '\n': fprintf(f, "\\n"); break;
+ case '\r': fprintf(f, "\\r"); break;
+ default: fprintf(f, "%c", tmp[0]);
+ }
+ tmp++;
+ }
+}
+
+
static int create_header_files(struct errors *error_head)
{
uint er_last;
FILE *er_definef, *sql_statef, *er_namef;
struct errors *tmp_error;
+ struct message *er_msg;
+ const char *er_text;
+
DBUG_ENTER("create_header_files");
LINT_INIT(er_last);
@@ -245,9 +268,12 @@ static int create_header_files(struct errors *error_head)
"{ %-40s,\"%s\", \"%s\" },\n", tmp_error->er_name,
tmp_error->sql_code1, tmp_error->sql_code2);
/*generating er_name file */
- fprintf(er_namef, "{ \"%s\", %d },\n", tmp_error->er_name,
- tmp_error->d_code);
-
+ er_msg= find_message(tmp_error, default_language, 0);
+ er_text = (er_msg ? er_msg->text : "");
+ fprintf(er_namef, "{ \"%s\", %d, \"", tmp_error->er_name,
+ tmp_error->d_code);
+ print_escaped_string(er_namef, er_text);
+ fprintf(er_namef, "\" },\n");
}
/* finishing off with mysqld_error.h */
fprintf(er_definef, "#define ER_ERROR_LAST %d\n", er_last);