comparison libpurple/win32/libc_interface.c @ 32390:c0c60e110c82

Fix the compilation of the Bonjour prpl on Windows. Fixes #14802 committer: Daniel Atallah <daniel.atallah@gmail.com>
author Eion Robb <eion@robbmob.com>
date Tue, 13 Dec 2011 15:24:16 +0000
parents e529d0b57a5f
children b30d7c76db03
comparison
equal deleted inserted replaced
32383:7967bb7db191 32390:c0c60e110c82
298 return NULL; 298 return NULL;
299 } 299 }
300 return (const char *) dst; 300 return (const char *) dst;
301 } 301 }
302 302
303 int
304 wpurple_inet_pton(int af, const char *src, void *dst)
305 {
306 /* struct sockaddr can't accomodate struct sockaddr_in6. */
307 union {
308 struct sockaddr_in6 sin6;
309 struct sockaddr_in sin;
310 } sa;
311 size_t srcsize;
312
313 switch(af)
314 {
315 case AF_INET:
316 sa.sin.sin_family = AF_INET;
317 srcsize = sizeof (sa.sin);
318 break;
319 case AF_INET6:
320 sa.sin6.sin6_family = AF_INET6;
321 srcsize = sizeof (sa.sin6);
322 break;
323 default:
324 errno = WSAEPFNOSUPPORT;
325 return -1;
326 }
327
328 if (WSAStringToAddress(src, af, NULL, (struct sockaddr *) &sa, &srcsize) != 0)
329 {
330 errno = WSAGetLastError();
331 return -1;
332 }
333
334 switch(af)
335 {
336 case AF_INET:
337 memcpy(dst, &sa.sin.sin_addr, sizeof(sa.sin.sin_addr));
338 break;
339 case AF_INET6:
340 memcpy(dst, &sa.sin6.sin6_addr, sizeof(sa.sin6.sin6_addr));
341 break;
342 }
343
344 return 1;
345 }
346
303 347
304 /* netdb.h */ 348 /* netdb.h */
305 struct hostent* wpurple_gethostbyname(const char *name) { 349 struct hostent* wpurple_gethostbyname(const char *name) {
306 struct hostent *hp; 350 struct hostent *hp;
307 351