Changeset 8 for trunk/src/slib.c


Ignore:
Timestamp:
Dec 31, 2005, 2:02:03 PM (19 years ago)
Author:
rainer
Message:

minor optimisations for speed

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/slib.c

    r5 r8  
    566566void *sl_memset(void *s, int c, size_t n)
    567567{
    568   size_t i;
    569   volatile char *p = s;
    570 
    571   if (s == NULL || n <= 0)
    572     return s;
    573  
    574   for (i = 0; i < n; ++i)
    575     p[i] = (char) c;
     568  volatile char *p = (char *) s;
     569
     570  if (s != NULL)
     571    {
     572      while (n--)
     573        *p++ = c;
     574    }
    576575  return s;
    577576}
     
    16731672      fd = aud_open_noatime (FIL__, __LINE__, priv, filename,
    16741673                             O_RDONLY|O_NONBLOCK, 0, &o_noatime);
     1674      /*
    16751675      if (fd >= 0) {
    16761676        sflags = retry_fcntl(FIL__, __LINE__, fd, F_GETFL, 0);
    16771677        retry_fcntl(FIL__, __LINE__, fd, F_SETFL, sflags & ~O_NONBLOCK);
    16781678      }
     1679      */
    16791680      if (fd < 0)
    16801681        SL_IRETURN(SL_EBADFILE, _("sl_open_file"));
     
    20812082}
    20822083
     2084int sl_read_timeout_prep (SL_TICKET ticket)
     2085{
     2086  int fd;
     2087  int sflags;
     2088
     2089  SL_ENTER(_("sl_read_timeout_prep"));
     2090
     2091  if (SL_ISERROR(fd = get_the_fd(ticket)))
     2092    {
     2093      TPT(( 0, FIL__, __LINE__, _("msg=<ticket error> errno=<%d>"), fd));
     2094      SL_IRETURN(fd, _("sl_read_timeout_prep"));
     2095    }
     2096
     2097  /* set to non-blocking mode
     2098   */
     2099  sflags = retry_fcntl(FIL__, __LINE__, fd, F_GETFL, 0);
     2100  retry_fcntl(FIL__, __LINE__, fd, F_SETFL, sflags | O_NONBLOCK);
     2101
     2102  SL_IRETURN(SL_ENONE, _("sl_read_timeout_prep"));
     2103}
     2104 
    20832105
    20842106int sl_read_timeout (SL_TICKET ticket, void * buf_in, size_t count,
     
    20872109  fd_set readfds;
    20882110  struct timeval tv;
    2089   int sflags;
     2111  /* int sflags; */
    20902112  int retval;
    20912113
     
    21002122  extern volatile int sig_termfast;
    21012123 
    2102   if (count < 1)
    2103     {
    2104       TPT(( 0, FIL__, __LINE__, _("msg=<range error>")));
    2105       return(SL_ERANGE);
    2106     }
    2107   if (buf_in == NULL)
    2108     {
    2109       TPT(( 0, FIL__, __LINE__, _("msg=<null buffer>")));
    2110       return (SL_ENULL);
    2111     }
    2112 
    2113   if (SL_ISERROR(fd = get_the_fd(ticket)))
    2114     {
    2115       TPT(( 0, FIL__, __LINE__, _("msg=<ticket error> errno=<%d>"), fd));
    2116       return (fd);
     2124  if (buf_in == NULL || SL_ISERROR(fd = get_the_fd(ticket)))
     2125    {
     2126      if (buf_in == NULL)
     2127        {
     2128          TPT(( 0, FIL__, __LINE__, _("msg=<null buffer>")));
     2129          return (SL_ENULL);
     2130        }
     2131      if (SL_ISERROR(fd = get_the_fd(ticket)))
     2132        {
     2133          TPT(( 0, FIL__, __LINE__, _("msg=<ticket error> errno=<%d>"), fd));
     2134          return (fd);
     2135        }
    21172136    }
    21182137
    21192138  buf = (char *) buf_in;
    2120 
    2121   /* set to non-blocking mode
    2122    */
    2123   sflags = retry_fcntl(FIL__, __LINE__, fd, F_GETFL, 0);
    2124   retry_fcntl(FIL__, __LINE__, fd, F_SETFL, sflags | O_NONBLOCK);
    21252139
    21262140  tstart = time(NULL);
     
    21292143  while (count > 0)
    21302144    {
    2131 
    2132       if (sig_termfast == 1)
    2133         {
    2134           retry_fcntl(FIL__, __LINE__, fd, F_SETFL,
    2135                       sflags & ~O_NONBLOCK);
    2136           return (SL_EREAD);
    2137         }
    2138          
    21392145      FD_ZERO(&readfds);
    21402146      FD_SET(fd, &readfds);
    2141 
    2142       if (tdiff >= timeout)
    2143         {
    2144           retry_fcntl(FIL__, __LINE__, fd, F_SETFL,
    2145                       sflags & ~O_NONBLOCK);
    2146           return (SL_TIMEOUT);
    2147         }
    2148 
    2149       /*
    2150       tnow  = time(NULL);
    2151       tdiff = tnow - tstart;
    2152       */
    21532147
    21542148      tv.tv_sec  = timeout - tdiff;
     
    21602154        {
    21612155          byteread = read (fd, buf, count);
    2162           if (byteread != -1 && byteread != 0)
     2156
     2157          if (byteread > 0)
    21632158            {
    21642159              bytes += byteread; count -= byteread;
     
    21822177              else
    21832178                {
    2184                   retry_fcntl(FIL__, __LINE__, fd, F_SETFL,
    2185                               sflags & ~O_NONBLOCK);
    21862179                  return (SL_EREAD);
    21872180                }
     
    21972190      else if (retval == 0)
    21982191        {
    2199           retry_fcntl(FIL__, __LINE__, fd, F_SETFL,
    2200                       sflags & ~O_NONBLOCK);
    22012192          return (SL_TIMEOUT);
    22022193        }
    22032194      else
    22042195        {
    2205           retry_fcntl(FIL__, __LINE__, fd, F_SETFL,
    2206                       sflags & ~O_NONBLOCK);
    22072196          return (SL_EREAD);
    22082197        }
     2198
     2199      if (sig_termfast == 1)
     2200        {
     2201          return (SL_EREAD);
     2202        }
     2203         
    22092204      tnow  = time(NULL);
    22102205      tdiff = tnow - tstart;
    2211     }
    2212 
    2213   retry_fcntl(FIL__, __LINE__, fd, F_SETFL, sflags & ~O_NONBLOCK);
     2206
     2207      if (tdiff > timeout)
     2208        {
     2209          return (SL_TIMEOUT);
     2210        }
     2211    }
     2212
    22142213  return ((int) bytes);
    22152214}
Note: See TracChangeset for help on using the changeset viewer.