infiniband-diags: initial port of linux ib diags
[mirror/winof/.git] / tools / infiniband_diags / src / ibdiag_common.c
1 /*\r
2  * Copyright (c) 2006-2007 The Regents of the University of California.\r
3  * Copyright (c) 2004-2006 Voltaire, Inc. All rights reserved.\r
4  *\r
5  * This software is available to you under a choice of one of two\r
6  * licenses.  You may choose to be licensed under the terms of the GNU\r
7  * General Public License (GPL) Version 2, available from the file\r
8  * COPYING in the main directory of this source tree, or the\r
9  * OpenIB.org BSD license below:\r
10  *\r
11  *     Redistribution and use in source and binary forms, with or\r
12  *     without modification, are permitted provided that the following\r
13  *     conditions are met:\r
14  *\r
15  *      - Redistributions of source code must retain the above\r
16  *        copyright notice, this list of conditions and the following\r
17  *        disclaimer.\r
18  *\r
19  *      - Redistributions in binary form must reproduce the above\r
20  *        copyright notice, this list of conditions and the following\r
21  *        disclaimer in the documentation and/or other materials\r
22  *        provided with the distribution.\r
23  *\r
24  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,\r
25  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF\r
26  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND\r
27  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS\r
28  * BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN\r
29  * ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN\r
30  * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\r
31  * SOFTWARE.\r
32  *\r
33  */\r
34 \r
35 /**\r
36  * Define common functions which can be included in the various C based diags.\r
37  */\r
38 \r
39 #include <stdio.h>\r
40 #include <stdlib.h>\r
41 \r
42 #if defined(_WIN32) || defined(_WIN64)\r
43 #include <windows.h>\r
44 #include <winsock2.h>\r
45 #include <ws2tcpip.h>\r
46 #if !defined(getpid)\r
47     #define getpid GetCurrentProcessId\r
48 #endif\r
49 #else\r
50 #define _GNU_SOURCE\r
51 #include <errno.h>\r
52 #include <string.h>\r
53 #include <stdarg.h>\r
54 #include <sys/types.h>\r
55 #include <unistd.h>\r
56 #include <ctype.h>\r
57 #include <config.h>\r
58 #endif\r
59 \r
60 #include "ibdiag_common.h"\r
61 \r
62 int ibdebug;\r
63 \r
64 void\r
65 iberror(const char *fn, char *msg, ...)\r
66 {\r
67         char buf[512], *s;\r
68         va_list va;\r
69         int n;\r
70 \r
71         va_start(va, msg);\r
72         n = vsprintf(buf, msg, va);\r
73         va_end(va);\r
74         buf[n] = 0;\r
75 \r
76         if ((s = strrchr(argv0, '/')))\r
77                 argv0 = s + 1;\r
78 \r
79         if (ibdebug)\r
80                 printf("%s: iberror: [pid %d] %s: failed: %s\n", argv0, getpid(), fn, buf);\r
81         else\r
82                 printf("%s: iberror: failed: %s\n", argv0, buf);\r
83 \r
84         exit(-1);\r
85 }\r
86 \r