You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2010/01/13 15:18:39 UTC

svn commit: r898763 - in /commons/sandbox/runtime/trunk/src/main/native: include/acr_error.h os/win32/fsysrw.c shared/error.c test/testsuite.c

Author: mturk
Date: Wed Jan 13 14:18:39 2010
New Revision: 898763

URL: http://svn.apache.org/viewvc?rev=898763&view=rev
Log:
For win32 use cononical error codes instead mixing crt and win errors

Modified:
    commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h
    commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysrw.c
    commons/sandbox/runtime/trunk/src/main/native/shared/error.c
    commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h?rev=898763&r1=898762&r2=898763&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h Wed Jan 13 14:18:39 2010
@@ -776,7 +776,193 @@
  * @addtogroup ACR_Error ACR Error Values
  * @{
  */
-/* ACR CANONICAL ERROR VALUES */
+#if defined(WIN32)
+/* Windows ACR CANONICAL ERROR VALUES */
+/** Operation not permitted */
+#define ACR_EPERM               (ACR_OS_START_CANONERR +  1)
+/** No such file or directory */
+#define ACR_ENOENT              (ACR_OS_START_CANONERR +  2)
+/** No such process */
+#define ACR_ESRCH               (ACR_OS_START_CANONERR +  3)
+/** Interrupted system call */
+#define ACR_EINTR               (ACR_OS_START_CANONERR +  4)
+/** Input/output error */
+#define ACR_EIO                 (ACR_OS_START_CANONERR +  5)
+/** Device not configured */
+#define ACR_ENXIO               (ACR_OS_START_CANONERR +  6)
+/** Argument list too long */
+#define ACR_E2BIG               (ACR_OS_START_CANONERR +  7)
+/** Exec format error */
+#define ACR_ENOEXEC             (ACR_OS_START_CANONERR +  8)
+/** Bad file descriptor */
+#define ACR_EBADF               (ACR_OS_START_CANONERR +  9)
+/** No child processes */
+#define ACR_ECHILD              (ACR_OS_START_CANONERR + 10)
+/** Resource deadlock avoided */
+#define ACR_EDEADLK             (ACR_OS_START_CANONERR + 11)
+/** Cannot allocate memory */
+#define ACR_ENOMEM              (ACR_OS_START_CANONERR + 12)
+/** Permission denied */
+#define ACR_EACCES              (ACR_OS_START_CANONERR + 13)
+/** Bad address */
+#define ACR_EFAULT              (ACR_OS_START_CANONERR + 14)
+/** Block device required */
+#define ACR_ENOTBLK             (ACR_OS_START_CANONERR + 15)
+/** Device busy */
+#define ACR_EBUSY               (ACR_OS_START_CANONERR + 16)
+/** File exists */
+#define ACR_EEXIST              (ACR_OS_START_CANONERR + 17)
+/** Cross-device link */
+#define ACR_EXDEV               (ACR_OS_START_CANONERR + 18)
+/** Operation not supported by device */
+#define ACR_ENODEV              (ACR_OS_START_CANONERR + 19)
+/** Not a directory */
+#define ACR_ENOTDIR             (ACR_OS_START_CANONERR + 20)
+/** Is a directory */
+#define ACR_EISDIR              (ACR_OS_START_CANONERR + 21)
+/** Invalid argument */
+#define ACR_EINVAL              (ACR_OS_START_CANONERR + 22)
+/** Too many open files in system */
+#define ACR_ENFILE              (ACR_OS_START_CANONERR + 23)
+/** Too many open files */
+#define ACR_EMFILE              (ACR_OS_START_CANONERR + 24)
+/** Inappropriate ioctl for device */
+#define ACR_ENOTTY              (ACR_OS_START_CANONERR + 25)
+/** Text file busy */
+#define ACR_ETXTBSY             (ACR_OS_START_CANONERR + 26)
+/** File too large */
+#define ACR_EFBIG               (ACR_OS_START_CANONERR + 27)
+/** No space left on device */
+#define ACR_ENOSPC              (ACR_OS_START_CANONERR + 28)
+/** Illegal seek */
+#define ACR_ESPIPE              (ACR_OS_START_CANONERR + 29)
+/** Read-only file system */
+#define ACR_EROFS               (ACR_OS_START_CANONERR + 30)
+/** Too many links */
+#define ACR_EMLINK              (ACR_OS_START_CANONERR + 31)
+/** Broken pipe */
+#define ACR_EPIPE               (ACR_OS_START_CANONERR + 32)
+/** Numerical argument out of domain */
+#define ACR_EDOM                (ACR_OS_START_CANONERR + 33)
+/** Result too large */
+#define ACR_ERANGE              (ACR_OS_START_CANONERR + 34)
+/** Resource temporarily unavailable */
+#define ACR_EAGAIN              (ACR_OS_START_CANONERR + 35)
+/** Operation would block */
+#define ACR_EWOULDBLOCK         (ACR_OS_START_CANONERR + 35)
+/** Operation now in progress */
+#define ACR_EINPROGRESS         (ACR_OS_START_CANONERR + 36)
+/** Operation already in progress */
+#define ACR_EALREADY            (ACR_OS_START_CANONERR + 37)
+/** Socket operation on non-socket */
+#define ACR_ENOTSOCK            (ACR_OS_START_CANONERR + 38)
+/** Destination address required */
+#define ACR_EDESTADDRREQ        (ACR_OS_START_CANONERR + 39)
+/** Message too long */
+#define ACR_EMSGSIZE            (ACR_OS_START_CANONERR + 40)
+/** Protocol wrong type for socket */
+#define ACR_EPROTOTYPE          (ACR_OS_START_CANONERR + 41)
+/** Protocol not available */
+#define ACR_ENOPROTOOPT         (ACR_OS_START_CANONERR + 42)
+/** Protocol not supported */
+#define ACR_EPROTONOSUPPORT     (ACR_OS_START_CANONERR + 43)
+/** Socket type not supported */
+#define ACR_ESOCKTNOSUPPORT     (ACR_OS_START_CANONERR + 44)
+/** Operation not supported */
+#define ACR_EOPNOTSUPP          (ACR_OS_START_CANONERR + 45)
+/** Protocol family not supported */
+#define ACR_EPFNOSUPPORT        (ACR_OS_START_CANONERR + 46)
+/** Address family not supported by protocol family */
+#define ACR_EAFNOSUPPORT        (ACR_OS_START_CANONERR + 47)
+/** Address already in use */
+#define ACR_EADDRINUSE          (ACR_OS_START_CANONERR + 48)
+/** Can't assign requested address */
+#define ACR_EADDRNOTAVAIL       (ACR_OS_START_CANONERR + 49)
+/** Network is down */
+#define ACR_ENETDOWN            (ACR_OS_START_CANONERR + 50)
+/** Network is unreachable */
+#define ACR_ENETUNREACH         (ACR_OS_START_CANONERR + 51)
+/** Network dropped connection on reset */
+#define ACR_ENETRESET           (ACR_OS_START_CANONERR + 52)
+/** Software caused connection abort */
+#define ACR_ECONNABORTED        (ACR_OS_START_CANONERR + 53)
+/** Connection reset by peer */
+#define ACR_ECONNRESET          (ACR_OS_START_CANONERR + 54)
+/** No buffer space available */
+#define ACR_ENOBUFS             (ACR_OS_START_CANONERR + 55)
+/** Socket is already connected */
+#define ACR_EISCONN             (ACR_OS_START_CANONERR + 56)
+/** Socket is not connected */
+#define ACR_ENOTCONN            (ACR_OS_START_CANONERR + 57)
+/** Can't send after socket shutdown */
+#define ACR_ESHUTDOWN           (ACR_OS_START_CANONERR + 58)
+/** Too many references: can't splice */
+#define ACR_ETOOMANYREFS        (ACR_OS_START_CANONERR + 59)
+/** Operation timed out */
+#define ACR_ETIMEDOUT           (ACR_OS_START_CANONERR + 60)
+/** Connection refused */
+#define ACR_ECONNREFUSED        (ACR_OS_START_CANONERR + 61)
+/** Too many levels of symbolic links */
+#define ACR_ELOOP               (ACR_OS_START_CANONERR + 62)
+/** File name too long */
+#define ACR_ENAMETOOLONG        (ACR_OS_START_CANONERR + 63)
+/** Host is down */
+#define ACR_EHOSTDOWN           (ACR_OS_START_CANONERR + 64)
+/** No route to host */
+#define ACR_EHOSTUNREACH        (ACR_OS_START_CANONERR + 65)
+/** Directory not empty */
+#define ACR_ENOTEMPTY           (ACR_OS_START_CANONERR + 66)
+/** Too many processes */
+#define ACR_EPROCLIM            (ACR_OS_START_CANONERR + 67)
+/** Too many users */
+#define ACR_EUSERS              (ACR_OS_START_CANONERR + 68)
+/** Disk quota exceeded */
+#define ACR_EDQUOT              (ACR_OS_START_CANONERR + 69)
+/** Stale NFS file handle */
+#define ACR_ESTALE              (ACR_OS_START_CANONERR + 70)
+/** Too many levels of remote in path */
+#define ACR_EREMOTE             (ACR_OS_START_CANONERR + 71)
+/** RPC struct is bad */
+#define ACR_EBADRPC             (ACR_OS_START_CANONERR + 72)
+/** RPC version wrong */
+#define ACR_ERPCMISMATCH        (ACR_OS_START_CANONERR + 73)
+/** RPC prog. not avail */
+#define ACR_EPROGUNAVAIL        (ACR_OS_START_CANONERR + 74)
+/** Program version wrong */
+#define ACR_EPROGMISMATCH       (ACR_OS_START_CANONERR + 75)
+/** Bad procedure for program */
+#define ACR_EPROCUNAVAIL        (ACR_OS_START_CANONERR + 76)
+/** No locks available */
+#define ACR_ENOLCK              (ACR_OS_START_CANONERR + 77)
+/** Function not implemented */
+#define ACR_ENOSYS              (ACR_OS_START_CANONERR + 78)
+/** Inappropriate file type or format */
+#define ACR_EFTYPE              (ACR_OS_START_CANONERR + 79)
+/** Authentication error */
+#define ACR_EAUTH               (ACR_OS_START_CANONERR + 80)
+/** Need authenticator */
+#define ACR_ENEEDAUTH           (ACR_OS_START_CANONERR + 81)
+/** IPsec processing failure */
+#define ACR_EIPSEC              (ACR_OS_START_CANONERR + 82)
+/** Attribute not found */
+#define ACR_ENOATTR             (ACR_OS_START_CANONERR + 83)
+/** Illegal byte sequence */
+#define ACR_EILSEQ              (ACR_OS_START_CANONERR + 84)
+/** No medium found */
+#define ACR_ENOMEDIUM           (ACR_OS_START_CANONERR + 85)
+/** Wrong Medium Type */
+#define ACR_EMEDIUMTYPE         (ACR_OS_START_CANONERR + 86)
+/** Conversion overflow */
+#define ACR_EOVERFLOW           (ACR_OS_START_CANONERR + 87)
+/** Operation canceled */
+#define ACR_ECANCELED           (ACR_OS_START_CANONERR + 88)
+/** Identifier removed */
+#define ACR_EIDRM               (ACR_OS_START_CANONERR + 89)
+/** No message of desired type */
+#define ACR_ENOMSG              (ACR_OS_START_CANONERR + 90)
+
+#else
+/* Posix ACR CANONICAL ERROR VALUES */
 /** Operation not permitted */
 #ifndef EPERM
 #define ACR_EPERM               (ACR_OS_START_CANONERR +  1)
@@ -1324,8 +1510,9 @@
 #define ACR_ENOMSG ENOMSG
 #endif
 
-#define ACR_OS_LAST_CANONERR    (ACR_OS_START_CANONERR + 91)
+#endif
 
+#define ACR_OS_LAST_CANONERR    (ACR_OS_START_CANONERR + 91)
 /** @} */
 
 #if defined(WIN32) && !defined(DOXYGEN)

Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysrw.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysrw.c?rev=898763&r1=898762&r2=898763&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysrw.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/fsysrw.c Wed Jan 13 14:18:39 2010
@@ -33,12 +33,11 @@
 
 static DWORD overlapped_wait(acr_file_t *f, DWORD *nbytes)
 {
-    DWORD ws;
     DWORD rc = 0;
 
     do {
-        switch (ws = ACR_WaitForObjectOrSignal(f->overlap.hEvent,
-                                               f->timeout)) {
+        switch (ACR_WaitForObjectOrSignal(f->overlap.hEvent,
+                                          f->timeout)) {
             case WAIT_IO_COMPLETION:
             case WAIT_ABANDONED_0:
             case WAIT_ABANDONED_1:
@@ -87,11 +86,10 @@
 
 static DWORD overlapped_wait_all(acr_file_t *f, DWORD *nbytes)
 {
-    DWORD ws;
     DWORD rc = 0;
 
     do {
-        switch (ws = ACR_WaitForObjectOrSignal(f->overlap.hEvent, INFINITE)) {
+        switch (ACR_WaitForObjectOrSignal(f->overlap.hEvent, INFINITE)) {
             case WAIT_IO_COMPLETION:
             case WAIT_ABANDONED_0:
             case WAIT_ABANDONED_1:
@@ -2806,7 +2804,7 @@
             }
         }
         else {
-            switch (rc = GetLastError()) {
+            switch ((rc = GetLastError())) {
                 case ERROR_IO_PENDING:
                     if ((rc = overlapped_wait_all(f, &wr)) == 0) {
                         if (wr) {

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/error.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/error.c?rev=898763&r1=898762&r2=898763&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/error.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/error.c Wed Jan 13 14:18:39 2010
@@ -543,17 +543,13 @@
 }
 
 
-static char *acr_os_strerror(char *buf, acr_size_t bufsize, int errcode)
-{
-    snprintf(buf, bufsize, "Unrecognized Win32 error code %d", errcode);
-    return buf;
-}
+#define acr_os_strerror native_strerror
 
 #else
 /* On Unix, apr_os_strerror() handles error codes from the resolver
  * (h_errno).
  */
-static char *acr_os_strerror(char* buf, acr_size_t bufsize, int err)
+static char *acr_os_strerror(char *buf, acr_size_t bufsize, int err)
 {
 #if !defined(HPUX11)
     return stuffbuffer(buf, bufsize, hstrerror(err));
@@ -585,8 +581,7 @@
 #endif
 
 #if defined (WIN32)
-static char *native_strerror(int statcode, char *buf,
-                             acr_size_t bufsize)
+static char *native_strerror(char *buf, acr_size_t bufsize, int statcode)
 {
     DWORD len = 0;
     int i;
@@ -630,8 +625,7 @@
 }
 #elif HAVE_STRERROR_R
 /* glibc style */
-static char *native_strerror(int statcode, char *buf,
-                             acr_size_t bufsize)
+static char *native_strerror(char *buf, acr_size_t bufsize, int statcode)
 {
 #ifdef _GNU_SOURCE
     const char *msg;
@@ -654,8 +648,7 @@
 /* plain old strerror();
  * thread-safe on some platforms (e.g., Solaris, OS/390)
  */
-static char *native_strerror(int statcode, char *buf,
-                             acr_size_t bufsize)
+static char *native_strerror(char *buf, acr_size_t bufsize, int statcode)
 {
     const char *err = strerror(statcode);
     if (err) {
@@ -674,7 +667,7 @@
         return buf;
     }
     else if (statcode < ACR_OS_START_ERROR) {
-        return native_strerror(statcode, buf, bufsize);
+        return native_strerror(buf, bufsize, statcode);
     }
     else if (statcode < ACR_OS_START_USERERR) {
         return stuffbuffer(buf, bufsize, acr_error_string(statcode));
@@ -906,7 +899,7 @@
 
 ACR_JNI_EXPORT_DECLARE(jstring, io_Status, describe)(ACR_JNISTDARGS, jint err)
 {
-    char buf[512];
-    return ACR_NewJavaStringA(_E, acr_os_strerror(buf, sizeof(buf), err));
+    char buf[1024];
+    return ACR_NewJavaStringA(_E, ACR_GetErrorString(err, buf, sizeof(buf)));
 }
 

Modified: commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c?rev=898763&r1=898762&r2=898763&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testsuite.c Wed Jan 13 14:18:39 2010
@@ -75,6 +75,26 @@
     {NULL,                                 0,   NULL,     0, NULL }
 };
 
+static int test_errors(int argc, const char *const argv[])
+{
+    char buf[512];
+
+#define PRINT_ERROR(E)  \
+    printf("%-25s%8d %s\n", #E, E, ACR_GetErrorString(E, buf, sizeof(buf)))
+
+    printf("ACR_OS_START_USERERR       %d\n", ACR_OS_START_USERERR);
+    printf("ACR_OS_START_EAIERR        %d\n", ACR_OS_START_EAIERR);
+    PRINT_ERROR(ACR_EINVAL);
+    PRINT_ERROR(ACR_EFAULT);
+    PRINT_ERROR(ACR_EINTR);
+    PRINT_ERROR(ACR_EAGAIN);
+    PRINT_ERROR(ACR_EWOULDBLOCK);
+    PRINT_ERROR(ACR_EINPROGRESS);
+    PRINT_ERROR(ACR_EALREADY);
+
+    return 0;
+}
+
 static int test_getenv(int argc, const char *const argv[])
 {
     int failed = 0;
@@ -674,7 +694,7 @@
     }
     ap = args;
     while(*ap) {
-        fprintf(stdout, "ARG : %S.\n", *ap);    
+        fprintf(stdout, "ARG : %S.\n", *ap);
         ap++;
     }
     ACR_Afree(INVALID_HANDLE_VALUE, THROW_FMARK, args);
@@ -746,6 +766,9 @@
         if (!strcasecmp(run_test, "all")) {
 
         }
+        else if (!strcasecmp(run_test, "errors")) {
+            rv = test_errors(argc, argv);
+        }
         else if (!strcasecmp(run_test, "getenv")) {
             rv = test_getenv(argc, argv);
         }
@@ -799,7 +822,7 @@
             rv = test_registry(argc, argv);
         }
 
-#endif        
+#endif
     }
 
 cleanup: