Add the -p option to specify a port for the spclient examples
[spfs.git] / libspfs / error.c
blob53e0a26c671dfc2d7e1ba5a6ea694f009ddb7e96
1 /*
2 * Copyright (C) 2006 by Latchesar Ionkov <lucho@ionkov.net>
4 * Permission is hereby granted, free of charge, to any person obtaining a
5 * copy of this software and associated documentation files (the "Software"),
6 * to deal in the Software without restriction, including without limitation
7 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
8 * and/or sell copies of the Software, and to permit persons to whom the
9 * Software is furnished to do so, subject to the following conditions:
11 * The above copyright notice and this permission notice (including the next
12 * paragraph) shall be included in all copies or substantial portions of the
13 * Software.
15 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18 * LATCHESAR IONKOV AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21 * DEALINGS IN THE SOFTWARE.
23 #include <stdlib.h>
24 #include <stdio.h>
25 #include <string.h>
26 #include <errno.h>
27 #include <stdarg.h>
28 #include "spfs.h"
30 char *Enomem = "not enough memory";
32 /* vasprintf fails on some RHEL distros ... hence the static */
33 static char sp_ename[1024];
34 static int sp_ecode;
36 void *
37 sp_malloc(int size)
39 void *ret;
41 ret = malloc(size);
42 if (!ret)
43 sp_werror(Enomem, ENOMEM);
45 return ret;
48 static void
49 sp_vwerror(char *ename, int ecode, va_list ap)
51 sp_ecode = ecode;
52 if (ename) {
53 vsnprintf(sp_ename, sizeof(sp_ename), ename, ap);
57 void
58 sp_werror(char *ename, int ecode, ...)
60 va_list ap;
62 va_start(ap, ecode);
63 sp_vwerror(ename, ecode, ap);
64 va_end(ap);
67 void
68 sp_rerror(char **ename, int *ecode)
70 *ename = NULL;
71 if (sp_ecode)
72 *ename = sp_ename;
73 *ecode = sp_ecode;
76 int
77 sp_haserror()
79 return sp_ecode != 0;
82 void
83 sp_uerror(int ecode)
85 char *ename;
87 ename = strerror(ecode);
88 sp_werror(ename, ecode);
91 void
92 sp_suerror(char *s, int ecode)
94 char err[256];
95 char buf[512];
97 strerror_r(ecode, err, sizeof(err));
98 snprintf(buf, sizeof(buf), "%s: %s", s, err);
99 sp_werror(buf, ecode);