--- id3.c.orig	Sun Apr 24 22:19:00 2005
+++ id3.c	Mon Apr 25 00:08:03 2005
@@ -39,6 +39,7 @@
 #include <unistd.h>
 #include <string.h>
 #include <ctype.h>
+#include <iconv.h>
 #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;

