メニュー

関連ページリンク

トップ > _common > _common - 人気ブログ(Blog)検索結果詳細 (2008年12月2日 5時)

プログラミング iconv 恐ろしいバグ

本当に偶然、恐ろしいバグ?を発見した。

報告しておく。

convert1: Invalid argument

が出たので調べていたら見つけた。

こんなのわかるわけないよ。

#include <stdio.h>
#include <iconv.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>



size_t convert(char *inbuf, char *outbuf, int byteread);
int main(){

    size_t ret_val;

    int src;
    FILE *dst;

    int byteread;

    char inbuf[21701];

    char *outbuf = (char *)malloc(86243);
	if(outbuf == NULL) {
		perror("maloc");
		exit(EXIT_FAILURE);
	}

    src = open("bbsmenu", O_RDONLY);
    if(!src){
	      perror("open");
	      exit(EXIT_FAILURE);
	      }

    dst = fopen("utf8.txt", "w");
    if(!dst){
	      perror("open");
	      exit(EXIT_FAILURE);
	      }


    while(1){
	byteread = read(src, inbuf, sizeof(inbuf));
	
	if (byteread > 0){
			ret_val = convert(inbuf, outbuf, byteread);
			fwrite(outbuf, sizeof(char), ret_val, dst);
		
	} else {
		break;
	}
    }
    
    fclose(dst);
    close(src);

    return 0;
}

size_t convert(char *inbuf, char *outbuf, int byteread){

    iconv_t icd;

    size_t inbyteleft;
    size_t outbyteleft;
    size_t ret;

    char *inchar;


    char *outchar;

    if ((icd = iconv_open("UTF-8", "Shift_JIS")) == (iconv_t)-1) {
	    perror("iconv_open");
	    exit(EXIT_FAILURE);
    }

    inchar = inbuf;
    outchar = outbuf;
    inbyteleft = byteread;
    outbyteleft = (byteread * 2);

    ret = iconv(icd, &inchar, &inbyteleft,
		&outchar, &outbyteleft);
    

    if ((ret == -1) && (errno == EINVAL)) {
		perror("convert1");
		exit(EXIT_FAILURE);
	}

    if ((ret == -1) && (errno == EILSEQ)) {
		perror("convert2");
		exit(EXIT_FAILURE);
    }

    if ((ret == -1) && (errno == E2BIG)) {
        	perror("convert3");
		exit(EXIT_FAILURE);
    }
    
    return outbyteleft;
}

このコードをコンパイルしても、convert1: Invalid argumentで失敗する。

でも、

char inbuf[21702]にすると成功する。

原因はわからない。

iconvの変なバグに悩ませられている人はお試しあれ。

作者:hp-ux

更新日:2008年12月2日 6時19分

このブログのホーム

プログラミング C言語 ポインタ

char *buf = (char *)malloc(5);
        if(inbuf == NULL) {
                perror("maloc");
                exit(EXIT_FAILURE);
        }*

printf("%d",sizeof(buf));

とやると4が出力される。

sizeof(buf)をした場合はchar *のサイズが返ってくるから

注意だ!!

作者:hp-ux

更新日:2008年12月1日 2時21分

このブログのホーム

フィギュア アルター 八神 はやて

予約しておいた、アルターはやてをアニメイトに取りに行く。

実物見たら、あまりの大きさにビックリ。

店員さんの梱包が、青いラップ?でくるんだだけで側面は見えるから

羞恥プレイ。

ま、出来は満足できるモノ。

今月は(延期するだろうけれど)シグ姐も販売されるし、

楽しみ楽しみ。

作者:hp-ux

更新日:2008年12月1日 2時11分

このブログのホーム

sgi octane2 スペック

宝くじ大当たり!

V12だった!!

スゲー嬉しい!!

IRIS # hinv -v
1 600 MHZ IP30 Processor
Heart ASIC: Revision F
CPU: MIPS R14000 Processor Chip Revision: 2.4
FPU: MIPS R14010 Floating Point Chip Revision: 0.0
Main memory size: 1024 Mbytes
Xbow ASIC: Revision 1.4
Instruction cache size: 32 Kbytes
Data cache size: 32 Kbytes
Secondary unified instruction/data cache size: 2 Mbytes
Integral SCSI controller 0: Version QL1040B (rev. 2), single ended
  Disk drive: unit 1 on SCSI controller 0 (unit 1)
  Disk drive: unit 2 on SCSI controller 0 (unit 2)
