diff options
author | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2009-03-02 13:43:41 -0800 |
---|---|---|
committer | Stephen Hemminger <stephen.hemminger@vyatta.com> | 2009-03-02 13:43:41 -0800 |
commit | 10c440317aa744e72f180a348f924568f59c0a36 (patch) | |
tree | 494d362314d7057c244d76f32e17d07d720554e8 | |
parent | 9803990210b35feb836118fa9790b26f10ba0be6 (diff) | |
download | android_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.c | 14 |
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. */ |