All pastes #160730 Raw Edit

Diff

public text v1 · immutable
·published 2006-09-04 17:32 UTC
rendered paste body
*** eb-4.2.2/eb/zio.c	Thu Nov 24 00:31:56 2005--- eb-4.2.2-new/eb/zio.c	Thu May 18 22:31:28 2006****************** 39,44 ****--- 39,213 ----  #include <unistd.h>  #include <fcntl.h>  + /* ======================= for Zaurus ======================== */+ #define ZAURUS+ #ifdef ZAURUS+ #include <signal.h>+ #include <sys/time.h>+ #define ZAU_MAX_OPEN 1024+ + int zau_use_itimer=1;+ int zau_opened=0;+ int zau_temporary_close_all(void);+ void (*zau_open_trig)() = NULL;+ void zau_get_zio_status(char *buf,int fd);+ + static int zau_n_files = 0;+ static int zau_fd[ZAU_MAX_OPEN+1];+ static char *zau_fname[ZAU_MAX_OPEN+1];+ static int zau_flags[ZAU_MAX_OPEN+1];+ static off_t zau_pos[ZAU_MAX_OPEN+1];+ + static int zau_open(const char *pathname, int flags);+ static int zau_close(int fd);+ static ssize_t zau_read(int fd, void *buf, size_t count);+ + static int zau_reopen(int fd);+ + static void settimer(int sec, int usec) {+   if (zau_use_itimer) {+     struct itimerval itv;+     itv.it_interval.tv_sec=0;+     itv.it_interval.tv_usec=0;+     itv.it_value.tv_sec=sec;+     itv.it_value.tv_usec=usec;+     setitimer(ITIMER_REAL, &itv, NULL);+   }+ }+ + static void sigvtalrm(int x) {+   settimer(0,0);+   zau_temporary_close_all();+ }+ + static void sigalrm(int x) {+   settimer(0,0);+   zau_temporary_close_all();+ }+ + static int zau_initialize_library(void) {+   if (zau_use_itimer) {+     signal(SIGVTALRM, sigvtalrm);+     signal(SIGALRM, sigalrm);+   }+   zau_n_files=1;+ }+ + void zau_get_zio_status(char *buf, int fd) {+   /* Buffer size must be larger than 1024 */+   *buf=0;+   if (fd==0) {+     int count=0,count2=0,i;+     for(i=1;i<zau_n_files;i++){+       if (zau_fd[i]>0) count++;+       if (zau_fd[i]==-10) count2++;+     }+     sprintf(buf,"Inactive=%d, Access=%d, Total=%d\n",+ 	    count2, count, count+count2);+   } else if (zau_fd[fd]>0 || zau_fd[fd]==-10) {+     if (zau_fname[fd]!=NULL) {+       sprintf(buf,"%4d : %s\n", fd,zau_fname[fd]);+     } else {+       sprintf(buf,"%4d : %s\n", "----");+     }+   }+   return;+ }+ + static int zau_open(const char *pathname, int flags) {+   int i, fd;+   fd = -1;+   if (pathname==NULL) return -1;+    for(i=1;i<zau_n_files;i++) {+     if (zau_fd[i]==-1) {+       fd=i;+       break;+     }+   }+   if (fd<0) {+     fd = zau_n_files ++;+   }+   i = open(pathname,flags);+   zau_fd[fd]=i;+   if (i>=0) {+     zau_fname[fd]=strdup(pathname);+     zau_flags[fd]=flags;+   }+ +   settimer(1,0);+   zau_opened = 1;+   if (zau_open_trig != NULL) zau_open_trig();+   return fd;+ }+ + static int zau_close(int fd) {+   if (fd<=0 || fd>=zau_n_files) return -1;+   if (zau_fd[fd]>0) {+     close(zau_fd[fd]);+   }+   zau_fd[fd]=-1;+   if (zau_fname[fd]!=NULL) {+     free(zau_fname[fd]);+     zau_fname[fd]=NULL;+   }+   while(zau_n_files>1 && zau_fd[zau_n_files-1]==-1) zau_n_files--;+   return 0;+ }+ + static int zau_temporary_close(int fd) {+   if (fd<0 || fd>=zau_n_files) return -1;+   if (zau_fd[fd]>0) {+     zau_pos[fd]=lseek(zau_fd[fd], 0, SEEK_CUR);+     close(zau_fd[fd]);+     zau_fd[fd]=-10;+   }+   return zau_fd[fd];+ }+ + int zau_temporary_close_all(void) {+   int i;+   for(i=1; i<zau_n_files; i++) {+     zau_temporary_close(i);+   }+   zau_opened = 0;+   sync();+ }+ + static int zau_reopen(int fd) {+   int i;+   if (fd<0 || fd>=zau_n_files) return -1;+   if (zau_fd[fd]==-10) {+     i=open(zau_fname[fd], zau_flags[fd]);+     zau_fd[fd]=i;+     if (i>=0) {+       lseek(i, zau_pos[i], SEEK_SET);+       zau_opened = 1;+       if (zau_open_trig != NULL) zau_open_trig();+       settimer(1, 0);+     }+   }+   return i;+ }+ + static int zau_read(int fd, void *buf, size_t count) {+   zau_reopen(fd);+   return read(zau_fd[fd], buf, count);+ }+ + static int zau_lseek(int fd, off_t offset, int whence) {+   zau_reopen(fd);+   return lseek(zau_fd[fd], offset, whence);+ }+ + #define open(a,b) zau_open(a,b)+ #define close(a) zau_close(a)+ #define read(a,b,c) zau_read(a,b,c)+ #define lseek(a,b,c) zau_lseek(a,b,c)+ + #endif+ /* ======================= for Zaurus ======================== */+ +   #ifdef ENABLE_PTHREAD  #include <pthread.h>  #endif