Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com Date: Wed, 13 Nov 2002 09:09:46 -0500 From: Jason Tishler Subject: cygipc ENOSYS patch (was Re: cygipc-1.13pre1) In-reply-to: <3DD15A2D.6050705@ece.gatech.edu> To: Charles Wilson Cc: Cygwin Mail-followup-to: Charles Wilson , Cygwin Message-id: <20021113140946.GA276@tishler.net> MIME-version: 1.0 Content-type: multipart/mixed; boundary="Boundary_(ID_MitNpVwREG1o4iRwd95MfQ)" User-Agent: Mutt/1.4i References: <3DD15A2D DOT 6050705 AT ece DOT gatech DOT edu> --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ) Content-type: text/plain; charset=us-ascii Content-transfer-encoding: 7BIT Content-disposition: inline Chuck, On Tue, Nov 12, 2002 at 02:44:45PM -0500, Charles Wilson wrote: > The attached src tarball contains cygipc-1.13pre1. It has been > reverted to the 32bit key_t treatment (e.g. pre-1.12), but other > improvements in 1.12 remain. Please generate your ENOSYS patches -- > if there are more beyond has been posted on the list -- against this. > That'll make my job easier. My patch (against cygipc-1.13pre1) changes the following cygipc functions to return ENOSYS instead of EACCES if ipc-daemon is not running: msgctl() msgget() msgrcv() msgsnd() semctl() semget() semop() shmat() shmctl() shmget() shmdt() Since I could only (easily) test semget() and shmget() under PostgreSQL, I decided to write a simply test program, cygtest.cc, to exercise all of my cygipc changes. Attached are the following files: o cygipc-1.13pre1.patch: ENOSYS patch o cygipc-1.13pre1.ChangeLog: corresponding ChangeLog entry o cygtest.cc: test program o cygtest.out: test program output before patch o cygtest2.out: test program output after patch Thanks, Jason -- PGP/GPG Key: http://www.tishler.net/jason/pubkey.asc or key servers Fingerprint: 7A73 1405 7F2B E669 C19D 8784 1AFD E4CC ECF4 8EF6 --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ) Content-type: text/plain; charset=us-ascii; NAME=cygipc-1.13pre1.patch Content-transfer-encoding: 7BIT Content-disposition: attachment; filename=cygipc-1.13pre1.patch diff -rup cygipc-1.13pre1.orig/msg.c cygipc-1.13pre1/msg.c --- cygipc-1.13pre1.orig/msg.c 2001-02-10 18:50:01.000000000 -0500 +++ cygipc-1.13pre1/msg.c 2002-11-13 07:44:19.000000000 -0500 @@ -168,8 +168,8 @@ static int findkey (key_t key) if (msg_connect() == 0) { -debug_printf("findkey : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("findkey : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } for (id = 0; id <= max_msqid; id++) { if (msgque[id] == IPC_UNUSED) @@ -212,8 +212,8 @@ debug_printf("msgsnd : return -EFAULT\n" LBloc = 0 ; if (msg_connect() == 0) { -debug_printf("msgsnd : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("msgsnd : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } id = (unsigned int) msqid % MSGMNI; @@ -251,8 +251,8 @@ slept: { if (msg_connect() == 0) { -debug_printf("msgsnd : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("msgsnd : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } } @@ -339,8 +339,8 @@ debug_printf("msgrcv : return -EFAULT\n" LBloc = 0 ; if (msg_connect() == 0) { -debug_printf("msgrcv : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("msgrcv : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } id = (unsigned int) msqid % MSGMNI; @@ -373,8 +373,8 @@ debug_printf("msgrcv : return -EIDRM\n") { if (msg_connect() == 0) { -debug_printf("msgrcv : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("msgrcv : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } } @@ -522,8 +522,8 @@ static int newque (key_t key, int msgflg debug_printf("newque : key=%X msgflg=%X\n",key,msgflg); if (msg_connect() == 0) { -debug_printf("newque : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("newque : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } for (id = 0; id < MSGMNI; id++) @@ -590,8 +590,8 @@ debug_printf("msgget : return -EEXIST\n" } if (msg_connect() == 0) { -debug_printf("newque : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("newque : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } msq = (struct msqid_ds *) @@ -655,8 +655,8 @@ debug_printf("msgctl : return -EINVAL\n" if (msg_connect() == 0) { -debug_printf("msgctl : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("msgctl : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } id = (unsigned int) msqid % MSGMNI; diff -rup cygipc-1.13pre1.orig/sem.c cygipc-1.13pre1/sem.c --- cygipc-1.13pre1.orig/sem.c 2001-11-26 18:41:32.000000000 -0500 +++ cygipc-1.13pre1/sem.c 2002-11-13 07:44:41.000000000 -0500 @@ -326,8 +326,8 @@ debug_printf("semget : return -EINVAL\n" if (sem_connect() == 0) { -debug_printf("semget : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("semget : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } if (key == IPC_PRIVATE) @@ -385,8 +385,8 @@ debug_printf("do_semop : sma=%p, sops=%p { if (sem_connect() == 0) { -debug_printf("do_semop : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("do_semop : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } shareadrsem->current_nb[id].current_nb[sop->sem_num] += sop->sem_op ; @@ -402,8 +402,8 @@ debug_printf("do_semop : return -EAGAIN\ } if (sem_connect() == 0) { -debug_printf("do_semop : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("do_semop : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } shareadrsem->current_nb[id].current_nb[sop->sem_num] += sop->sem_op; sem_deconnect() ; @@ -419,8 +419,8 @@ debug_printf("do_semop : return -EACCES\ if (sem_connect() == 0) { -debug_printf("do_semop : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("do_semop : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } shareadrsem->current_nb[id].current_nb[sop->sem_num] += sop->sem_op ; sem_deconnect() ; @@ -488,8 +488,8 @@ debug_printf("semctl : return -EINVAL\n" if (sem_connect() == 0) { -debug_printf("semctl : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("semctl : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } switch (cmd) { @@ -740,8 +740,8 @@ debug_printf("semop : return -EFAULT\n") if (sem_connect() == 0) { -debug_printf("semop : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("semop : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } sem_deconnect() ; diff -rup cygipc-1.13pre1.orig/shm.c cygipc-1.13pre1/shm.c --- cygipc-1.13pre1.orig/shm.c 2001-02-10 18:50:01.000000000 -0500 +++ cygipc-1.13pre1/shm.c 2002-11-13 07:45:50.000000000 -0500 @@ -262,8 +262,8 @@ int shmget (key_t key, int size, int shm debug_printf("shmget : key=%p size=%X shmflg=%X\n",key,size,shmflg); if (shm_connect() == 0) { -debug_printf("shmget : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("shmget : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } if (size < 0 ) @@ -344,8 +344,8 @@ debug_printf("shmctl : return -EINVAL\n" if (shm_connect() == 0) { -debug_printf("shmctl : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("shmctl : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } id = (unsigned int) shmid % SHMMNI; @@ -508,11 +508,11 @@ char *shmat (int shmid, char *shmaddr, i debug_printf("shmat : shmid=%X shmaddr=%p shmflag=%X\n",shmid,shmaddr,shmflg); if (shm_connect() == 0) { -debug_printf("shmat : return -EACCESS\n"); +debug_printf("shmat : return -ENOSYS\n"); #if SHMAT_LINUX - CYGWIN_IPCNT_RETURN (-EACCES) ; + CYGWIN_IPCNT_RETURN (-ENOSYS) ; #else - errno=EACCES; + errno=ENOSYS; return (char *)-1; #endif } @@ -614,8 +614,8 @@ debug_printf("shmdt : shmaddr=%p\n",shma if (shm_connect() == 0) { -debug_printf("shmdt : return -EACCES\n"); - CYGWIN_IPCNT_RETURN (-EACCES) ; +debug_printf("shmdt : return -ENOSYS\n"); + CYGWIN_IPCNT_RETURN (-ENOSYS) ; } for (LId = 0; LId < SHMMNI; LId++) --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ) Content-type: text/plain; charset=us-ascii; NAME=cygipc-1.13pre1.ChangeLog Content-transfer-encoding: 7BIT Content-disposition: attachment; filename=cygipc-1.13pre1.ChangeLog Wed Nov 13 08:46:17 2002 * msg.c (findkey): Return ENOSYS instead of EACCES if ipc-daemon is not running. (msgsnd): Ditto. (msgrcv): Ditto. (newque): Ditto. (msgget): Ditto. (msgctl): Ditto. * sem.c (semget): Ditto: (do_semop): Ditto. (semctl): Ditto. (semop): Ditto. * shm.c (shmget): Ditto: (shmctl): Ditto. (shmat): Ditto. (shmdt): Ditto. --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ) Content-type: text/plain; charset=us-ascii; NAME=cygtest.cc Content-transfer-encoding: 7BIT Content-disposition: attachment; filename=cygtest.cc #include #include #include #include #include #include #include #include void check(const char* name, int status); void check2(const char* name, const void* status); int main() { // Test msgctl int msqid = 0; int cmd = 0; struct msqid_ds buf2; int status = msgctl(msqid, cmd, &buf2); check("msgctl", status); // Test msgget key_t key = IPC_PRIVATE; int msgflg = 0; status = msgget(key, msgflg); check("msgget", status); // Test msgrcv struct msgbuf msgp; msgp.mtype = 1; size_t msgsz = 0; long msgtyp = 0; status = msgrcv(msqid, &msgp, msgsz, msgtyp, msgflg); check("msgrcv", status); // Test msgsnd status = msgsnd(msqid, &msgp, msgsz, msgflg); check("msgsnd", status); printf("\n"); // Test semctl int semid = 0; int semnum = 0; status = semctl(semid, semnum, cmd); check("semctl", status); // Test semget int nsems = 0; int semflg = 0; status = semget(key, nsems, semflg); check("semget", status); // Test semop struct sembuf sops; unsigned nsops = 1; status = semop(semid, &sops, nsops); check("semop", status); printf("\n"); // Test shmat int shmid = 0; char* shmaddr = 0; int shmflg = 0; void* status2 = shmat(shmid, shmaddr, shmflg); check2("shmat", status2); // Test shmctl struct shmid_ds buf; status = shmctl(shmid, cmd, &buf); check("shmctl", status); // Test shmget int size = 0; status = shmget(key, size, shmflg); check("shmget", status); // Test shmdt status = shmdt(shmaddr); check("shmdt", status); } void check(const char* name, int status) { if (status < 0) printf("%s() failed: %s (errno = %d)\n", name, strerror(errno), errno); } void check2(const char* name, const void* status) { if (status == (const void*) -1) printf("%s() failed: %s (errno = %d)\n", name, strerror(errno), errno); } --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ) Content-type: text/plain; charset=us-ascii; NAME=cygtest.out Content-transfer-encoding: 7BIT Content-disposition: attachment; filename=cygtest.out msgctl() failed: Permission denied (errno = 13) msgget() failed: Permission denied (errno = 13) msgrcv() failed: Permission denied (errno = 13) msgsnd() failed: Permission denied (errno = 13) semctl() failed: Permission denied (errno = 13) semget() failed: Permission denied (errno = 13) semop() failed: Permission denied (errno = 13) shmat() failed: Permission denied (errno = 13) shmctl() failed: Permission denied (errno = 13) shmget() failed: Permission denied (errno = 13) shmdt() failed: Permission denied (errno = 13) --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ) Content-type: text/plain; charset=us-ascii; NAME=cygtest2.out Content-transfer-encoding: 7BIT Content-disposition: attachment; filename=cygtest2.out msgctl() failed: Function not implemented (errno = 88) msgget() failed: Function not implemented (errno = 88) msgrcv() failed: Function not implemented (errno = 88) msgsnd() failed: Function not implemented (errno = 88) semctl() failed: Function not implemented (errno = 88) semget() failed: Function not implemented (errno = 88) semop() failed: Function not implemented (errno = 88) shmat() failed: Function not implemented (errno = 88) shmctl() failed: Function not implemented (errno = 88) shmget() failed: Function not implemented (errno = 88) shmdt() failed: Function not implemented (errno = 88) --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ) Content-Type: text/plain; charset=us-ascii -- Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple Bug reporting: http://cygwin.com/bugs.html Documentation: http://cygwin.com/docs.html FAQ: http://cygwin.com/faq/ --Boundary_(ID_MitNpVwREG1o4iRwd95MfQ)--