Blame SOURCES/net-tools-interface_stack.patch

0a4baa
diff -up net-tools-2.0/include/interface.h.stack net-tools-2.0/include/interface.h
0a4baa
--- net-tools-2.0/include/interface.h.stack	2013-05-23 05:27:34.000000000 +0200
0a4baa
+++ net-tools-2.0/include/interface.h	2013-06-07 11:58:25.474623871 +0200
0a4baa
@@ -72,7 +72,7 @@ extern int do_if_print(struct interface
0a4baa
 
0a4baa
 extern int    procnetdev_version(char *buf);
0a4baa
 extern int    get_dev_fields(char *bp, struct interface *ife);
0a4baa
-extern char * get_name(char *name, char *p);
0a4baa
+extern char * get_name(char **namep, char *p);
0a4baa
 
0a4baa
 extern void ife_print(struct interface *ptr);
0a4baa
 
0a4baa
diff -up net-tools-2.0/lib/interface.c.stack net-tools-2.0/lib/interface.c
0a4baa
--- net-tools-2.0/lib/interface.c.stack	2013-06-07 11:58:25.471623910 +0200
0a4baa
+++ net-tools-2.0/lib/interface.c	2013-06-07 12:00:13.901191277 +0200
0a4baa
@@ -214,10 +214,11 @@ out:
0a4baa
     return err;
0a4baa
 }
0a4baa
 
0a4baa
-char *get_name(char *name, char *p)
0a4baa
+char *get_name(char **namep, char *p)
0a4baa
 {
0a4baa
     while (isspace(*p))
0a4baa
 	p++;
0a4baa
+    char *name = *namep = p;
0a4baa
     while (*p) {
0a4baa
 	if (isspace(*p))
0a4baa
 	    break;
0a4baa
@@ -320,9 +321,10 @@ int get_dev_fields(char *bp, struct inte
0a4baa
 static int if_readlist_proc(char *target)
0a4baa
 {
0a4baa
     FILE *fh;
0a4baa
-    char buf[512];
0a4baa
     struct interface *ife;
0a4baa
     int err;
0a4baa
+    char *line = NULL;
0a4baa
+    size_t linelen = 0;
0a4baa
 
0a4baa
     fh = fopen(_PATH_PROCNET_DEV, "r");
0a4baa
     if (!fh) {
0a4baa
@@ -330,10 +332,11 @@ static int if_readlist_proc(char *target
0a4baa
 			_PATH_PROCNET_DEV, strerror(errno));
0a4baa
 		return -2;
0a4baa
 	}
0a4baa
-    if (fgets(buf, sizeof buf, fh))
0a4baa
-		/* eat line */;
0a4baa
-    if (fgets(buf, sizeof buf, fh))
0a4baa
-		/* eat line */;
0a4baa
+    if (getline(&line, &linelen, fh) == -1 /* eat line */
0a4baa
+	|| getline(&line, &linelen, fh) == -1) { /* eat line */
0a4baa
+		err = -1;
0a4baa
+		goto out;
0a4baa
+	}
0a4baa
 
0a4baa
 #if 0				/* pretty, but can't cope with missing fields */
0a4baa
     fmt = proc_gen_fmt(_PATH_PROCNET_DEV, 1, fh,
0a4baa
@@ -358,13 +361,13 @@ static int if_readlist_proc(char *target
0a4baa
     if (!fmt)
0a4baa
 	return -1;
0a4baa
 #else
0a4baa
-    procnetdev_vsn = procnetdev_version(buf);
0a4baa
+    procnetdev_vsn = procnetdev_version(line);
0a4baa
 #endif
0a4baa
 
0a4baa
     err = 0;
0a4baa
-    while (fgets(buf, sizeof buf, fh)) {
0a4baa
-	char *s, name[IFNAMSIZ];
0a4baa
-	s = get_name(name, buf);
0a4baa
+    while (getline(&line, &linelen, fh) != -1) {
0a4baa
+	char *s, *name;
0a4baa
+	s = get_name(&name, line);    
0a4baa
 	ife = if_cache_add(name);
0a4baa
 	get_dev_fields(s, ife);
0a4baa
 	ife->statistics_valid = 1;
0a4baa
@@ -379,6 +382,8 @@ static int if_readlist_proc(char *target
0a4baa
 #if 0
0a4baa
     free(fmt);
0a4baa
 #endif
0a4baa
+  out:
0a4baa
+    free(line);
0a4baa
     fclose(fh);
0a4baa
     return err;
0a4baa
 }
0a4baa
@@ -386,24 +391,28 @@ static int if_readlist_proc(char *target
0a4baa
 static int if_readlist_rep(char *target, struct interface *ife)
0a4baa
 {
0a4baa
     FILE *fh;
0a4baa
-    char buf[512];
0a4baa
     int err;
0a4baa
+    char *line = NULL;
0a4baa
+    size_t linelen = 0;
0a4baa
 
0a4baa
     fh = fopen(_PATH_PROCNET_DEV, "r");
0a4baa
     if (!fh) {
0a4baa
 		fprintf(stderr, _("Warning: cannot open %s (%s). Limited output.\n"),
0a4baa
 			_PATH_PROCNET_DEV, strerror(errno)); 
0a4baa
 		return if_readconf();
0a4baa
-	}	
0a4baa
-    fgets(buf, sizeof buf, fh);	/* eat line */
0a4baa
-    fgets(buf, sizeof buf, fh);
0a4baa
+	}
0a4baa
+    if (getline(&line, &linelen, fh) == -1 /* eat line */
0a4baa
+	|| getline(&line, &linelen, fh) == -1) { /* eat line */
0a4baa
+		err = -1;
0a4baa
+		goto out;
0a4baa
+	}
0a4baa
 
0a4baa
-    procnetdev_vsn = procnetdev_version(buf);
0a4baa
+    procnetdev_vsn = procnetdev_version(line);
0a4baa
 
0a4baa
     err = 0;
0a4baa
-    while (fgets(buf, sizeof buf, fh)) {
0a4baa
-	char *s, name[IFNAMSIZ];
0a4baa
-	s = get_name(name, buf);    
0a4baa
+    while (getline(&line, &linelen, fh) != -1) {
0a4baa
+	char *s, *name;
0a4baa
+	s = get_name(&name, line);    
0a4baa
 	get_dev_fields(s, ife);
0a4baa
 	if (target && !strcmp(target,name))
0a4baa
 	{
0a4baa
@@ -416,6 +425,8 @@ static int if_readlist_rep(char *target,
0a4baa
 	err = -1;
0a4baa
     }
0a4baa
 
0a4baa
+  out:
0a4baa
+    free(line);
0a4baa
     fclose(fh);
0a4baa
     return err;
0a4baa
 }