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 2009/08/22 10:20:48 UTC
svn commit: r806808 - in /commons/sandbox/runtime/trunk/src/main/native/os:
unix/dso.c unix/pmutex.c unix/psema.c unix/pshm.c win32/dso.c win32/pshm.c
Author: mturk
Date: Sat Aug 22 08:20:47 2009
New Revision: 806808
URL: http://svn.apache.org/viewvc?rev=806808&view=rev
Log:
use EFTYPE/EBADF for descriptor handles
Modified:
commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c
commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/dso.c
commons/sandbox/runtime/trunk/src/main/native/os/win32/pshm.c
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c?rev=806808&r1=806807&r2=806808&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/dso.c Sat Aug 22 08:20:47 2009
@@ -70,7 +70,7 @@
if (ACR_IOH_TYPE(dso) != ACR_DT_DSO) {
ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EFTYPE);
- return ACR_EINVAL;
+ return ACR_EFTYPE;
}
rc = acr_ioh_close(dso);
ACR_THROW_IO_IF_ERR(rc);
@@ -82,8 +82,12 @@
int rc;
void *handle = ACR_IOH(dso);
- if (IS_INVALID_HANDLE(handle) || ACR_IOH_TYPE(dso) != ACR_DT_DSO) {
- ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EINVAL);
+ if (ACR_IOH_TYPE(dso) != ACR_DT_DSO) {
+ ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EFTYPE);
+ return NULL;
+ }
+ else if (IS_INVALID_HANDLE(handle)) {
+ ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EBADF);
return NULL;
}
else {
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c?rev=806808&r1=806807&r2=806808&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/pmutex.c Sat Aug 22 08:20:47 2009
@@ -89,23 +89,24 @@
if (m->filedes > 0) {
union semun ick;
if (m->locked) {
+ int rr;
struct sembuf op;
/* Unlock our instance */
op.sem_num = 0;
op.sem_op = 1;
op.sem_flg = SEM_UNDO;
do {
- rc = semop(m->filedes, &op, 1);
- } while (rc < 0 && errno == EINTR);
+ rr = semop(m->filedes, &op, 1);
+ } while (rr < 0 && errno == EINTR);
}
ick.val = 0;
semctl(m->filedes, 0, IPC_RMID, ick);
}
+ else
+ rc = ACR_EBADF;
if (m->filename) {
- if (access(m->filename, F_OK)) {
- rc = ACR_SUCCESS;
- }
- else {
+ if (!access(m->filename, F_OK)) {
+ /* File exists. Remove it */
if (unlink(m->filename))
rc = ACR_GET_OS_ERROR();
}
@@ -114,13 +115,13 @@
free(m);
return rc;
}
- return ACR_EBADF;
+ return ACR_EFTYPE;
}
static int mutex_child_cleanup(void *mutex, int type, unsigned int flags)
{
if (type == ACR_DT_MUTEX) {
- int rc;
+ int rc = ACR_SUCCESS;
acr_pmutex_t *m = (acr_pmutex_t *)mutex;
if (m->filedes > 0) {
if (m->locked) {
@@ -134,10 +135,12 @@
} while (rc < 0 && errno == EINTR);
}
}
+ else
+ rc = ACR_EBADF;
free(m);
- return ACR_SUCCESS;
+ return rc;
}
- return ACR_EBADF;
+ return ACR_EFTYPE;
}
ACR_DECLARE(int) ACR_ProcMutexCreate(JNIEnv *_E, const acr_pchar_t *fname)
@@ -288,9 +291,11 @@
struct sembuf op;
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
- ACR_SET_OS_ERROR(ACR_EINVAL);
- return -1;
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
+ return ACR_EINVAL;
}
op.sem_num = 0;
op.sem_op = -1;
@@ -313,7 +318,10 @@
struct sembuf op;
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
return ACR_EINVAL;
}
op.sem_num = 0;
@@ -343,7 +351,10 @@
struct sembuf op;
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
return ACR_EINVAL;
}
@@ -368,7 +379,10 @@
struct semid_ds buf;
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
return ACR_EINVAL;
}
buf.sem_perm.uid = uid;
@@ -441,10 +455,12 @@
if (sem_close(m->sem) < 0)
rc = ACR_GET_OS_ERROR();
}
+ else
+ rc = ACR_EBADF;
free(m);
return rc;
}
- return ACR_EBADF;
+ return ACR_EFTYPE;
}
ACR_DECLARE(int) ACR_ProcMutexCreate(JNIEnv *_E, const acr_pchar_t *name)
@@ -550,9 +566,11 @@
int rc;
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
- ACR_SET_OS_ERROR(ACR_EINVAL);
- return -1;
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
+ return ACR_EINVAL;
}
do {
rc = sem_wait(m->sem);
@@ -570,7 +588,10 @@
int rc;
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
return ACR_EINVAL;
}
do {
@@ -592,7 +613,10 @@
int rc;
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
return ACR_EINVAL;
}
@@ -612,7 +636,10 @@
{
acr_pmutex_t *m = (acr_pmutex_t *)ACR_IOH(mutex);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ if (ACR_IOH_TYPE(mutex) != ACR_DT_MUTEX) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(m)) {
return ACR_EINVAL;
}
return ACR_ENOTIMPL;
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c?rev=806808&r1=806807&r2=806808&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/psema.c Sat Aug 22 08:20:47 2009
@@ -69,10 +69,12 @@
if (sem_close(s->sem) < 0)
rc = ACR_GET_OS_ERROR();
}
+ else
+ rc = ACR_EBADF;
free(s);
return rc;
}
- return ACR_EBADF;
+ return ACR_EFTYPE;
}
ACR_DECLARE(int) ACR_SemaphoreCreate(JNIEnv *_E, const acr_pchar_t *name,
@@ -205,8 +207,11 @@
{
acr_semaphore_t *s = (acr_semaphore_t *)ACR_IOH(sema);
- if (IS_INVALID_HANDLE(s) || ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
- return ACR_EINVAL;
+ if (ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(s)) {
+ return ACR_EBADF;
}
return ACR_ENOTIMPL;
}
@@ -216,8 +221,11 @@
int rc = 0;
acr_semaphore_t *s = (acr_semaphore_t *)ACR_IOH(sema);
- if (IS_INVALID_HANDLE(s) || ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
- return ACR_EINVAL;
+ if (ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(s)) {
+ return ACR_EBADF;
}
do {
@@ -236,8 +244,11 @@
int rc = 0;
acr_semaphore_t *s = (acr_semaphore_t *)ACR_IOH(sema);
- if (IS_INVALID_HANDLE(s) || ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
- return ACR_EINVAL;
+ if (ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(s)) {
+ return ACR_EBADF;
}
do {
@@ -259,8 +270,11 @@
int rc = 0;
acr_semaphore_t *s = (acr_semaphore_t *)ACR_IOH(sema);
- if (IS_INVALID_HANDLE(s) || ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
- return ACR_EINVAL;
+ if (ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(s)) {
+ return ACR_EBADF;
}
s->locked = 0;
@@ -289,7 +303,10 @@
int rc = 0;
acr_semaphore_t *s = (acr_semaphore_t *)ACR_IOH(sema);
- if (IS_INVALID_HANDLE(s) || ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
+ if (ACR_IOH_TYPE(sema) != ACR_DT_SEMAPHORE) {
+ return ACR_EFTYPE;
+ }
+ if (IS_INVALID_HANDLE(s)) {
return ACR_EINVAL;
}
Modified: commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c?rev=806808&r1=806807&r2=806808&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/unix/pshm.c Sat Aug 22 08:20:47 2009
@@ -75,7 +75,7 @@
acr_shm_t *m = (acr_shm_t *)shm;
if (type != ACR_DT_SHM) {
- return ACR_EINVAL;
+ return ACR_EFTYPE;
}
/* Anonymous shared memory or
* we are calling this from forked child.
@@ -97,12 +97,9 @@
}
if (shmdt(m->base) == -1) {
rc = ACR_GET_OS_ERROR();
- goto finally;
- }
- if (access(m->filename, F_OK)) {
- rc = ACR_SUCCESS;
}
- else {
+ if (!access(m->filename, F_OK)) {
+ /* Remove existing file */
if (unlink(m->filename))
rc = ACR_GET_OS_ERROR();
}
@@ -119,7 +116,7 @@
acr_shm_t *m = (acr_shm_t *)shm;
if (type != ACR_DT_SHM) {
- return ACR_EINVAL;
+ return ACR_EFTYPE;
}
if (m->filename == NULL) {
@@ -140,16 +137,15 @@
ACR_DECLARE(int) ACR_ShmClose(JNIEnv *_E, int shm)
{
- int rv;
+ int rc;
- rv = acr_ioh_close(shm);
- if (rv && IS_VALID_HANDLE(_E)) {
- if (rv == EACCES)
- ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ESECURITY, 0);
- else
- ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EIO, rv);
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EFTYPE);
+ return ACR_EFTYPE;
}
- return rv;
+ rc = acr_ioh_close(shm);
+ ACR_THROW_IO_IF_ERR(rc);
+ return rc;
}
ACR_DECLARE(int) ACR_ShmRemove(JNIEnv *_E, const acr_pchar_t *filename)
@@ -407,8 +403,12 @@
int rc = 0;
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
- rc = ACR_EINVAL;
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ rc = ACR_EFTYPE;
+ goto finally;
+ }
+ if (IS_INVALID_HANDLE(m)) {
+ rc = ACR_EBADF;
goto finally;
}
x_free((void *)(m->filename));
@@ -429,8 +429,12 @@
int shmid;
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
- rc = ACR_EINVAL;
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ rc = ACR_EFTYPE;
+ goto finally;
+ }
+ if (IS_INVALID_HANDLE(m)) {
+ rc = ACR_EBADF;
goto finally;
}
if ((shmid = shmget(m->shmkey, 0, SHM_R | SHM_W)) == -1) {
@@ -454,8 +458,12 @@
{
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
- ACR_SET_OS_ERROR(ACR_EINVAL);
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ ACR_SET_OS_ERROR(ACR_EFTYPE);
+ return NULL;
+ }
+ else if (IS_INVALID_HANDLE(m)) {
+ ACR_SET_OS_ERROR(ACR_EBADF);
return NULL;
}
else
@@ -465,8 +473,12 @@
ACR_DECLARE(acr_size_t) ACR_ShmGetSize(int shm)
{
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
- ACR_SET_OS_ERROR(ACR_EINVAL);
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ ACR_SET_OS_ERROR(ACR_EFTYPE);
+ return 0;
+ }
+ else if (IS_INVALID_HANDLE(m)) {
+ ACR_SET_OS_ERROR(ACR_EBADF);
return 0;
}
else
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/dso.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/dso.c?rev=806808&r1=806807&r2=806808&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/dso.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/dso.c Sat Aug 22 08:20:47 2009
@@ -77,7 +77,7 @@
if (ACR_IOH_TYPE(dso) != ACR_DT_DSO) {
ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EFTYPE);
- return ACR_EINVAL;
+ return ACR_EFTYPE;
}
rc = acr_ioh_close(dso);
ACR_THROW_IO_IF_ERR(rc);
@@ -89,8 +89,12 @@
int rc;
void *handle = ACR_IOH(dso);
- if (IS_INVALID_HANDLE(handle) || ACR_IOH_TYPE(dso) != ACR_DT_DSO) {
- ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EINVAL);
+ if (ACR_IOH_TYPE(dso) != ACR_DT_DSO) {
+ ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EFTYPE);
+ return NULL;
+ }
+ else if (IS_INVALID_HANDLE(handle)) {
+ ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EBADF);
return NULL;
}
else {
Modified: commons/sandbox/runtime/trunk/src/main/native/os/win32/pshm.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/os/win32/pshm.c?rev=806808&r1=806807&r2=806808&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/os/win32/pshm.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/os/win32/pshm.c Sat Aug 22 08:20:47 2009
@@ -62,7 +62,7 @@
acr_shm_t *m = (acr_shm_t *)shm;
if (type != ACR_DT_SHM) {
- return ACR_EBADF;
+ return ACR_EFTYPE;
}
if (m->memblk && !UnmapViewOfFile(m->memblk)) {
rc = ACR_GET_OS_ERROR();
@@ -87,6 +87,10 @@
{
int rv;
+ if (ACR_IOH_TYPE(dso) != ACR_DT_SHM) {
+ ACR_THROW_EX_IF_ERR(ACR_EX_EINVAL, ACR_EFTYPE);
+ return ACR_EINVAL;
+ }
rv = acr_ioh_close(shm);
ACR_THROW_IO_IF_ERR(rv);
return rv;
@@ -311,7 +315,11 @@
int rc;
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ rc = ACR_EFTYPE;
+ goto finally;
+ }
+ if (IS_INVALID_HANDLE(m)) {
rc = ACR_EINVAL;
goto finally;
}
@@ -331,7 +339,11 @@
int rc = 0;
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ rc = ACR_EFTYPE;
+ goto finally;
+ }
+ if (IS_INVALID_HANDLE(m)) {
rc = ACR_EINVAL;
goto finally;
}
@@ -345,7 +357,11 @@
{
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ ACR_SET_OS_ERROR(ACR_EFTYPE);
+ return NULL;
+ }
+ else if (IS_INVALID_HANDLE(m)) {
ACR_SET_OS_ERROR(ACR_EINVAL);
return NULL;
}
@@ -356,7 +372,11 @@
ACR_DECLARE(acr_size_t) ACR_ShmGetSize(int shm)
{
acr_shm_t *m = (acr_shm_t *)ACR_IOH(shm);
- if (IS_INVALID_HANDLE(m) || ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ if (ACR_IOH_TYPE(shm) != ACR_DT_SHM) {
+ ACR_SET_OS_ERROR(ACR_EFTYPE);
+ return 0;
+ }
+ else if (IS_INVALID_HANDLE(m)) {
ACR_SET_OS_ERROR(ACR_EINVAL);
return 0;
}