flow-tools 0.66用パッチ
Linux (Debian SargeとかCentOS)にてflow-tools 0.66(NetFlowコレクタ)のコンパイルが通らなかったので,いくつか修正してパッチファイル作った.
直したのは,ANSI C非互換のキャストの使い方をしていた部分と,ブロックの最後にラベルがあるとエラーになる問題.
前者は例えば以下のようなもの.
/* だめな例 */ void *foo = bar; (char *)foo += 2; /* 左辺値はキャストしたらだめー */ /* 修正後 */ void *foo = bar; foo = (char *)foo + 2;
後者は例えば以下のようなもの.
/* だめな例 */ for (;;) { do_something1(); if (cond) goto skip; do_something2(); skip: /* これだめ */ } /* 修正後 */ for (;;) { do_something1(); if (cond) goto skip; do_something2(); skip: ; /* とにかく何か文があればいいらしい */ }
パッチ (flow-tools-0.66-patch)
flow-tools-0.66ディレクトリ以下で patch -p0 < flow-tools-0.66-patch てな具合にするとよし.
diff -ru -x '*.Po' flow-tools-0.66.orig/lib/ftchash.c flow-tools-0.66/lib/ftchash.c --- flow-tools-0.66.orig/lib/ftchash.c 2003-02-13 11:38:41.000000000 +0900 +++ flow-tools-0.66/lib/ftchash.c 2008-05-12 16:32:07.000000000 +0900 @@ -326,7 +326,7 @@ (char*)ftch->traverse_chunk->base+ftch->traverse_chunk->next) { ret = ftch->traverse_rec; - (char*)ftch->traverse_rec += ftch->d_size; + ftch->traverse_rec = (char*)ftch->traverse_rec + ftch->d_size; return ret; } else { diff -ru -x '*.Po' flow-tools-0.66.orig/lib/ftio.c flow-tools-0.66/lib/ftio.c --- flow-tools-0.66.orig/lib/ftio.c 2003-02-24 09:51:47.000000000 +0900 +++ flow-tools-0.66/lib/ftio.c 2008-05-12 16:29:11.000000000 +0900 @@ -2267,7 +2267,7 @@ break; nleft -= nread; - (char*)ptr += nread; + ptr = (char*)ptr + nread; } return (nbytes - nleft); } /* readn */ @@ -2292,7 +2292,7 @@ return(nwritten); /* error */ nleft -= nwritten; - (char*)ptr += nwritten; + ptr = (char*)ptr + nwritten; } return(nbytes - nleft); } /* writen */ diff -ru -x '*.Po' flow-tools-0.66.orig/lib/fttlv.c flow-tools-0.66/lib/fttlv.c --- flow-tools-0.66.orig/lib/fttlv.c 2003-02-13 11:38:43.000000000 +0900 +++ flow-tools-0.66/lib/fttlv.c 2008-05-12 16:31:31.000000000 +0900 @@ -68,10 +68,10 @@ } bcopy(&t, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&len, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&v, buf, 4); @@ -107,10 +107,10 @@ } bcopy(&t, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&len, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&v, buf, 2); @@ -145,10 +145,10 @@ } bcopy(&t, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&len, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&v, buf, 1); @@ -183,10 +183,10 @@ } bcopy(&t, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&len, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(v, buf, len); @@ -230,16 +230,16 @@ return -1; bcopy(&t, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&len, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&ip, buf, 4); - (char*)buf += 4; + buf = (char*)buf + 4; bcopy(&ifIndex, buf, 2); - (char*)buf += 2; + buf = (char*)buf + 2; bcopy(name, buf, n); @@ -287,19 +287,19 @@ } bcopy(&t, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&len, buf, 2); - (char*)buf+= 2; + buf = (char*)buf + 2; bcopy(&ip, buf, 4); - (char*)buf += 4; + buf = (char*)buf + 4; bcopy(&entries, buf, 2); - (char*)buf += 2; + buf = (char*)buf + 2; bcopy(ifIndex_list, buf, esize); - (char*)buf += esize; + buf = (char*)buf + esize; bcopy(name, buf, n); diff -ru -x '*.Po' flow-tools-0.66.orig/src/flow-cat.c flow-tools-0.66/src/flow-cat.c --- flow-tools-0.66.orig/src/flow-cat.c 2003-04-03 03:03:01.000000000 +0900 +++ flow-tools-0.66/src/flow-cat.c 2008-05-12 16:33:59.000000000 +0900 @@ -551,7 +551,7 @@ break; next_file: - + ; } /* FOREACH filename in dir */ } /* foreach dir bundle */ diff -ru -x '*.Po' flow-tools-0.66.orig/src/flow-dscan.c flow-tools-0.66/src/flow-dscan.c --- flow-tools-0.66.orig/src/flow-dscan.c 2003-04-03 03:03:01.000000000 +0900 +++ flow-tools-0.66/src/flow-dscan.c 2008-05-12 16:34:28.000000000 +0900 @@ -560,7 +560,7 @@ ager(&ds, total_flows32); skip2: - + ; } /* while rec */ @@ -805,6 +805,7 @@ fterr_info("ager: reset hash run"); skip3: + ; } /* ager */ diff -ru -x '*.Po' flow-tools-0.66.orig/src/flow-fanout.c flow-tools-0.66/src/flow-fanout.c --- flow-tools-0.66.orig/src/flow-fanout.c 2003-04-04 11:24:40.000000000 +0900 +++ flow-tools-0.66/src/flow-fanout.c 2008-05-12 16:35:39.000000000 +0900 @@ -809,7 +809,7 @@ } /* fte.buf_size */ skip1: - + ; } /* if FD_ISSET */ if (sig_quit_flag) { diff -ru -x '*.Po' flow-tools-0.66.orig/src/flow-receive.c flow-tools-0.66/src/flow-receive.c --- flow-tools-0.66.orig/src/flow-receive.c 2003-04-03 03:03:02.000000000 +0900 +++ flow-tools-0.66/src/flow-receive.c 2008-05-12 16:34:46.000000000 +0900 @@ -753,7 +753,7 @@ } /* for */ skip1: - + ; } /* if FD_ISSET */ } /* while 1 */
こういうのCodeReposに上げてもいいのかなあ…….