C言語

Lux IO msvc9移植版

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/luxio/?root=svn 動くは動いたけど、ロックまわりは怪しいかも。 //#include <luxio/btree.h> #include "btree.h" #include <iostream> //#define NUM_RECORDS 1000000 #define NUM_RECORDS 100 int main(void) { Lux::IO::Btree *b</iostream></luxio/btree.h>…

Linux: SEGVをハンドルする

#include <stdio.h> #include <string.h> #include <unistd.h> #include <signal.h> #include <errno.h> void trap(int no) { printf("signal: %d\n", no); exit(1); } int main() { struct sigaction sa; int *n; memset(&sa, 0, sizeof(struct sigaction)); sa.sa_handler = trap; if(sigaction(SIGSEGV, &s</errno.h></signal.h></unistd.h></string.h></stdio.h>…

SEGVをハンドル

http://alohakun.blog7.fc2.com/blog-entry-583.html 自作のWebアプリがSEGVで mongrel ごと落ちたことがあって*1「怖いなー、拡張ライブラリを使うときは注意しないと」と思っていたけど、SEGVをハンドルするライブラリも世の中にはあるようで。 たぶん、ポ…

libdivsufsort VC9 patch

libdivsufsortのVC9 patch…というかヘッダに手を加えただけ。 stdint.hは株式会社きじねこが公開しているモノを使った。 --- divsufsort.h.orig 2008-10-20 00:55:03.484375000 +0900 +++ divsufsort.h 2008-10-20 01:07:15.406250000 +0900 @@ -31,7 +31,15…

連続する文字列リテラル

#include <stdio.h> int main() { printf("hello" "&" "world\n"); // => 'hello&world' } gccではビルドできた。 どこかに仕様が書いてなかったかな…。</stdio.h>