Integral SCSI controller 1: Version QL1040B (rev. 2), single ended
IOC3/IOC4 serial port: tty1
IOC3/IOC4 serial port: tty2
IOC3 parallel port: plp1
Graphics board: V12
Integral Fast Ethernet: ef0, version 1, pci 2
Iris Audio Processor: version RAD revision 12.0, number 1
  PCI Adapter ID (vendor 0x10a9, device 0x0003) PCI slot 2
  PCI Adapter ID (vendor 0x1077, device 0x1020) PCI slot 0
  PCI Adapter ID (vendor 0x1077, device 0x1020) PCI slot 1
  PCI Adapter ID (vendor 0x10a9, device 0x0005) PCI slot 3

おまけに、動作が不安定だから壊れたメモリ引っこ抜こうと思ってメインボード引っぱり出したら、

2003年5月生産と書いてあった。

販売終了直前の機種じゃん!

PROMも

PROM Monitor SGI Version 6.5 Rev 4.17 IP30 Jan 20, 2004 - 64 Bit

だし!

うれしい誤算だった!

でも、メインボードがなかなか引っこ抜けなくて難儀。

壊れなくて良かった...

13w3変換コネクタ買ってこなくちゃ。

作者:hp-ux

更新日:2008年12月1日 1時56分

このブログのホーム

プログラミング iconv 完成

やっと本番コードにiconvを使った部分を導入。

やっぱりデバッガを使って動きを調べないと、わからないことがいっぱい有るや。

ただえさえ、あっさりmanだし。

作者:hp-ux

更新日:2008年11月30日 5時3分

このブログのホーム

Sun Ultra40 購入

Ultra40をOttoから購入。

結構傷だらけで、ショック。

足もないし。

でも、メチャメチャ重いのでビビった。

体壊すところだった。

作者:hp-ux

更新日:2008年11月30日 4時56分

このブログのホーム

sgi octane2 購入

sgiのoctane2がヤフオクでやすく出ていたので、購入。

octane2とか、ヤフオクに初めて出たときは80万位の値段だったのに。

80分の1で購入できた。

佐川の営業所留めで送ってもらったんだが、

送り状の問い番と実際の問い番が違うという珍しい問題が発生。

営業所留めで問い番が違うと、調べようがないしホントに困った。

最終的には送り主から送り状を写真でとってメールしてもらって、そのプリントを営業所に持っていって解決。

さすがに菓子折はなかった。

んで、octane2はメモリが2G搭載のはずなのに1Gしか認識しないと言う問題があったが、

ハードディスクがメチャメチャいいものをつんでいたので、まっいいかと我慢。

hinvではグラフィックスがV6かV8かV10かV12かわからないので、OSをインストールして調べることにする。

13W3変換コネクタ無くしたので、シリアル接続でただいまインストール中。

さて、グラフィックスがV12だと良いんだけれど....

ちょっとした宝くじ気分だ。

作者:hp-ux

更新日:2008年11月30日 4時55分

このブログのホーム

雑記 大須 MSI お客様大感謝祭 〜最新製品性能体感イベント〜

MSI お客様大感謝祭 〜最新製品性能体感イベント〜なるものが、

大須であるというので行って来た。

天気は残念ながら雨。

場所はグッドウィルの隣の喫茶店。

15時20分くらいにいったら、ちょうどジャンケン大会中だった。

その後17時30分まで3会参加したが、自分の運の悪さを呪ったよ。Orz...

結果として傘と水筒をもらったんだけれど、

自分としては写真立てとLEDライトが欲しかったから、非常に残念。

人の集まりは悪く、競争率は低かったと思う。

司会者の人も、「今日はあいにくの雨で、トヨタも休みではないそうですし...」と言っていた。

でも、こういうのを見ると、生まれつき運の強い人と悪い人がいるのがわかるなぁ。

