マクロハック
GNU catのソースよんでま〜す。そんなわけで、safe_read.c safe_write.cからのハック。
つまらない処理を担当するsafe_read.c,safe_write.cでは、1つのソースから2個のプログラムを吐いちまおうって寸法。簡単にread.cとwrite.cを作ってテストしてみた。
write.c
#define WRITE #include "read.c"
read.c
#ifdef WRITE # define f_rw f_write # define rw write #else # define f_rw f_read # define rw read #endif void f_rw(int fd, void const *buf, size_t count) { /* つまらない処理 */ rw(fd, buf, count); /* つまらない処理 */ }
今回はテストなので、結果がわかりやすいように、プリコンパイルだけを実行する。コンパイルすると怒られるので注意。
% gcc -E read.c write.c (略) void f_read(int fd, void const *buf, size_t count) { read(fd, buf, count); } (略) void f_write(int fd, void const *buf, size_t count) { write(fd, buf, count); } (略)
見事に、1つのソースから2個のプログラムを吐くことに成功した。使うことは・・・無いかなぁ・・・