598のおかしな部分はまだあるぞ。

>> あと、if(buf) free(buf); は、単に free(buf); でいいよ。
>フントか?

free()にNULLを渡しても無視されるだけだからif文は無意味に決まってる。