なんが、おばさんが一人で何個も景品とってるし...

あと最後のほうは傘がダダあまり気味だったんだが、それでも、

司会者の人が「傘をもう持ってる人はもらわないで」と言っているのに、もらっていく奴が何人かいたのは激烈に不愉快だった。

帰りに数学ガール(マンガ版)をかって帰る。

作者:hp-ux

更新日:2008年11月25日 0時11分

このブログのホーム

雑記 Tech総研 思ったこと

きみたりゅうじさんのエンジニア解体新書の中の

今やIT業界は、世界の中心だよね?というコラム?

http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001280

を読んで、心に誓ったよ。

ユーザー視点でモノを考え、技術を使いやすくすることが、使命なんだよな。

ときどき、自分もO久保さんのような視点になってしまうこともあるけれど、

それは一般から見れば異端なんだよね。

作者:hp-ux

更新日:2008年11月24日 21時23分

このブログのホーム

プログラミング iconv サンプルコード

なぜかiconvのサンプルプログラムがweb上になかなか転がっていなかったので、

書いてみる。

Shift_JISのファイルを引数にとり、

UTF-8のファイルを吐く。

iconv_open("UTF-8", "Shift_JIS")の引数は

実装依存。

hp-uxではShift_JISではコンパイル時に失敗。

#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>

#define S_SIZE (86243)

int main(char argc, char *argv[])
{
	int i;

	FILE *src, *dst;

	src = fopen(argv[1], "r");
		if(!src){
			perror(argv[i]);
			exit(EXIT_FAILURE);
		}
		
	dst = fopen("utf8.text", "w");
		if(!dst){
			perror("utf8.text");
			exit(EXIT_FAILURE);
		}

	iconv_t cd;

	if((cd = iconv_open("UTF-8", "Shift_JIS")) == (iconv_t)-1){
		perror("iconv_open");
		exit(EXIT_FAILURE);
	}

	char inbuf[S_SIZE];
	char *inchar;
	char outbuf[S_SIZE];
	char *outchar;
	size_t outbytesleft;
	size_t inbyteleft;

	int bytesread;
	size_t ret_val;

	inbyteleft = 0;

	for(;;){

		inchar = inbuf;
		outchar = outbuf;

		outbytesleft = S_SIZE;

		if((bytesread = read(fileno(src), inbuf+inbyteleft,
						(size_t)S_SIZE-inbyteleft)) < 0){
			perror("read");
			exit(EXIT_FAILURE);
		}
	

		if(!(inbyteleft += bytesread)){
			break;
		}

		ret_val = iconv(cd, &inchar, &inbyteleft, &outchar, &outbytesleft);

		if(write(fileno(dst), outbuf, (size_t)S_SIZE-outbytesleft)<0){
			perror("write");
			exit(EXIT_FAILURE);
		}

		if ((ret_val == -1) && (errno == EINVAL)) {
			perror("convert1");
			exit(EXIT_FAILURE);
		}

  		if ((ret_val == -1) && (errno == EILSEQ)) {
			perror("convert2");
			exit(EXIT_FAILURE);
		}

		if ((ret_val == -1) && (errno == E2BIG)) {
			perror("convert3");
			exit(EXIT_FAILURE);
		}
	}

        if(iconv_close(cd) == -1){
                perror("CLOSE");
                exit(EXIT_FAILURE);
        }


	exit(EXIT_SUCCESS);
}

gcc iconv.c -L/usr/local/lib -liconv

でコンパイル。

ちなみに、バッファが足りないと

Arg list too long

という頓珍漢なエラーを出して失敗するよ。

作者:hp-ux

更新日:2008年11月23日 14時33分

このブログのホーム

フィギュア ボークス モエコレPlus 初音 ミク

今日はまんだらけ名古屋店のフィギュア関連放出日だった。

オープンより2分程度遅れて店にはいるが、人がいるわいるわ....

神姫のリペイントや、アルターフェイトや、ハロウィン娘、クィーンズゲイトのいんく...

といったレアモノが並ぶ。

んで、絶対再販があるとわかっていたけれど、我慢できずにボークスのモエコレPlus 初音ミクを買っちゃった。

