Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(855)

Unified Diff: ports/samba/nacl.patch

Issue 1463173002: Fake implementation of get_interfaces. This is needed because getifaddrs fails under NaCl and the S… (Closed) Base URL: https://chromium.googlesource.com/external/naclports.git@master
Patch Set: Created 5 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ports/samba/build.sh ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ports/samba/nacl.patch
diff --git a/ports/samba/nacl.patch b/ports/samba/nacl.patch
index 1ab4cc32d5d8beef52ae5332ae6c038dab0c4b39..8b41033033c119bbcfcf929ecc979cd62e1202d6 100644
--- a/ports/samba/nacl.patch
+++ b/ports/samba/nacl.patch
@@ -129,6 +129,87 @@ diff --git a/lib/replace/wscript b/lib/replace/wscript
struct stat st;
char tpl[20]="/tmp/test.XXXXXX";
char tpl2[20]="/tmp/test.XXXXXX";
+diff --git a/lib/socket/interfaces.c b/lib/socket/interfaces.c
+--- a/lib/socket/interfaces.c
++++ b/lib/socket/interfaces.c
+@@ -25,6 +25,11 @@
+ #include "interfaces.h"
+ #include "lib/util/tsort.h"
+
++#if FAKE_GET_INTERFACES
++# include <sys/socket.h>
++# include <netinet/in.h>
++#endif
++
+ /****************************************************************************
+ Create a struct sockaddr_storage with the netmask bits set to 1.
+ ****************************************************************************/
+@@ -138,9 +143,53 @@ static int _get_interfaces(TALLOC_CTX *mem_ctx, struct iface_struct **pifaces)
+ int total = 0;
+ size_t copy_size;
+
++#if FAKE_GET_INTERFACES
++ // Under NaCl the API's to get network interfaces do not work. This code
++ // path provides a fake response because if nothing is returned libsmbclient
++ // will abort startup.
++ //
++ // The actual values returned here are never used as far as I can tell
++ // and name resolution/NBT is done in javascript prior to calling libsmbclient
++ // for the purposes of the Chrome Samba app.
++ iflist = talloc_array(mem_ctx, struct iface_struct, 1);
++ if (iflist == NULL) {
++ errno = ENOMEM;
++ return -1;
++ }
++
++ iflist->ifa_next = NULL;
++ iflist->ifa_name = talloc_strdup(mem_ctx, "fake");
++ // This is what my real interface returned. It might only be necessary to
++ // be IFF_BROADCAST and IFF_UP?
++ iflist->ifa_flags = 0x00011043;
++
++ // IP Address
++ struct sockaddr_in* addr = talloc(mem_ctx, struct sockaddr_in);
++ addr->sin_family = AF_INET;
++ addr->sin_port = 0;
++ inet_aton("192.168.2.3", &addr->sin_addr.s_addr);
++ iflist->ifa_addr = addr;
++
++ // Net mask
++ addr = talloc(mem_ctx, struct sockaddr_in);
++ addr->sin_family = AF_INET;
++ addr->sin_port = 0;
++ inet_aton("255.255.255.0", &addr->sin_addr.s_addr);
++ iflist->ifa_netmask = addr;
++
++ // Broadcast address.
++ addr = talloc(mem_ctx, struct sockaddr_in);
++ addr->sin_family = AF_INET;
++ addr->sin_port = 0;
++ inet_aton("192.168.2.255", &addr->sin_addr.s_addr);
++ iflist->ifa_broadaddr = addr;
++
++ iflist->ifa_data = NULL;
++#else
+ if (getifaddrs(&iflist) < 0) {
+ return -1;
+ }
++#endif
+
+ count = 0;
+ for (ifptr = iflist; ifptr != NULL; ifptr = ifptr->ifa_next) {
+@@ -223,7 +272,11 @@ static int _get_interfaces(TALLOC_CTX *mem_ctx, struct iface_struct **pifaces)
+ total++;
+ }
+
++// Since the iflist was allocated by talloc in the FAKE_GET_INTERFACES case it
++// doesn't need to be deleted.
++#if !FAKE_GET_INTERFACES
+ freeifaddrs(iflist);
++#endif
+
+ *pifaces = ifaces;
+ return total;
diff --git a/source3/wscript b/source3/wscript
--- a/source3/wscript
+++ b/source3/wscript
« no previous file with comments | « ports/samba/build.sh ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698