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