お値段15700円なり。

だって、リンレンと並べなかったんだもの...

最初店に行ったとき、もう店には置いて無くて「売り切れたかなぁ」とあきらめていたら、

店員が奥から出してきて「ボークスの初音ミク販売します」の一言。

すぐ「購入します」と応じると、店員は「何人か購入希望の方がいますので、もう少し待って下さい。ジャンケンになるかも...」

と言って何度も「ボークスの初音ミク販売します」と連呼。

「たのむ、誰も出ないでくれ」と心の中かで念じると結局誰も出ずに購入に至った。

値段はプレミアのボッタクリだけれど、こういう一悶着の末に手に入ったモノだし、

中古は縁モノだし、思いではプライスレスさ。

作者:hp-ux

更新日:2008年11月23日 12時28分

このブログのホーム

雑記 ツクモ電気

ツクモ電機がえらいことになっていると聞いていたので、

大須のツクモ電機にも行ってみた。

そしたら、みせがシャッターで閉じていて

NECリースが云々という張り紙。

シャメとっている人も多数。

ツクモが大須からいなくなると痛いなぁ。

作者:hp-ux

更新日:2008年11月23日 12時12分

このブログのホーム

本 マンガ かったもの

鉄のラインバレル 11巻

特典のメッセージペーパーがB5のコピーしたぺらぺらペーパーという面白い内容だったので、

メロンブックスで購入。この特典はねぇだろ。

未来日記 7巻

特典のメッセージペーパーがイラストペーパーだったのでアニメイトで購入。

未来日記モザイクはアニメイトでは特典なしだったので見送り。

その後、とらのあなで未来日記モザイクのメッセージペーパー付きを購入するが、

そちらは、未来日記 7巻のメッセージペーパー(とらのあな版)と繋がる仕様(おまけに水着)。

ちょっと失敗。

イエスタデイを歌って 6巻

すんごい久しぶりの続刊。

これにはどのアニメショップでも特典無いと読んでアニメイトで購入。

姐さん、遅筆すぎるよ。

それなのに、いろいろ連載持つからなぁ。

画集は購入見送り。

トラウマイスタ 1巻

サンデーで絶賛連載中の作品。

どの店もハヤテや魔王は商品展開していたのに、トラウマイスタは目立たないところに置いてある。

もったいない。絵柄が個性的で、話も面白くて最高なのに。

とらのあなで購入。

とある魔術の禁書目録 3巻

特典のメッセージペーパーにつられて、とらのあなで購入。

電磁砲は買ってるけれど、こっちも購入リストに入れるか。

作者:hp-ux

更新日:2008年11月23日 12時8分

このブログのホーム

おもちゃ ガンダムコレクション DX8 仮面ライダー vol3 ライダーマスクコレクション

sofmapでガンダムコレクション DX8を売っていたので

3つほどつまんでみた。

Zplus C1(BST)ハミングバードが2個と

ガンダムF91が1個。

しかし、Zplus C1(BST)ハミングバードはホントわかりやすいな。

重さが違うから一発だ。

ライダーマスクコレクションは、ファミマで購入。

2つつまんだら、ハイパーカブトとベルデ。

ハイパーカブトが当たって大満足。

作者:hp-ux

更新日:2008年11月23日 11時53分

このブログのホーム

本 プログラミング  S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル

前に大須の三洋堂で見かけたこの本。

装丁もカッコイイし、立ち見した感じではとても読みやすかったんだけれど、

少し高いから購入に躊躇していた。

今日、思い切って買ってしまった。

クレジットの二回分割で。

内容は、本当に細かいところまで書いてあって、読みやすいマニュアルという感じ。

Amazonではレビューも何もついてないけれど、

調べたら米Amazonではとても高い評価を得ていた。

http://www.amazon.com/Reference-Manual-Samuel-P-Harbison/dp/tags-on-product/013089592X

俺って目利きだなぁ。

作者:hp-ux

更新日:2008年11月23日 11時45分

このブログのホーム

プログラミング iconv 恐ろしいバグ

本当に偶然、恐ろしいバグ?を発見した。

