Changeset 248


Ignore:
Timestamp:
Jun 1, 2009, 11:25:53 AM (16 years ago)
Author:
Herwig Bauernfeind
Message:

Fixes for #69 and #71 (by diver) in 3.3 branch

Location:
branches/samba-3.3.x/source
Files:
1 deleted
2 edited

Legend:

Unmodified
Added
Removed
  • branches/samba-3.3.x/source/lib/system.c

    r221 r248  
    120120{
    121121        ssize_t ret;
    122         int fds, err = 0;
    123 
    124         int timeout=1000; /* Timeout for select */
    125122        do {
    126                 if (err == EAGAIN && timeout != 0) {
    127                         fds = fd;
    128                         ret = os2_select(&fds, 1, 0, 0, timeout);
    129                         if (ret != 1) {
    130                                 err = errno;
    131                                 DEBUG(5,("sys_read: select ret: %d,%s\n", ret, strerror(errno))); \
    132                                 if (ret == 0) {
    133                                         err = errno = EAGAIN;
    134                                         ret = -1;
    135                                         continue;
    136                                 }
    137                                 if (err == EINTR)
    138                                         continue;
    139                                 return -1;
    140                         }
    141                 }
    142          /*     ret = read(fd, buf, count); */
    143                 ret = recv(fd, buf, count,0);
    144                 err = errno;
    145         } while (ret == -1 && (errno == EINTR  || (errno == EAGAIN && timeout != 0)));
    146         return ret;
    147 }
     123                ret = read(fd, buf, count);
     124        } while (ret == -1 && errno == EINTR);
     125        return ret;
     126}
     127
    148128/*******************************************************************
    149129A write wrapper that will deal with EINTR.
    150130********************************************************************/
    151  
    152131ssize_t sys_write(int fd, const void *buf, size_t count)
    153132{
    154133        ssize_t ret;
    155         int fds, err = 0;
    156 
    157         int timeout=1000; /* Timeout for select */
    158134        do {
    159                 if (err == EAGAIN && timeout != 0) {
    160                         fds = fd;
    161                         ret = os2_select(&fds, 0, 1, 0, timeout);
    162                         if (ret != 1) {
    163                                 err = errno;
    164                                 DEBUG(5,("sys_write: select ret: %d,%s\n", ret, strerror(errno))); \
    165                                 if (ret == 0) {
    166                                         err = errno = EAGAIN;
    167                                         ret = -1;
    168                                         continue;
    169                                 }
    170                                 if (err == EINTR)
    171                                         continue;
    172                                 return -1;
    173                         }
    174                 }
    175          /* ret = write(fd, buf, count); */
    176                 ret = send(fd, buf, count,0);
    177                 err = errno;   
    178         } while (ret == -1 && (errno == EINTR || (errno == EAGAIN && timeout != 0)));
     135                ret = write(fd, buf, count);
     136        } while (ret == -1 && errno == EINTR);
    179137        return ret;
    180138}
     
    220178                ret = pread(fd, buf, count, off);
    221179#endif
    222 #ifndef __OS2__
    223180        } while (ret == -1 && errno == EINTR);
    224 #else
    225 /* On OS/2 - we randomly get 'Resource Temporarily Unavailable' errors - ignore these */
    226         } while (ret == -1 && ((errno == EINTR)||(errno == EAGAIN)));
    227 #endif
    228181        return ret;
    229182}
     
    245198                ret = pwrite(fd, buf, count, off);
    246199#endif
    247 #ifndef __OS2__
    248200        } while (ret == -1 && errno == EINTR);
    249 #else
    250 /* On OS/2 - we randomly get 'Resource Temporarily Unavailable' errors - ignore these */
    251         } while (ret == -1 && ((errno == EINTR)||(errno == EAGAIN)));
    252 #endif
    253201        return ret;
    254202}
     
    265213        do {
    266214                ret = send(s, msg, len, flags);
    267 #ifndef __OS2__
    268215        } while (ret == -1 && errno == EINTR);
    269 #else
    270 /* On OS/2 - we randomly get 'Resource Temporarily Unavailable' errors - ignore these */
    271         } while (ret == -1 && ((errno == EINTR)||(errno == EAGAIN)));
    272 #endif
    273216        return ret;
    274217}
     
    284227        do {
    285228                ret = sendto(s, msg, len, flags, to, tolen);
    286 #ifndef __OS2__
    287229        } while (ret == -1 && errno == EINTR);
    288 #else
    289 /* On OS/2 - we randomly get 'Resource Temporarily Unavailable' errors - ignore these */
    290         } while (ret == -1 && ((errno == EINTR)||(errno == EAGAIN)));
    291 #endif
    292230        return ret;
    293231}
     
    317255        do {
    318256                ret = recvfrom(s, buf, len, flags, from, fromlen);
    319 #ifndef __OS2__
    320257        } while (ret == -1 && errno == EINTR);
    321 #else
    322 /* On OS/2 - we randomly get 'Resource Temporarily Unavailable' errors - ignore these */
    323         } while (ret == -1 && ((errno == EINTR)||(errno == EAGAIN)));
    324 #endif
    325258        return ret;
    326259}
     
    336269        do {
    337270                ret = fcntl(fd, cmd, arg);
    338 #ifndef __OS2__
    339271        } while (ret == -1 && errno == EINTR);
    340 #else
    341 /* On OS/2 - we randomly get 'Resource Temporarily Unavailable' errors - ignore these */
    342         } while (ret == -1 && ((errno == EINTR)||(errno == EAGAIN)));
    343 #endif
    344272        return ret;
    345273}
     
    355283        do {
    356284                ret = fcntl(fd, cmd, arg);
    357 #ifndef __OS2__
    358285        } while (ret == -1 && errno == EINTR);
    359 #else
    360 /* On OS/2 - we randomly get 'Resource Temporarily Unavailable' errors - ignore these */
    361         } while (ret == -1 && ((errno == EINTR)||(errno == EAGAIN)));
    362 #endif
    363286        return ret;
    364287}
  • branches/samba-3.3.x/source/lib/util.c

    r206 r248  
    950950        if((val = sys_fcntl_long(fd, F_GETFL, 0)) == -1)
    951951                return -1;
     952#ifndef __OS2__
    952953        if(set) /* Turn blocking on - ie. clear nonblock flag */
    953954                val &= ~FLAG_TO_SET;
     
    955956                val |= FLAG_TO_SET;
    956957        return sys_fcntl_long( fd, F_SETFL, val);
     958#else
     959        if(set) /* turn blocking on - ie. clear nonblock flag */
     960                val = 0;
     961        else
     962                val = 1;
     963        return os2_ioctl(fd, FIONBIO, (char *) &val, sizeof(val));
     964#endif
     965
    957966#undef FLAG_TO_SET
    958967}
Note: See TracChangeset for help on using the changeset viewer.