patch accepted by hand merge from v1. Thanks -Chris On 05/18/2012 04:18 AM, Sergey Senozhatsky wrote: > [PATCH] catch fstream exceptions in lib routines (v2) > > Catch possible fstream and traits_type exceptions in lib. > > V2: Thanks to Peter, he pointed to silly typo I've done in V1. > > Reported-and-tested-by: Lekensteyn > Signed-off-by: Sergey Senozhatsky > > --- > > src/lib.cpp | 54 +++++++++++++++++++++++++++++++++++++++--------------- > 1 file changed, 39 insertions(+), 15 deletions(-) > > diff --git a/src/lib.cpp b/src/lib.cpp > index 53638dd..0c2c1f1 100644 > --- a/src/lib.cpp > +++ b/src/lib.cpp > @@ -172,8 +172,13 @@ void write_sysfs(const string&filename, const string&value) > file.open(filename.c_str(), ios::out); > if (!file) > return; > - file<< value; > - file.close(); > + try > + { > + file<< value; > + file.close(); > + } catch (std::exception&exc) { > + return; > + } > } > > int read_sysfs(const string&filename, bool *ok) > @@ -187,10 +192,17 @@ int read_sysfs(const string&filename, bool *ok) > *ok = false; > return 0; > } > - file>> i; > + try > + { > + file>> i; > + if (ok) > + *ok = true; > + } catch (std::exception&exc) { > + if (ok) > + *ok = false; > + i = 0; > + } > file.close(); > - if (ok) > - *ok = true; > return i; > } > > @@ -203,11 +215,17 @@ string read_sysfs_string(const string&filename) > file.open(filename.c_str(), ios::in); > if (!file) > return ""; > - file.getline(content, 4096); > - file.close(); > - c = strchr(content, '\n'); > - if (c) > - *c = 0; > + try > + { > + file.getline(content, 4096); > + file.close(); > + c = strchr(content, '\n'); > + if (c) > + *c = 0; > + } catch (std::exception&exc) { > + file.close(); > + return ""; > + } > return content; > } > > @@ -224,11 +242,17 @@ string read_sysfs_string(const char *format, const char *param) > file.open(filename, ios::in); > if (!file) > return ""; > - file.getline(content, 4096); > - file.close(); > - c = strchr(content, '\n'); > - if (c) > - *c = 0; > + try > + { > + file.getline(content, 4096); > + file.close(); > + c = strchr(content, '\n'); > + if (c) > + *c = 0; > + } catch (std::exception&exc) { > + file.close(); > + return ""; > + } > return content; > } > >