報告しておく。

convert1: Invalid argument

が出たので調べていたら見つけた。

こんなのわかるわけないよ。

#include <stdio.h>
#include <iconv.h>
#include <string.h>
#include <stdlib.h>
#include <fcntl.h>



size_t convert(char *inbuf, char *outbuf, int byteread);
int main(){

    size_t ret_val;

    int src;
    FILE *dst;

    int byteread;

    char inbuf[21701];

    char *outbuf = (char *)malloc(86243);
	if(outbuf == NULL) {
		perror("maloc");
		exit(EXIT_FAILURE);
	}

    src = open("bbsmenu", O_RDONLY);
    if(!src){
	      perror("open");
	      exit(EXIT_FAILURE);
	      }

    dst = fopen("utf8.txt", "w");
    if(!dst){
	      perror("open");
	      exit(EXIT_FAILURE);
	      }


    while(1){
	byteread = read(src, inbuf, sizeof(inbuf));
	
	if (byteread > 0){
			ret_val = convert(inbuf, outbuf, byteread);
			fwrite(outbuf, sizeof(char), ret_val, dst);
		
	} else {
		break;
	}
    }
    
    fclose(dst);
    close(src);

    return 0;
}

size_t convert(char *inbuf, char *outbuf, int byteread){

    iconv_t icd;

    size_t inbyteleft;
    size_t outbyteleft;
    size_t ret;

    char *inchar;


    char *outchar;

    if ((icd = iconv_open("UTF-8", "Shift_JIS")) == (iconv_t)-1) {
	    perror("iconv_open");
	    exit(EXIT_FAILURE);
    }

    inchar = inbuf;
    outchar = outbuf;
    inbyteleft = byteread;
    outbyteleft = (byteread * 2);

    ret = iconv(icd, &inchar, &inbyteleft,
		&outchar, &outbyteleft);
    

    if ((ret == -1) && (errno == EINVAL)) {
		perror("convert1");
		exit(EXIT_FAILURE);
	}

    if ((ret == -1) && (errno == EILSEQ)) {
		perror("convert2");
		exit(EXIT_FAILURE);
    }

    if ((ret == -1) && (errno == E2BIG)) {
        	perror("convert3");
		exit(EXIT_FAILURE);
    }
    
    return outbyteleft;
}

このコードをコンパイルしても、convert1: Invalid argumentで失敗する。

でも、

char inbuf[21702]にすると成功する。

原因はわからない。

iconvの変なバグに悩ませられている人はお試しあれ。

作者:hp-ux

更新日:2008年12月1日 21時19分

このブログのホーム

プログラミング C言語 ポインタ

char *buf = (char *)malloc(5);
        if(inbuf == NULL) {
                perror("maloc");
                exit(EXIT_FAILURE);
        }*

printf("%d",sizeof(buf));

とやると4が出力される。

sizeof(buf)をした場合はchar *のサイズが返ってくるから

注意だ!!

作者:hp-ux

更新日:2008年11月30日 17時21分

このブログのホーム

フィギュア アルター 八神 はやて

予約しておいた、アルターはやてをアニメイトに取りに行く。

実物見たら、あまりの大きさにビックリ。

店員さんの梱包が、青いラップ?でくるんだだけで側面は見えるから

羞恥プレイ。

ま、出来は満足できるモノ。

今月は(延期するだろうけれど)シグ姐も販売されるし、

楽しみ楽しみ。

作者:hp-ux

更新日:2008年11月30日 17時11分

このブログのホーム

sgi octane2 スペック

宝くじ大当たり!

V12だった!!

スゲー嬉しい!!

IRIS # hinv -v
1 600 MHZ IP30 Processor
Heart ASIC: Revision F
CPU: MIPS R14000 Processor Chip Revision: 2.4
FPU: MIPS R14010 Floating Point Chip Revision: 0.0
Main memory size: 1024 Mbytes
Xbow ASIC: Revision 1.4
Instruction cache size: 32 Kbytes
Data cache size: 32 Kbytes
Secondary unified instruction/data cache size: 2 Mbytes
Integral SCSI controller 0: Version QL1040B (rev. 2), single ended
  Disk drive: unit 1 on SCSI controller 0 (unit 1)
  Disk drive: unit 2 on SCSI controller 0 (unit 2)
