Changeset 745 for trunk/server/source3/lib/system.c
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
-
. (modified) (1 prop)
-
source3/lib/system.c (modified) (18 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source3/lib/system.c
r590 r745 22 22 23 23 #include "includes.h" 24 25 26 27 24 28 25 29 #ifdef HAVE_SYS_PRCTL_H 26 30 #include <sys/prctl.h> 31 32 33 27 34 #endif 28 35 … … 124 131 do { 125 132 ret = read(fd, buf, count); 126 } while (ret == -1 && errno == EINTR); 133 #if defined(EWOULDBLOCK) 134 } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); 135 #else 136 } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); 137 #endif 127 138 return ret; 128 139 } … … 138 149 do { 139 150 ret = write(fd, buf, count); 140 } while (ret == -1 && errno == EINTR); 151 #if defined(EWOULDBLOCK) 152 } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); 153 #else 154 } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); 155 #endif 141 156 return ret; 142 157 } … … 163 178 do { 164 179 ret = writev(fd, iov, iovcnt); 165 } while (ret == -1 && errno == EINTR); 180 #if defined(EWOULDBLOCK) 181 } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); 182 #else 183 } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); 184 #endif 166 185 return ret; 167 186 } … … 208 227 209 228 /******************************************************************* 210 A send wrapper that will deal with EINTR .229 A send wrapper that will deal with EINTR. 211 230 ********************************************************************/ 212 231 … … 217 236 do { 218 237 ret = send(s, msg, len, flags); 219 } while (ret == -1 && errno == EINTR); 220 return ret; 221 } 222 223 /******************************************************************* 224 A sendto wrapper that will deal with EINTR. 238 #if defined(EWOULDBLOCK) 239 } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); 240 #else 241 } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); 242 #endif 243 return ret; 244 } 245 246 /******************************************************************* 247 A sendto wrapper that will deal with EINTR or EAGAIN or EWOULDBLOCK. 225 248 ********************************************************************/ 226 249 … … 231 254 do { 232 255 ret = sendto(s, msg, len, flags, to, tolen); 233 } while (ret == -1 && errno == EINTR); 234 return ret; 235 } 236 237 /******************************************************************* 238 A recv wrapper that will deal with EINTR. 256 #if defined(EWOULDBLOCK) 257 } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); 258 #else 259 } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); 260 #endif 261 return ret; 262 } 263 264 /******************************************************************* 265 A recv wrapper that will deal with EINTR or EAGAIN or EWOULDBLOCK. 239 266 ********************************************************************/ 240 267 … … 245 272 do { 246 273 ret = recv(fd, buf, count, flags); 247 } while (ret == -1 && errno == EINTR); 274 #if defined(EWOULDBLOCK) 275 } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); 276 #else 277 } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); 278 #endif 248 279 return ret; 249 280 } … … 259 290 do { 260 291 ret = recvfrom(s, buf, len, flags, from, fromlen); 261 } while (ret == -1 && errno == EINTR); 292 #if defined(EWOULDBLOCK) 293 } while (ret == -1 && (errno == EINTR || errno == EAGAIN || errno == EWOULDBLOCK)); 294 #else 295 } while (ret == -1 && (errno == EINTR || errno == EAGAIN)); 296 #endif 262 297 return ret; 263 298 } … … 637 672 #elif defined(HAVE_POSIX_FALLOCATE) && !defined(HAVE_BROKEN_POSIX_FALLOCATE) 638 673 return posix_fallocate(fd, offset, len); 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 639 699 #else 640 700 return ENOSYS; 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 641 736 #endif 642 737 } … … 743 838 } 744 839 840 841 842 843 844 845 846 847 848 745 849 746 850 /******************************************************************* … … 778 882 #else 779 883 return opendir(name); 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 780 902 #endif 781 903 } … … 1033 1155 } 1034 1156 1157 1158 1159 1160 1035 1161 /************************************************************************** 1036 1162 Returns equivalent to NGROUPS_MAX - using sysconf if needed. … … 1053 1179 1054 1180 #if defined(HAVE_BROKEN_GETGROUPS) 1181 1182 1183 1184 1185 1186 1187 1055 1188 static int sys_broken_getgroups(int setlen, gid_t *gidset) 1056 1189 { … … 1232 1365 1233 1366 /************************************************************************** 1234 Wrappers for setpwent(), getpwent() and endpwent()1235 ****************************************************************************/1236 1237 void sys_setpwent(void)1238 {1239 setpwent();1240 }1241 1242 struct passwd *sys_getpwent(void)1243 {1244 return getpwent();1245 }1246 1247 void sys_endpwent(void)1248 {1249 endpwent();1250 }1251 1252 /**************************************************************************1253 Wrappers for getpwnam(), getpwuid(), getgrnam(), getgrgid()1254 ****************************************************************************/1255 1256 1257 struct passwd *sys_getpwnam(const char *name)1258 {1259 return getpwnam(name);1260 }1261 1262 struct passwd *sys_getpwuid(uid_t uid)1263 {1264 return getpwuid(uid);1265 }1266 1267 struct group *sys_getgrnam(const char *name)1268 {1269 return getgrnam(name);1270 }1271 1272 struct group *sys_getgrgid(gid_t gid)1273 {1274 return getgrgid(gid);1275 }1276 1277 /**************************************************************************1278 1367 Extract a command into an arg list. 1279 1368 ****************************************************************************/ … … 1442 1531 1443 1532 SAFE_FREE(entry); 1444 SAFE_FREE(argl);1533 _FREE(argl); 1445 1534 close(pipe_fds[0]); 1446 1535 close(pipe_fds[1]); … … 1774 1863 } 1775 1864 /* Shift results back, so we can prepend prefixes */ 1776 buf = memmove(list + len, list, list_size);1865 buf = memmove(list + len, list, list_size); 1777 1866 1778 1867 for(i = 0; i < list_size; i += len + 1) { … … 2583 2672 } 2584 2673 #endif /* WITH_AIO */ 2585 2586 int sys_getpeereid( int s, uid_t *uid)2587 {2588 #if defined(HAVE_PEERCRED)2589 struct ucred cred;2590 socklen_t cred_len = sizeof(struct ucred);2591 int ret;2592 2593 ret = getsockopt(s, SOL_SOCKET, SO_PEERCRED, (void *)&cred, &cred_len);2594 if (ret != 0) {2595 return -1;2596 }2597 2598 if (cred_len != sizeof(struct ucred)) {2599 errno = EINVAL;2600 return -1;2601 }2602 2603 *uid = cred.uid;2604 return 0;2605 #else2606 errno = ENOSYS;2607 return -1;2608 #endif2609 }2610 2611 int sys_getnameinfo(const struct sockaddr *psa,2612 socklen_t salen,2613 char *host,2614 size_t hostlen,2615 char *service,2616 size_t servlen,2617 int flags)2618 {2619 /*2620 * For Solaris we must make sure salen is the2621 * correct length for the incoming sa_family.2622 */2623 2624 if (salen == sizeof(struct sockaddr_storage)) {2625 salen = sizeof(struct sockaddr_in);2626 #if defined(HAVE_IPV6)2627 if (psa->sa_family == AF_INET6) {2628 salen = sizeof(struct sockaddr_in6);2629 }2630 #endif2631 }2632 return getnameinfo(psa, salen, host, hostlen, service, servlen, flags);2633 }2634 2635 int sys_connect(int fd, const struct sockaddr * addr)2636 {2637 socklen_t salen = -1;2638 2639 if (addr->sa_family == AF_INET) {2640 salen = sizeof(struct sockaddr_in);2641 } else if (addr->sa_family == AF_UNIX) {2642 salen = sizeof(struct sockaddr_un);2643 }2644 #if defined(HAVE_IPV6)2645 else if (addr->sa_family == AF_INET6) {2646 salen = sizeof(struct sockaddr_in6);2647 }2648 #endif2649 2650 return connect(fd, addr, salen);2651 }
Note:
See TracChangeset
for help on using the changeset viewer.
