X-Git-Url: http://git.maemo.org/git/?p=cilux;a=blobdiff_plain;f=src%2Fplatform%2Flinux%2Fosapi.c;fp=src%2Fplatform%2Flinux%2Fosapi.c;h=0000000000000000000000000000000000000000;hp=96d64b755997c6ca5fcc8b1ffc10e1e3bc846aa8;hb=6f258011f97dc65ad949b27928414b73bd07edde;hpb=3498ec2cf558af1a2f7b9138e2f80de58a5b1ff4 diff --git a/src/platform/linux/osapi.c b/src/platform/linux/osapi.c deleted file mode 100644 index 96d64b7..0000000 --- a/src/platform/linux/osapi.c +++ /dev/null @@ -1,275 +0,0 @@ - -/* -------------------------------------------------------------------------- */ - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -/* -------------------------------------------------------------------------- */ - -static fd_set rd_fd_set; -static fd_set wr_fd_set; -static fd_set ex_fd_set; - -/* -------------------------------------------------------------------------- */ - -static void signal_terminate(int); -static void signal_alarm(int); -static void signal_other(int); -static void set_timeval_ms(struct timeval* t, int ms); - -/* -------------------------------------------------------------------------- */ - -void init_thread(void) -{ - signal(SIGTERM, signal_terminate); - signal(SIGINT, signal_terminate); - signal(SIGQUIT, signal_terminate); - signal(SIGALRM, signal_alarm); - signal(SIGPIPE, signal_other); - signal(SIGCHLD, SIG_IGN); - signal(SIGHUP, SIG_IGN); - signal(SIGUSR1, SIG_IGN); - signal(SIGUSR2, SIG_IGN); -} - -void init_gl(void) -{ -} - -void init_net(void) -{ - FD_ZERO(&rd_fd_set); - FD_ZERO(&wr_fd_set); - FD_ZERO(&ex_fd_set); -} - -/* -------------------------------------------------------------------------- */ - -OTHER_THREAD void signal_terminate(int signum) -{ - c_running(0); -} - -OTHER_THREAD void signal_alarm(int signum) -{ - c_signal(signum); -} - -OTHER_THREAD void signal_other(int signum) -{ - c_signal(signum); -} - -/* -------------------------------------------------------------------------- */ - -void set_callback(k_channel* chan, int rdwr) -{ - if(rdwr & SETCB_RD) FD_SET(chan->priv->SOCK, &rd_fd_set); - if(rdwr & SETCB_WR) FD_SET(chan->priv->SOCK, &wr_fd_set); -} - -void un_set_callback(k_channel* chan, int rdwr) -{ - if(rdwr & SETCB_RD) FD_CLR(chan->priv->SOCK, &rd_fd_set); - if(rdwr & SETCB_WR) FD_CLR(chan->priv->SOCK, &wr_fd_set); -} - -void poller(int no_block) -{ - fd_set rd=rd_fd_set; - fd_set wr=wr_fd_set; - fd_set ex=ex_fd_set; - - k_channel* chan; - - int highest=0; - for(chan=k_channels; chan; chan=chan->next){ - if(chan->priv->state==CHAN_CLOSE) continue; - if(highest < chan->priv->SOCK) highest=chan->priv->SOCK; - } - - struct timeval t; - struct timeval* tp=&t; - set_timeval_ms(tp, no_block? 0: LOOP_TICK); - - if(highest==0){ - select(0, 0, 0, 0, tp); - next_keys(); - if(!no_block) do_regular_things(); - return; - } - - int len=select(highest+1, &rd, &wr, &ex, tp); - GETERRNO(len); - - next_keys(); - - if(len==0){ - do_regular_things(); - return; - } - if(len== -1){ - if(ERRNO==INTERRUPTED) return; - log_net_err("select", ERRNO); - sleep(1); - do_regular_things(); - return; - } - - for(chan=k_channels; chan; chan=chan->next){ - if(FD_ISSET(chan->priv->SOCK, &ex)){ - exception_socket(chan); - continue; - } - if(FD_ISSET(chan->priv->SOCK, &wr)){ - int err; socklen_t len=sizeof(int); - if(getsockopt(chan->priv->SOCK, - SOL_SOCKET, - SO_ERROR, &err, &len) || err){ - exception_socket(chan); - continue; - } - else{ - writeable_socket(chan); - } - } - if(FD_ISSET(chan->priv->SOCK, &rd)){ - readable_socket(chan); - } - } -} - -void set_timeval_ms(struct timeval* t, int ms) -{ - t->tv_sec=ms/1000; - t->tv_usec=(ms-(t->tv_sec)*1000)*1000; -} - -char* str_error(int e) -{ - return strerror(e); -} - -/* -------------------------------------------------------------------------- */ - -void stat_only(char* fullname, k_stat* kstat) -{ - kstat->type=0; - struct stat s; - if(stat(fullname, &s)) return; - kstat->type=s.st_mode & 0170000; - kstat->size=s.st_size; - kstat->time=s.st_mtime; - kstat->perm=s.st_mode & 0007777; -} - -FILE_T stat_open(char* fullname, k_stat* kstat) -{ - stat_only(fullname, kstat); - if(!kstat->type) return 0; - FILE_T filehandle=open(fullname, O_RDONLY); - if(filehandle<0) return 0; - return filehandle; -} - -FILE_T open_only(char* fullname, int wr) -{ - int rw=wr? O_RDWR|O_CREAT|O_TRUNC: O_RDONLY; - FILE_T filehandle=open(fullname, rw, 0644); - if(filehandle<0) return 0; - return filehandle; -} - -void* mmap_malloc(void* s, size_t size, int prot, int f, char* fullname, int o) -{ - FILE_T fh=open(fullname, O_RDONLY, 0644); - if(fh<0) return MAP_FAILED; - - char* data=k_malloc(size); - int charsread=0; - int len; - do{ - len=read(fh, data+charsread, size-charsread); - if(len< 0 && FERRNO(len)==EINTR) continue; - if(len<=0) break; - charsread+=len; - } while(charsread