Integral SCSI controller 1: Version QL1040B (rev. 2), single ended
IOC3/IOC4 serial port: tty1
IOC3/IOC4 serial port: tty2
IOC3 parallel port: plp1
Graphics board: V12
Integral Fast Ethernet: ef0, version 1, pci 2
Iris Audio Processor: version RAD revision 12.0, number 1
  PCI Adapter ID (vendor 0x10a9, device 0x0003) PCI slot 2
  PCI Adapter ID (vendor 0x1077, device 0x1020) PCI slot 0
  PCI Adapter ID (vendor 0x1077, device 0x1020) PCI slot 1
  PCI Adapter ID (vendor 0x10a9, device 0x0005) PCI slot 3

おまけに、動作が不安定だから壊れたメモリ引っこ抜こうと思ってメインボード引っぱり出したら、

2003年5月生産と書いてあった。

販売終了直前の機種じゃん!

PROMも

PROM Monitor SGI Version 6.5 Rev 4.17 IP30 Jan 20, 2004 - 64 Bit

だし!

うれしい誤算だった!

でも、メインボードがなかなか引っこ抜けなくて難儀。

壊れなくて良かった...

13w3変換コネクタ買ってこなくちゃ。

作者:hp-ux

更新日:2008年11月30日 16時56分

このブログのホーム

プログラミング iconv 完成

やっと本番コードにiconvを使った部分を導入。

やっぱりデバッガを使って動きを調べないと、わからないことがいっぱい有るや。

ただえさえ、あっさりmanだし。

作者:hp-ux

更新日:2008年11月29日 20時3分

このブログのホーム

Sun Ultra40 購入

Ultra40をOttoから購入。

結構傷だらけで、ショック。

足もないし。

でも、メチャメチャ重いのでビビった。

体壊すところだった。

作者:hp-ux

更新日:2008年11月29日 19時56分

このブログのホーム

sgi octane2 購入

sgiのoctane2がヤフオクでやすく出ていたので、購入。

octane2とか、ヤフオクに初めて出たときは80万位の値段だったのに。

80分の1で購入できた。

佐川の営業所留めで送ってもらったんだが、

送り状の問い番と実際の問い番が違うという珍しい問題が発生。

営業所留めで問い番が違うと、調べようがないしホントに困った。

最終的には送り主から送り状を写真でとってメールしてもらって、そのプリントを営業所に持っていって解決。

さすがに菓子折はなかった。

んで、octane2はメモリが2G搭載のはずなのに1Gしか認識しないと言う問題があったが、

ハードディスクがメチャメチャいいものをつんでいたので、まっいいかと我慢。

hinvではグラフィックスがV6かV8かV10かV12かわからないので、OSをインストールして調べることにする。

13W3変換コネクタ無くしたので、シリアル接続でただいまインストール中。

さて、グラフィックスがV12だと良いんだけれど....

ちょっとした宝くじ気分だ。

作者:hp-ux

更新日:2008年11月29日 19時55分

このブログのホーム

雑記 大須 MSI お客様大感謝祭 〜最新製品性能体感イベント〜

MSI お客様大感謝祭 〜最新製品性能体感イベント〜なるものが、

大須であるというので行って来た。

天気は残念ながら雨。

場所はグッドウィルの隣の喫茶店。

15時20分くらいにいったら、ちょうどジャンケン大会中だった。

その後17時30分まで3会参加したが、自分の運の悪さを呪ったよ。Orz...

結果として傘と水筒をもらったんだけれど、

自分としては写真立てとLEDライトが欲しかったから、非常に残念。

人の集まりは悪く、競争率は低かったと思う。

司会者の人も、「今日はあいにくの雨で、トヨタも休みではないそうですし...」と言っていた。

でも、こういうのを見ると、生まれつき運の強い人と悪い人がいるのがわかるなぁ。

なんが、おばさんが一人で何個も景品とってるし...

あと最後のほうは傘がダダあまり気味だったんだが、それでも、

