diff options
Diffstat (limited to 'extra/comp_err.c')
-rw-r--r-- | extra/comp_err.c | 37 |
1 files changed, 35 insertions, 2 deletions
diff --git a/extra/comp_err.c b/extra/comp_err.c index 806fb5052b4..07369aa565e 100644 --- a/extra/comp_err.c +++ b/extra/comp_err.c @@ -24,11 +24,13 @@ #define MAXLENGTH 1000 #define MAX_ROWS 1000 #define MAX_FILES 10 +#define MAX_CHARSET_NAME 64 int row_count; uint file_pos[MAX_ROWS],file_row_pos[MAX_FILES]; my_string saved_row[MAX_ROWS]; uchar file_head[]= { 254,254,2,1 }; +char charset_name[MAX_CHARSET_NAME]; static void get_options(int *argc,char **argv[]); static int count_rows(FILE *from,pchar c, pchar c2); @@ -40,11 +42,12 @@ static int copy_rows(FILE *to); int main(int argc,char *argv[]) { + uint csnum= 0; int i,error,files,length; uchar head[32]; FILE *from,*to; MY_INIT(argv[0]); - + get_options(&argc,&argv); error=1; row_count=files=0; @@ -61,6 +64,20 @@ int main(int argc,char *argv[]) } VOID(count_rows(from,'"','}')); /* Calculate start-info */ + if (!charset_name[0]) + { + fprintf(stderr,"Character set is not specified in '%s'\n",*argv); + fclose(from); + goto end; + } + + if (!(csnum= get_charset_number(charset_name, MY_CS_PRIMARY))) + { + fprintf(stderr,"Unknown character '%s' in '%s'\n",charset_name, *argv); + fclose(from); + goto end; + } + if (remember_rows(from,'}') < 0) /* Remember rows */ { fprintf(stderr,"Can't find textrows in '%s'\n",*argv); @@ -91,7 +108,8 @@ int main(int argc,char *argv[]) { int2store(head+10+i+i,file_row_pos[i]); } - + head[30]= csnum; + fseek(to,0l,0); if (fwrite(head,1,32,to) != 32) goto end; @@ -134,6 +152,10 @@ static void get_options(register int *argc,register char **argv[]) case 'V': printf("%s (Compile errormessage) Ver 1.3\n",progname); break; + case 'C': + charsets_dir= pos+1; + *(pos--)= '\0'; + break; case 'I': case '?': printf(" %s (Compile errormessage) Ver 1.3\n",progname); @@ -168,8 +190,19 @@ static int count_rows(FILE *from, pchar c, pchar c2) DBUG_ENTER("count_rows"); pos=ftell(from); count=0; + + charset_name[0]= '\0'; while (fgets(rad,MAXLENGTH,from) != NULL) { + if (!strncmp(rad,"character-set=",14)) + { + char *b= rad+14, *e; + for (e=b ; e[0] && e-b < MAX_CHARSET_NAME && + e[0] != ' ' && e[0] != '\r' && + e[0] != '\n' && e[0] != '\t' ; e++); + e[0]= '\0'; + strcpy(charset_name, b); + } if (rad[0] == c || rad[0] == c2) break; count++; |