あ…ありのまま(ry

configureを実行したと思ったらいつのまにかmakeが実行されていた。

libtar(CMake版)

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/libtar-1.2.11-cmake/?root=svn とりあえず作成。

link: cppマニアックス

http://diary.imou.to/~AoiMoe/2007.05/late.html#2007.05.28_s02 メモメモ。

TAR/Ruby、libtar、autoconf

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/tarruby/?root=svn このところ、ヒマを見つけてはTAR/Rubyのコードをカリカリと書いている。(とりあえず開いて閉じるところまではできた)TAR/Rubyはlibtarのラッパーなのだが、このlibtarはEncapという…

v8のコードを見て

http://v8.googlecode.com/svn/trunk/include/v8.h #include <stdio.h> #ifdef _WIN32 typedef int int32_t; typedef unsigned int uint32_t; 「そーだよねー、『#ifdef _WIN32』だよねー」とか思ってしまった。 あのへんのマクロって何が多数派なんだろう? やっぱり</stdio.h>…

libtar for Windows

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/libtar/?root=svn とりあえず、tarの圧縮はできるようになった。 gzipの圧縮はなぜか失敗。gzdopenがコケる。 gzopenだとうまくいくのに、何でだろう。。。

_CrtDumpMemoryLeaks

http://msdn.microsoft.com/ja-jp/library/d41t22sb.aspx メモメモ。

libtarのパッチ

http://www.feep.net/libtar/ どうもビミョーにバグっているような。 パッチ送るかなぁ…。 diff -ru libtar-1.2.11.orig/lib/encode.c libtar-1.2.11/lib/encode.c --- libtar-1.2.11.orig/lib/encode.c 2003-01-07 10:40:59.000000000 +0900 +++ libtar-1.2…

Mercurial plugin for MS Visual Studio

http://www.selenic.com/pipermail/mercurial/2008-May/019246.html ちょっと使ってみよう。

libzipのアレ

とりあえずMSVC9のパッチは送った。リジェクトされないといいなぁ… あとは暗号化のパッチ送って、全部取り込まれたらziprubyをlibzip 0.9.xベースにできる…といいなー。

libzip 0.9 VC9 patch

# HG changeset patch # User SUGAWARA Genki <sgwr_dts@yahoo.co.jp> # Date 1219336534 -32400 # Branch HEAD # Node ID 44261ec59c90147faca1d96e47daad3d2baa6e26 # Parent 42fb66a37ba622575e3153f2ec14ee40f8721afd apply VC9 patch diff -r 42fb66a37ba6 -r 44261ec59c90 li</sgwr_dts@yahoo.co.jp>…

link:[迷信] とりあえず memset で初期化

http://www.kijineko.co.jp/tech/superstitions/initialization-by-memset.html う゛っ、memsetで初期化って、結構やっちゃてるなぁ・・・

glob for Windows

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/libtar_lab/glob/?root=svn エミュレートできた、と思う。 大丈夫かな…。 #include <stdio.h> #include <stdlib.h> #include "compat.h" int main() { glob_t globbuf; int i; puts("pattern: /usr/local/*"); if (openbsd_gl</stdlib.h></stdio.h>…

LibLZF: ブロックごとのヘッダ

LibLZFのソースを眺める。 ブロックごとにヘッダを付けることで、ブロックごとに処理できるようにしている。追記 lzopackもおんなじ処理やってるなー。 ブロックごとの圧縮もメソッドとして用意したほうがいいかな。

LZO: decompressするときのバッファのサイズ

PerlとかLuaのバインディングを読んでみると、圧縮データの先頭に元のサイズがあるっぽい。 あとで調べてみよう。

VC: dllを作る・使う

mydll.c __declspec(dllexport) void foo(); #include <stdio.h> void foo() { puts("foo()"); } 暗黙的リンク インポートライブラリ「mydll.lib」*1をリンクする。 関数の場合「__declspec(dllimport)」は必須でないみたい。 __declspec(dllimport) void foo(); int </stdio.h>…

Cygwin: dllを作る・使う

http://www.nslabs.jp/cygwin-dll.rhtml foo.c 「__declspec(dllexport)」は不要…と。 #include <stdio.h> void foo() { puts("foo()"); } 「-fPIC」は不要…と。 ~/work$ gcc -c foo.c ~/work$ gcc -shared foo.o -o foo.dll 暗黙的リンク void foo(); int main() { f</stdio.h>…

link: Linux の共有ライブラリを作るとき PIC でコンパイルするのはなぜか

http://0xcc.net/blog/archives/000107.html ふむふむ。

AES Code

http://fp.gladman.plus.com/AES/index.htm サンプル少ないなー。 「uses C source code only」だと、次のソースコードでビルドできた。(VCの場合) aes.h aes_mode.c aes_via_ace.h aescrypt.c aeskey.c aesopt.h aestab.c aestab.h brg_endian.h brg_type…

AES/Ruby

http://storehouse.sakura.ne.jp/viewvc/viewvc.cgi/aesruby/?root=svn ECBとCBCを実装したところで気力が尽きた。 誰か残りを実装してください。*1 require 'aesruby' enc = AES.ecb_encrypt("123456", "dd") p enc puts AES.ecb_decrypt("123456", enc); e…

共有ライブラリを作る

http://www.linux.or.jp/JF/JFdocs/Program-Library-HOWTO/shared-libraries.html http://www.hi-ho.ne.jp/babaq/linux/libtips.html foo.c #include <stdio.h> void foo() { puts("foo()"); } foo.h void foo(); ビルド ~/work$ gcc -fPIC -g -c foo.c ~/work$ gcc -</stdio.h>…

階乗

Cで、結果が大きな数値になる階乗を計算する例がいくつかあった。 階乗 n! の計算 factorial 階乗の計算を行う(C言語) しばらくにらめっこして、自分なりに書き直してみる。 #include <stdio.h> #include <stdlib.h> #define SUPREMUM 10000 void multi_bignum(int *bignum, int</stdlib.h></stdio.h>…

憂鬱な勇者.c

http://d.hatena.ne.jp/hrkt0115311/20080527/1211891558 今ごろ…。 #include <stdio.h> #include <stdlib.h> #include <time.h> #ifdef _WIN32 #include <windows.h> #define sleep(s) Sleep((s) * 1000) #define snprintf(s, n, f, ...) sprintf_s((s), (n), (f), __VA_ARGS__) #else #include <unistd.h> #</unistd.h></windows.h></time.h></stdlib.h></stdio.h>…

opender

Cygwinでビルド。d_offとかがなかった。 #include <stdio.h> #include <sys/types.h> #include <dirent.h> #include <errno.h> int main() { DIR *dir; struct dirent *entry; if ((dir = opendir("/usr/bin")) == NULL) { perror("opendir"); exit(1); } entry = readdir(dir); while (entry) { print</errno.h></dirent.h></sys/types.h></stdio.h>…

opendir・readdir・closedirをエミュレートする

空のディレクトリの動作が違いそうな…。 #include <stdio.h> #include <errno.h> #include "dirent.h" int main() { DIR *dir; struct dirent *entry; if ((dir = opendir("/usr/local")) == NULL) { perror("opendir(3)"); exit(1); } entry = readdir(dir); while (entry) { </errno.h></stdio.h>…