司会者の人が「傘をもう持ってる人はもらわないで」と言っているのに、もらっていく奴が何人かいたのは激烈に不愉快だった。

帰りに数学ガール(マンガ版)をかって帰る。

作者:hp-ux

更新日:2008年11月24日 15時11分

このブログのホーム

雑記 Tech総研 思ったこと

きみたりゅうじさんのエンジニア解体新書の中の

今やIT業界は、世界の中心だよね?というコラム?

http://rikunabi-next.yahoo.co.jp/tech/docs/ct_s03600.jsp?p=001280

を読んで、心に誓ったよ。

ユーザー視点でモノを考え、技術を使いやすくすることが、使命なんだよな。

ときどき、自分もO久保さんのような視点になってしまうこともあるけれど、

それは一般から見れば異端なんだよね。

作者:hp-ux

更新日:2008年11月24日 12時23分

このブログのホーム

プログラミング iconv サンプルコード

なぜかiconvのサンプルプログラムがweb上になかなか転がっていなかったので、

書いてみる。

Shift_JISのファイルを引数にとり、

UTF-8のファイルを吐く。

iconv_open("UTF-8", "Shift_JIS")の引数は

実装依存。

hp-uxではShift_JISではコンパイル時に失敗。

#include <stdio.h>
#include <stdlib.h>
#include <iconv.h>

#define S_SIZE (86243)

int main(char argc, char *argv[])
{
	int i;

	FILE *src, *dst;

	src = fopen(argv[1], "r");
		if(!src){
			perror(argv[i]);
			exit(EXIT_FAILURE);
		}
		
	dst = fopen("utf8.text", "w");
		if(!dst){
			perror("utf8.text");
			exit(EXIT_FAILURE);
		}

	iconv_t cd;

	if((cd = iconv_open("UTF-8", "Shift_JIS")) == (iconv_t)-1){
		perror("iconv_open");
		exit(EXIT_FAILURE);
	}

	char inbuf[S_SIZE];
	char *inchar;
	char outbuf[S_SIZE];
	char *outchar;
	size_t outbytesleft;
	size_t inbyteleft;

	int bytesread;
	size_t ret_val;

	inbyteleft = 0;

	for(;;){

		inchar = inbuf;
		outchar = outbuf;

		outbytesleft = S_SIZE;

		if((bytesread = read(fileno(src), inbuf+inbyteleft,
						(size_t)S_SIZE-inbyteleft)) < 0){
			perror("read");
			exit(EXIT_FAILURE);
		}
	

		if(!(inbyteleft += bytesread)){
			break;
		}

		ret_val = iconv(cd, &inchar, &inbyteleft, &outchar, &outbytesleft);

		if(write(fileno(dst), outbuf, (size_t)S_SIZE-outbytesleft)<0){
			perror("write");
			exit(EXIT_FAILURE);
		}

		if ((ret_val == -1) && (errno == EINVAL)) {
			perror("convert1");
			exit(EXIT_FAILURE);
		}

  		if ((ret_val == -1) && (errno == EILSEQ)) {
			perror("convert2");
			exit(EXIT_FAILURE);
		}

		if ((ret_val == -1) && (errno == E2BIG)) {
			perror("convert3");
			exit(EXIT_FAILURE);
		}
	}

        if(iconv_close(cd) == -1){
                perror("CLOSE");
                exit(EXIT_FAILURE);
        }


	exit(EXIT_SUCCESS);
}

gcc iconv.c -L/usr/local/lib -liconv

でコンパイル。

ちなみに、バッファが足りないと

Arg list too long

という頓珍漢なエラーを出して失敗するよ。

作者:hp-ux

更新日:2008年11月23日 5時33分

このブログのホーム

フィギュア ボークス モエコレPlus 初音 ミク

今日はまんだらけ名古屋店のフィギュア関連放出日だった。

オープンより2分程度遅れて店にはいるが、人がいるわいるわ....

神姫のリペイントや、アルターフェイトや、ハロウィン娘、クィーンズゲイトのいんく...

といったレアモノが並ぶ。

