blob: b70746af78112f6e8b516bc06cdea58fd2f02456 [file] [log] [blame]
Benny Prijono5dcb38d2005-11-21 01:55:47 +00001/* $Id$ */
2/*
Benny Prijono844653c2008-12-23 17:27:53 +00003 * Copyright (C) 2008-2009 Teluu Inc. (http://www.teluu.com)
4 * Copyright (C) 2003-2008 Benny Prijono <benny@prijono.org>
Benny Prijono5dcb38d2005-11-21 01:55:47 +00005 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 2 of the License, or
9 * (at your option) any later version.
10 *
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
15 *
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
19 */
20#include <pj/except.h>
21#include <pj/rand.h>
22#include <stdio.h>
23#include <stdlib.h>
24
25/**
26 * \page page_pjlib_samples_except_c Example: Exception Handling
27 *
28 * Below is sample program to demonstrate how to use exception handling.
29 *
30 * \includelineno pjlib-samples/except.c
31 */
32
33static pj_exception_id_t NO_MEMORY, OTHER_EXCEPTION;
34
35static void randomly_throw_exception()
36{
37 if (pj_rand() % 2)
38 PJ_THROW(OTHER_EXCEPTION);
39}
40
41static void *my_malloc(size_t size)
42{
43 void *ptr = malloc(size);
44 if (!ptr)
45 PJ_THROW(NO_MEMORY);
46 return ptr;
47}
48
49static int test_exception()
50{
51 PJ_USE_EXCEPTION;
52
53 PJ_TRY {
54 void *data = my_malloc(200);
55 free(data);
56 randomly_throw_exception();
57 }
Benny Prijonod0d44f52005-11-21 16:57:02 +000058 PJ_CATCH_ANY {
Benny Prijono5dcb38d2005-11-21 01:55:47 +000059 pj_exception_id_t x_id;
60
61 x_id = PJ_GET_EXCEPTION();
62 printf("Caught exception %d (%s)\n",
63 x_id, pj_exception_id_name(x_id));
64 }
65 PJ_END
66 return 1;
67}
68
69int main()
70{
71 pj_status_t rc;
72
73 // Error handling is omited for clarity.
74
75 rc = pj_init();
76
77 rc = pj_exception_id_alloc("No Memory", &NO_MEMORY);
78 rc = pj_exception_id_alloc("Other Exception", &OTHER_EXCEPTION);
79
80 return test_exception();
81}
82