comparison src/process.c @ 83510:2d2f6f096f6e

Merged from emacs@sv.gnu.org Patches applied: * emacs@sv.gnu.org/emacs--devo--0--patch-216 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-217 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-218 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-219 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-220 Improve tq.el. * emacs@sv.gnu.org/emacs--devo--0--patch-221 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-222 Update from CVS: src/puresize.h (PURESIZE_RATIO): Reduce to 10/6. * emacs@sv.gnu.org/emacs--devo--0--patch-223 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-224 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-225 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-226 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-227 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-228 Merge from gnus--rel--5.10 * emacs@sv.gnu.org/emacs--devo--0--patch-229 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-230 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-231 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-232 Update from CVS * emacs@sv.gnu.org/emacs--devo--0--patch-233 Update from CVS: lisp/progmodes/python.el (python-mode): Fix typo. * emacs@sv.gnu.org/gnus--rel--5.10--patch-84 Merge from emacs--devo--0 * emacs@sv.gnu.org/gnus--rel--5.10--patch-85 Update from CVS * emacs@sv.gnu.org/gnus--rel--5.10--patch-86 Update from CVS git-archimport-id: lorentey@elte.hu--2004/emacs--multi-tty--0--patch-550
author Karoly Lorentey <lorentey@elte.hu>
date Wed, 19 Apr 2006 16:23:46 +0000
parents 81f2d90dee68 9fb9e33ecf2d
children 1321f6cfb389
comparison
equal deleted inserted replaced
83509:24cf4bf418dc 83510:2d2f6f096f6e
2320 } 2320 }
2321 return 0; 2321 return 0;
2322 } 2322 }
2323 2323
2324 /* Convert an address object (vector or string) to an internal sockaddr. 2324 /* Convert an address object (vector or string) to an internal sockaddr.
2325 Format of address has already been validated by size_lisp_to_sockaddr. */ 2325
2326 The address format has been basically validated by
2327 get_lisp_to_sockaddr_size, but this does not mean FAMILY is valid;
2328 it could have come from user data. So if FAMILY is not valid,
2329 we return after zeroing *SA. */
2326 2330
2327 static void 2331 static void
2328 conv_lisp_to_sockaddr (family, address, sa, len) 2332 conv_lisp_to_sockaddr (family, address, sa, len)
2329 int family; 2333 int family;
2330 Lisp_Object address; 2334 Lisp_Object address;
2334 register struct Lisp_Vector *p; 2338 register struct Lisp_Vector *p;
2335 register unsigned char *cp = NULL; 2339 register unsigned char *cp = NULL;
2336 register int i; 2340 register int i;
2337 2341
2338 bzero (sa, len); 2342 bzero (sa, len);
2339 sa->sa_family = family;
2340 2343
2341 if (VECTORP (address)) 2344 if (VECTORP (address))
2342 { 2345 {
2343 p = XVECTOR (address); 2346 p = XVECTOR (address);
2344 if (family == AF_INET) 2347 if (family == AF_INET)
2346 struct sockaddr_in *sin = (struct sockaddr_in *) sa; 2349 struct sockaddr_in *sin = (struct sockaddr_in *) sa;
2347 len = sizeof (sin->sin_addr) + 1; 2350 len = sizeof (sin->sin_addr) + 1;
2348 i = XINT (p->contents[--len]); 2351 i = XINT (p->contents[--len]);
2349 sin->sin_port = htons (i); 2352 sin->sin_port = htons (i);
2350 cp = (unsigned char *)&sin->sin_addr; 2353 cp = (unsigned char *)&sin->sin_addr;
2354 sa->sa_family = family;
2351 } 2355 }
2352 #ifdef AF_INET6 2356 #ifdef AF_INET6
2353 else if (family == AF_INET6) 2357 else if (family == AF_INET6)
2354 { 2358 {
2355 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa; 2359 struct sockaddr_in6 *sin6 = (struct sockaddr_in6 *) sa;
2361 if (INTEGERP (p->contents[i])) 2365 if (INTEGERP (p->contents[i]))
2362 { 2366 {
2363 int j = XFASTINT (p->contents[i]) & 0xffff; 2367 int j = XFASTINT (p->contents[i]) & 0xffff;
2364 ip6[i] = ntohs (j); 2368 ip6[i] = ntohs (j);
2365 } 2369 }
2366 return; 2370 sa->sa_family = family;
2367 } 2371 }
2368 #endif 2372 #endif
2373 return;
2369 } 2374 }
2370 else if (STRINGP (address)) 2375 else if (STRINGP (address))
2371 { 2376 {
2372 #ifdef HAVE_LOCAL_SOCKETS 2377 #ifdef HAVE_LOCAL_SOCKETS
2373 if (family == AF_LOCAL) 2378 if (family == AF_LOCAL)
2374 { 2379 {
2375 struct sockaddr_un *sockun = (struct sockaddr_un *) sa; 2380 struct sockaddr_un *sockun = (struct sockaddr_un *) sa;
2376 cp = SDATA (address); 2381 cp = SDATA (address);
2377 for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++) 2382 for (i = 0; i < sizeof (sockun->sun_path) && *cp; i++)
2378 sockun->sun_path[i] = *cp++; 2383 sockun->sun_path[i] = *cp++;
2384 sa->sa_family = family;
2379 } 2385 }
2380 #endif 2386 #endif
2381 return; 2387 return;
2382 } 2388 }
2383 else 2389 else
6234 emacs_close (XINT (XPROCESS (proc)->outfd)); 6240 emacs_close (XINT (XPROCESS (proc)->outfd));
6235 #else /* not HAVE_SHUTDOWN */ 6241 #else /* not HAVE_SHUTDOWN */
6236 emacs_close (XINT (XPROCESS (proc)->outfd)); 6242 emacs_close (XINT (XPROCESS (proc)->outfd));
6237 #endif /* not HAVE_SHUTDOWN */ 6243 #endif /* not HAVE_SHUTDOWN */
6238 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0); 6244 new_outfd = emacs_open (NULL_DEVICE, O_WRONLY, 0);
6245 if (new_outfd < 0)
6246 abort ();
6239 old_outfd = XINT (XPROCESS (proc)->outfd); 6247 old_outfd = XINT (XPROCESS (proc)->outfd);
6240 6248
6241 if (!proc_encode_coding_system[new_outfd]) 6249 if (!proc_encode_coding_system[new_outfd])
6242 proc_encode_coding_system[new_outfd] 6250 proc_encode_coding_system[new_outfd]
6243 = (struct coding_system *) xmalloc (sizeof (struct coding_system)); 6251 = (struct coding_system *) xmalloc (sizeof (struct coding_system));