んで、絶対再販があるとわかっていたけれど、我慢できずにボークスのモエコレPlus 初音ミクを買っちゃった。

お値段15700円なり。

だって、リンレンと並べなかったんだもの...

最初店に行ったとき、もう店には置いて無くて「売り切れたかなぁ」とあきらめていたら、

店員が奥から出してきて「ボークスの初音ミク販売します」の一言。

すぐ「購入します」と応じると、店員は「何人か購入希望の方がいますので、もう少し待って下さい。ジャンケンになるかも...」

と言って何度も「ボークスの初音ミク販売します」と連呼。

「たのむ、誰も出ないでくれ」と心の中かで念じると結局誰も出ずに購入に至った。

値段はプレミアのボッタクリだけれど、こういう一悶着の末に手に入ったモノだし、

中古は縁モノだし、思いではプライスレスさ。

作者:hp-ux

更新日:2008年11月23日 3時28分

このブログのホーム

雑記 ツクモ電気

ツクモ電機がえらいことになっていると聞いていたので、

大須のツクモ電機にも行ってみた。

そしたら、みせがシャッターで閉じていて

NECリースが云々という張り紙。

シャメとっている人も多数。

ツクモが大須からいなくなると痛いなぁ。

作者:hp-ux

更新日:2008年11月23日 3時12分

このブログのホーム

本 マンガ かったもの

鉄のラインバレル 11巻

特典のメッセージペーパーがB5のコピーしたぺらぺらペーパーという面白い内容だったので、

メロンブックスで購入。この特典はねぇだろ。

未来日記 7巻

特典のメッセージペーパーがイラストペーパーだったのでアニメイトで購入。

未来日記モザイクはアニメイトでは特典なしだったので見送り。

その後、とらのあなで未来日記モザイクのメッセージペーパー付きを購入するが、

そちらは、未来日記 7巻のメッセージペーパー(とらのあな版)と繋がる仕様(おまけに水着)。

ちょっと失敗。

イエスタデイを歌って 6巻

すんごい久しぶりの続刊。

これにはどのアニメショップでも特典無いと読んでアニメイトで購入。

姐さん、遅筆すぎるよ。

それなのに、いろいろ連載持つからなぁ。

画集は購入見送り。

トラウマイスタ 1巻

サンデーで絶賛連載中の作品。

どの店もハヤテや魔王は商品展開していたのに、トラウマイスタは目立たないところに置いてある。

もったいない。絵柄が個性的で、話も面白くて最高なのに。

とらのあなで購入。

とある魔術の禁書目録 3巻

特典のメッセージペーパーにつられて、とらのあなで購入。

電磁砲は買ってるけれど、こっちも購入リストに入れるか。

作者:hp-ux

更新日:2008年11月23日 3時8分

このブログのホーム

おもちゃ ガンダムコレクション DX8 仮面ライダー vol3 ライダーマスクコレクション

sofmapでガンダムコレクション DX8を売っていたので

3つほどつまんでみた。

Zplus C1(BST)ハミングバードが2個と

ガンダムF91が1個。

しかし、Zplus C1(BST)ハミングバードはホントわかりやすいな。

重さが違うから一発だ。

ライダーマスクコレクションは、ファミマで購入。

2つつまんだら、ハイパーカブトとベルデ。

ハイパーカブトが当たって大満足。

作者:hp-ux

更新日:2008年11月23日 2時53分

このブログのホーム

本 プログラミング  S・P・ハービソン3世とG・L・スティール・ジュニアのCリファレンスマニュアル

前に大須の三洋堂で見かけたこの本。

装丁もカッコイイし、立ち見した感じではとても読みやすかったんだけれど、

少し高いから購入に躊躇していた。

今日、思い切って買ってしまった。

クレジットの二回分割で。

内容は、本当に細かいところまで書いてあって、読みやすいマニュアルという感じ。

Amazonではレビューも何もついてないけれど、

調べたら米Amazonではとても高い評価を得ていた。

http://www.amazon.com/Reference-Manual-Samuel-P-Harbison/dp/tags-on-product/013089592X

俺って目利きだなぁ。

作者:hp-ux

更新日:2008年11月23日 2時45分

このブログのホーム