aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStephen Hemminger <stephen.hemminger@vyatta.com>2009-03-02 13:43:41 -0800
committerStephen Hemminger <stephen.hemminger@vyatta.com>2009-03-02 13:43:41 -0800
commit10c440317aa744e72f180a348f924568f59c0a36 (patch)
tree494d362314d7057c244d76f32e17d07d720554e8
parent9803990210b35feb836118fa9790b26f10ba0be6 (diff)
downloadandroid_external_brctl-10c440317aa744e72f180a348f924568f59c0a36.tar.gz
android_external_brctl-10c440317aa744e72f180a348f924568f59c0a36.tar.bz2
android_external_brctl-10c440317aa744e72f180a348f924568f59c0a36.zip
Check for fopen() failing
Don't just die with SEGV if fopen fails.
-rw-r--r--libbridge/libbridge_devif.c14
1 files changed, 9 insertions, 5 deletions
diff --git a/libbridge/libbridge_devif.c b/libbridge/libbridge_devif.c
index 1decc28..34e3cc8 100644
--- a/libbridge/libbridge_devif.c
+++ b/libbridge/libbridge_devif.c
@@ -40,11 +40,15 @@ static void fetch_id(const char *dev, const char *name, struct bridge_id *id)
{
FILE *f = fpopen(dev, name);
- fscanf(f, "%2hhx%2hhx.%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx",
- &id->prio[0], &id->prio[1],
- &id->addr[0], &id->addr[1], &id->addr[2],
- &id->addr[3], &id->addr[4], &id->addr[5]);
- fclose(f);
+ if (!f)
+ fprintf(stderr, "%s: %s\n", dev, strerror(errno));
+ else {
+ fscanf(f, "%2hhx%2hhx.%2hhx%2hhx%2hhx%2hhx%2hhx%2hhx",
+ &id->prio[0], &id->prio[1],
+ &id->addr[0], &id->addr[1], &id->addr[2],
+ &id->addr[3], &id->addr[4], &id->addr[5]);
+ fclose(f);
+ }
}
/* Fetch an integer attribute out of sysfs. */