fix rrdcollect bug (closes #220)
authorolli <olli@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 22 Jan 2006 11:44:35 +0000 (11:44 +0000)
committerolli <olli@3c298f89-4303-0410-b956-a3cf2f4a3e73>
Sun, 22 Jan 2006 11:44:35 +0000 (11:44 +0000)
git-svn-id: svn://svn.openwrt.org/openwrt/trunk/openwrt@3033 3c298f89-4303-0410-b956-a3cf2f4a3e73

package/rrdcollect/files/rrdcollect.conf
package/rrdcollect/patches/rrdcollect-scan.patch [new file with mode: 0644]

index 1b37454..e34c9bf 100644 (file)
@@ -19,15 +19,15 @@ exec:///bin/df
 
 # LAN: vlan0, WAN: vlan1, WIFI: eth1
 file:///proc/net/dev
-"vlan0: %d %d %*d %*d %*d %*d %*d %*d %d %d"    IF.rrd:Labi,Lapi,Labo,Lapo
-"vlan1: %d %d %*d %*d %*d %*d %*d %*d %d %d"    IF.rrd:Wabi,Wapi,Wabo,Wapo
-"eth1: %d %d %*d %*d %*d %*d %*d %*d %d %d"     IF.rrd:Wibi,Wipi,Wibo,Wipo
-#"tun0: %d %d %*d %*d %*d %*d %*d %*d %d %d"    IF.rrd:tbi,tpi,tbo,tpo
+" vlan0:%d %d %*d %*d %*d %*d %*d %*d %d %d"    IF.rrd:Labi,Lapi,Labo,Lapo
+" vlan1:%d %d %*d %*d %*d %*d %*d %*d %d %d"    IF.rrd:Wabi,Wapi,Wabo,Wapo
+" eth1:%d %d %*d %*d %*d %*d %*d %*d %d %d"     IF.rrd:Wibi,Wipi,Wibo,Wipo
+#" tun0:%d %d %*d %*d %*d %*d %*d %*d %d %d"    IF.rrd:tbi,tpi,tbo,tpo
 
 file:///proc/slabinfo
 "ip_conntrack  %d %*d %*d %*d %*d %*d"          SYS.rrd:con
 "arp_cache     %d %*d %*d %*d %*d %*d"           SYS.rrd:arp
 
 file:///proc/interrupts
-"4: %d MIPS  eth1"                              SYS.rrd:irw
-"5: %d MIPS  eth0"                              SYS.rrd:ire
+"  4: %d MIPS  eth1"                            SYS.rrd:irw
+"  5: %d MIPS  eth0"                            SYS.rrd:ire
diff --git a/package/rrdcollect/patches/rrdcollect-scan.patch b/package/rrdcollect/patches/rrdcollect-scan.patch
new file mode 100644 (file)
index 0000000..f47301e
--- /dev/null
@@ -0,0 +1,66 @@
+diff -ruN rrdcollect-0.2.3.orig/src/scan.c rrdcollect-0.2.3/src/scan.c
+--- rrdcollect-0.2.3.orig/src/scan.c   2005-01-20 18:42:17.000000000 +0100
++++ rrdcollect-0.2.3/src/scan.c        2006-01-22 00:51:52.000000000 +0100
+@@ -74,6 +74,11 @@
+                                               } while (isdigit(*fmt));
+                                       }
++                                      /* skip white spaces like scanf does */
++                                      if (strchr("difuoxX", *fmt))
++                                              while (isspace(*buf))
++                                                      buf++;
++                                      
+                                       /* FIXME: we should check afterward:
+                                        * if (start == buf || start == '-' && buf-start == 1)
+                                        *      die("WTF???  zero-length number???");
+@@ -150,27 +155,22 @@
+                                                               buf++, length--;
+                                                       }
+-                                                      /* ignore if value not found */
+-                                                      if(value == 0)
+-                                                              return 0;
+-
+                                                       if (!ignore)
+-                                                              counter[i++]->value = valuedup(value);
++                                                              counter[i++]->value = strndup(start, buf - start);
+                                                       break;
+                                                       
+                                               case 'c':
++                                                      if (length < 0)
++                                                           length = 1;        // default length is 1
++                                                      
+                                                       while (*buf && length > 0) {
+                                                               buf++, length--;
+                                                       }
+                                                       if (length > 0)
+                                                               return 2;
+-                                                      /* ignore if value not found */
+-                                                      if(value == 0)
+-                                                              return 0;
+-                                                      
+                                                       if (!ignore)
+-                                                              counter[i++]->value = valuedup(value);
++                                                              counter[i++]->value = strndup(start, buf - start);
+                                                       break;
+                                                       
+                                                       
+@@ -192,7 +192,7 @@
+                       case '\f':
+                       case '\v':
+                               /* don't match if not at least one space */
+-                              if(!isspace(*(buf)))
++                              if(!isspace(*buf))
+                                       return 0;
+                               else
+                                       buf++;
+@@ -208,7 +208,7 @@
+                                       case '\v':
+                                               break;
+                                       default:
+-                                              while (isspace(*(buf)))
++                                              while (isspace(*buf))
+                                                       buf++;
+                               }
+                               fmt++;