aboutsummaryrefslogtreecommitdiff
path: root/examples
diff options
context:
space:
mode:
authorBoris Kolpackov <boris@codesynthesis.com>2010-10-05 09:32:46 +0200
committerBoris Kolpackov <boris@codesynthesis.com>2010-10-05 09:32:46 +0200
commit60329bef10f114dac7b9a01d9cd83d6ed25e97ac (patch)
tree0c515ca2320ea144ee0dc77cc11a1ecacf4d6e87 /examples
parentbf0566e9542656da165a5cba1b1605980ba600b0 (diff)
Do complete error checking in the minimal examples
Diffstat (limited to 'examples')
-rw-r--r--examples/cxx/hybrid/minimal/driver.cxx57
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.