diff restartOp.c @ 0:e70ea46d6073

Initial import from http://wouhanegaine.free.fr/dev/DSPad02b_neo07.zip
author Emmanuel Gil Peyrot <linkmauve@linkmauve.fr>
date Sun, 22 Feb 2015 01:38:06 +0100
parents
children f362b20de51e
line wrap: on
line diff
new file mode 100644
--- /dev/null
+++ b/restartOp.c
@@ -0,0 +1,270 @@
+/*
+    Signal interruptible fonctions handlers
+*/
+
+#include <sys/types.h>
+#include <unistd.h>
+#include <sys/wait.h>
+#include <sys/ipc.h>
+#include <sys/sem.h>
+#include <sys/msg.h>
+#include <errno.h>
+
+#include "restartOp.h"
+
+/********************************************************/
+/*                        fork                          */
+/********************************************************/
+pid_t fork_rs(void){
+    pid_t result;
+
+    do{
+        result = fork();
+    }while((result == -1) && (errno == EAGAIN));
+
+    return result;
+}
+
+/********************************************************/
+/*                   wait, waitpid                      */
+/********************************************************/
+/*
+pid_t wait_rs(int *status)
+{
+ pid_t endPid;
+
+ do {
+      endPid=wait(status);
+ } while ((endPid==-1) && (errno==EINTR));
+ 
+ return endPid;
+}
+*/
+/*
+pid_t waitpid_rs(pid_t pid, int *status, int options)
+{
+ pid_t endPid;
+
+ do {
+      endPid=waitpid(pid,status,options);
+ } while ((endPid==-1) && (errno==EINTR));
+ 
+ return endPid;
+}
+*/
+
+/********************************************************/
+/*                         sleep                        */
+/********************************************************/
+ 
+unsigned int sleep_rs(unsigned int seconds)
+{
+ int nbSecondsElapsed = 0;
+ 
+ do {
+ 
+     seconds = seconds -  nbSecondsElapsed;
+ 
+     nbSecondsElapsed = sleep(seconds);
+ 
+ } while (nbSecondsElapsed!=0);
+ 
+ return 0;       //  Zero  if  the requested time has elapsed
+}
+
+
+/********************************************************/
+/*                   read, write, close                 */
+/********************************************************/
+/*
+ssize_t read_rs(int fd, void *buf, size_t len)
+{
+ ssize_t returnValue = 0;
+
+ do {
+      returnValue = read(fd,buf,len);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+/*
+ssize_t write_rs(int fd, const void *buf, size_t count)
+{
+ ssize_t returnValue = 0;
+
+ do {
+      returnValue = write(fd,buf,count);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+/*
+int     close_rs(int fd)
+{
+ int returnValue = 0;
+
+ do {
+      returnValue = close(fd);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+
+/********************************************************/
+/*                        dup, dup2                     */
+/********************************************************/
+/*
+int dup_rs(int oldfd)
+{
+ int returnValue = 0;
+
+ do {
+      returnValue = dup(oldfd);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+/*
+int dup2_rs(int oldfd, int newfd)
+{
+ int returnValue = 0;
+
+ do {
+      returnValue = dup2(oldfd,newfd);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+
+/********************************************************/
+/*                        semop                         */
+/********************************************************/
+/*
+int semop_rs(int semid, struct sembuf *sops,unsigned nsops)
+{
+ int returnValue = 0;
+
+ do {
+      returnValue = semop(semid,sops,nsops);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+
+/********************************************************/
+/*                      msgsnd, msgrcv                  */
+/********************************************************/
+/* 
+int msgsnd_rs(int msqid, void *msgp, int msgsz, int msgflg)
+{
+ int returnValue = 0;
+
+ do {
+      returnValue = msgsnd(msqid,msgp,msgsz,msgflg);
+ } while ((returnValue==-1) && (errno==EINTR)); 
+ 
+ return returnValue;
+}
+*/
+/*
+int msgrcv_rs(int msqid, void *msgp, int msgsz,long msgtyp,int msgflg)
+{
+ int returnValue = 0;
+
+ do {
+      returnValue = msgrcv(msqid,msgp,msgsz,msgtyp,msgflg);
+ } while ((returnValue==-1) && (errno==EINTR)); 
+ 
+ return returnValue;
+}
+*/
+
+/********************************************************/
+/*                     connect, accept                  */
+/********************************************************/
+/*
+int connect_rs(int sockfd, struct sockaddr *serv_addr, socklen_t addrlen)
+{
+  int returnValue = 0;
+
+  do {
+      returnValue = connect(sockfd,serv_addr,addrlen);
+  } while ((returnValue==-1) && (errno==EINTR));
+
+  return returnValue;
+}
+*/
+/*
+int accept_rs(int sockfd, struct sockaddr *addr, socklen_t *addrlen)
+{
+ int returnValue  = 0;
+ int addrlenSaved = *addrlen;
+
+ do {
+      *addrlen = addrlenSaved;
+      returnValue = accept(sockfd,addr,addrlen);
+  } while ((returnValue==-1) && (errno==EINTR));
+
+  return returnValue;
+}
+*/
+
+/********************************************************/
+/*      recv, send  (TCP ou UDP avec pseudo-connexions) */
+/********************************************************/
+/*
+ssize_t recv_rs(int sockfd, void *buf, size_t len, int flags)
+{
+ int returnValue = 0;
+
+ do {
+     returnValue = recv(sockfd,buf,len,flags);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+/*
+ssize_t send_rs(int sockfd, const void *buf, size_t count, int flags)
+{
+ int returnValue = 0;
+
+ do {
+     returnValue = send(sockfd,buf,count,flags);
+ } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/
+
+/********************************************************/
+/*               recvfrom, sendto  (UDP)                */
+/********************************************************/
+
+ssize_t recvfrom_rs(int sockfd, void *buf, size_t len, int flags, struct sockaddr *from, socklen_t *fromlen){
+    ssize_t returnValue = 0;
+    do{
+        returnValue = recvfrom(sockfd, buf, len, flags, from, fromlen);
+    }while( (returnValue == -1) && (errno == EINTR) );
+
+    return returnValue;
+}
+
+/*
+ssize_t sendto_rs(int sockfd, const void *msg, size_t count, int flags,
+                  const struct sockaddr *to, socklen_t tolen)
+{
+ ssize_t returnValue = 0;
+ do {
+      returnValue = sendto(sockfd,msg,count,flags,to,tolen);
+  } while ((returnValue==-1) && (errno==EINTR));
+
+ return returnValue;
+}
+*/