1/*
2 * The most of error symbles shall have unique value
3 * I try to test every symble in a loop. There
4 * are two kind symbles, one have unique value, the others
5 * can have same value with certain other symbles
6 * Author:ysun@lnxw.com
7 */
8#include <stdio.h>
9#include <string.h>
10#include <errno.h>
11
12#define PTP_PASS        0
13#define PTP_FAIL        1
14#define PTP_UNRESOLVED  2
15#define PTP_NOTINUSE    3
16#define PTP_UNSUPPORTED 4
17#define PTP_UNTESTED    5
18#define PTP_UNINITIATED 6
19#define PTP_NORESULT    7
20
21
22struct unique {
23    int value;
24    char *name;
25    int duplicate;
26} sym[] = {{E2BIG,"E2BIG",E2BIG},{EACCES,"EACCES",EACCES},
27	   {EADDRINUSE,"EADDRINUSE",EADDRINUSE},
28	   {EADDRNOTAVAIL,"EADDRNOTAVAIL",EADDRNOTAVAIL},
29	   {EAFNOSUPPORT,"EAFNOSUPPORT",EAFNOSUPPORT},
30	   {EAGAIN,"EAGAIN",EWOULDBLOCK},
31	   {EALREADY,"EALREADY",EALREADY}, {EBADF,"EBADF",EBADF},
32	   {EBADMSG,"EBADMSG",EBADMSG},{EBUSY,"EBUSY",EBUSY},
33	   {ECANCELED,"ECANCELED",ECANCELED},{ECHILD,"ECHILD",ECHILD},
34	   {ECONNABORTED,"ECONNABORTED",ECONNABORTED},
35	   {ECONNREFUSED,"ECONNREFUSED",ECONNREFUSED},
36	   {ECONNRESET,"ECONNRESET",ECONNRESET},{EDEADLK,"EDEADLK",EDEADLK,},
37	   {EDESTADDRREQ,"EDESTADDRREQ",EDESTADDRREQ},{EDOM,"EDOM",EDOM},
38	   {EDQUOT,"EDQUOT",EDQUOT},{EEXIST,"EEXIST",EEXIST},
39	   {EFAULT,"EFAULT",EFAULT},{EFBIG,"EFBIG",EFBIG},
40	   {EHOSTUNREACH,"EHOSTUNREACH",EHOSTUNREACH},
41	   {EIDRM,"EIDRM",EIDRM},{EILSEQ,"EILSEQ",EILSEQ},
42	   {EINPROGRESS,"EINPROGRESS",EINPROGRESS},
43	   {EINTR,"EINTR",EINTR},{EINVAL,"EINVAL",EINVAL},
44	   {EIO,"EIO",EIO},{EISCONN,"EISCONN",EISCONN},
45	   {EISDIR,"EISDIR",EISDIR},{ELOOP,"ELOOP",ELOOP},
46	   {EMFILE,"EMFILE",EMFILE},{EMLINK,"EMLINK",EMLINK},
47	   {EMSGSIZE,"EMSGSIZE",EMSGSIZE},{EMULTIHOP,"EMULTIHOP",EMULTIHOP},
48	   {ENAMETOOLONG,"ENAMETOOLONG",ENAMETOOLONG},
49	   {ENETDOWN,"ENETDOWN",ENETDOWN},
50	   {ENETRESET,"ENETRESET",ENETRESET},{ENETUNREACH,"ENETUNREACH",ENETUNREACH},
51	   {ENFILE,"ENFILE",ENFILE},{ENOBUFS,"ENOBUFS",ENOBUFS},
52	   {ENODATA,"ENODATA",ENODATA},{ENODEV,"ENODEV",ENODEV},
53	   {ENOENT,"ENOENT",ENOENT},{ENOEXEC,"ENOEXEC",ENOEXEC},
54	   {ENOLCK,"ENOLCK",ENOLCK},{ENOLINK,"ENOLINK",ENOLINK},
55	   {ENOMEM,"ENOMEM",ENOMEM},{ENOMSG,"ENOMSG",ENOMSG},
56	   {ENOPROTOOPT,"ENOPROTOOPT",ENOPROTOOPT},{ENOSPC,"ENOSPC",ENOSPC},
57	   {ENOSR,"ENOSR",ENOSR},{ENOSTR,"ENOSTR",ENOSTR},
58	   {ENOSYS,"ENOSYS",ENOSYS},{ENOTCONN,"ENOTCONN",ENOTCONN},
59	   {ENOTDIR,"ENOTDIR",ENOTDIR},{ENOTEMPTY,"ENOTEMPTY",ENOTEMPTY},
60	   {ENOTSOCK,"ENOTSOCK",ENOTSOCK},{ENOTSUP,"ENOTSUP",ENOTSUP},
61	   {ENOTTY,"ENOTTY",ENOTTY},{ENXIO,"ENXIO",ENXIO},
62	   {EOPNOTSUPP,"EOPNOTSUPP",EOPNOTSUPP},{EOVERFLOW,"EOVERFLOW",EOVERFLOW},
63	   {EPERM,"EPERM",EPERM},{EPIPE,"EPIPE",EPIPE},{EPROTO,"EPROTO",EPROTO},
64	   {EPROTONOSUPPORT,"EPROTONOSUPPORT",EPROTONOSUPPORT},
65	   {EPROTOTYPE,"EPROTOTYPE",EPROTOTYPE},
66	   {ERANGE,"ERANGE",ERANGE},{EROFS,"EROFS",EROFS},
67	   {EWOULDBLOCK,"EWOULDBLOCK",EAGAIN},{EXDEV,"EXDEV",EXDEV},
68	   {0,0,0}
69};
70
71int main() {
72    struct unique *tst;
73    int i,ret = PTP_PASS;
74    tst = sym;
75
76    while (tst->name) {
77	for(i = 0; sym[i].name; i++) {
78	    if (tst->value == sym[i].value
79		&& tst->duplicate != sym[i].value
80		&& strcmp(tst->name,sym[i].name)) {//In case EAGAIN is not equal to EWOULDBLOCK,compare the name
81		printf("%s has a duplicate value with %s\n",
82		       tst->name,sym[i].name);
83		ret = PTP_FAIL;
84	    }
85	}
86	tst++;
87    }
88    return ret;
89}
90