diff options
author | Boris Kolpackov <boris@codesynthesis.com> | 2010-10-05 09:32:46 +0200 |
---|---|---|
committer | Boris Kolpackov <boris@codesynthesis.com> | 2010-10-05 09:32:46 +0200 |
commit | 60329bef10f114dac7b9a01d9cd83d6ed25e97ac (patch) | |
tree | 0c515ca2320ea144ee0dc77cc11a1ecacf4d6e87 /examples | |
parent | bf0566e9542656da165a5cba1b1605980ba600b0 (diff) |
Do complete error checking in the minimal examples
Diffstat (limited to 'examples')
-rw-r--r-- | examples/cxx/hybrid/minimal/driver.cxx | 57 |
1 files changed, 51 insertions, 6 deletions
diff --git a/examples/cxx/hybrid/minimal/driver.cxx b/examples/cxx/hybrid/minimal/driver.cxx index f23f308..38afd9a 100644 --- a/examples/cxx/hybrid/minimal/driver.cxx +++ b/examples/cxx/hybrid/minimal/driver.cxx @@ -175,13 +175,58 @@ main (int argc, char* argv[]) // Insert a new person. // { - person* p = new person; - p->first_name (strdupx ("Joe")); - p->last_name (strdupx ("Dirt")); - p->age (36); - p->gender (gender::male); + person* p = 0; + bool mem_error = false; - ps.insert (ps.begin (), p); + do + { + p = new person; + + if (p == 0) + { + mem_error = true; + break; + } + + char* s = strdupx ("Joe"); + + if (s == 0) + { + mem_error = true; + break; + } + + p->first_name (s); + + s = strdupx ("Dirt"); + + if (s == 0) + { + mem_error = true; + break; + } + + p->last_name (s); + + p->age (36); + p->gender (gender::male); + + if (ps.insert (ps.begin (), p) != 0) + { + mem_error = true; + p = 0; // The sequence has already deleted the object. + break; + } + + } while (false); + + if (mem_error) + { + fprintf (stderr, "error: no memory\n"); + delete p; + delete ppl; + return 1; + } } // Serialize. |