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に上げてもいいのかなあ…….