--- id3.c.orig Sun Apr 24 22:19:00 2005 +++ id3.c Mon Apr 25 00:08:03 2005 @@ -39,6 +39,7 @@ #include #include #include +#include #include "genre.h" struct id3 { @@ -53,6 +54,31 @@ unsigned char genre; }; +char *charconv(char *from) +{ + iconv_t cd; + char *to, *top; + size_t inbytesleft, outbytesleft; + + cd = iconv_open("SHIFT-JIS", "EUC-JP"); + if (cd == (iconv_t)-1) { + fprintf(stderr, "iconv open\n"); + exit(1); + } + inbytesleft = strlen(from); + outbytesleft = strlen(from); + to = malloc(outbytesleft + 1); + top = to; + + if (iconv(cd, &from, &inbytesleft, &to, &outbytesleft) == -1) { + fprintf(stderr, "iconv convert\n"); + exit(1); + } + iconv_close(cd); + *to = 0; + return top; +} + int main (int argc, char *argv[]) { int deletetag=0, listtag=0, rfc822style=0, hastag=0, v11tag=0, i, r, exitcode=0; @@ -90,7 +116,7 @@ rfc822style=1; break; case 't': /* Title */ - memcpy(newid3.title, optarg, 30); + memcpy(newid3.title, charconv(optarg), 30); for (i=strlen(optarg);i<30;i++) newid3.title[i]=0; newtitle=1; break; @@ -105,12 +131,12 @@ } break; case 'a': /* Artist */ - memcpy(newid3.artist, optarg, 30); + memcpy(newid3.artist, charconv(optarg), 30); for (i=strlen(optarg);i<30;i++) newid3.artist[i]=0; newartist=1; break; case 'A': /* Album */ - memcpy(newid3.album, optarg, 30); + memcpy(newid3.album, charconv(optarg), 30); for (i=strlen(optarg);i<30;i++) newid3.album[i]=0; newalbum=1; break; @@ -120,7 +146,7 @@ newyear=1; break; case 'c': /* Comment */ - memcpy(newid3.comment, optarg, 28); + memcpy(newid3.comment, charconv(optarg), 28); for (i=strlen(optarg);i<28;i++) newid3.comment[i]=0; newcomment=1; break;