aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-10-01 18:24:12 -0700
committerAlon Zakai <alonzakai@gmail.com>2012-10-01 18:24:12 -0700
commit412ecd600739f6f27728cf67fb54052292168bd6 (patch)
treed5a350d21916f830213603b03c76ea699e70dcdf
parent248b605cbb0d6668a1677348feb61cc98395c625 (diff)
inet_addr
-rw-r--r--src/library.js14
-rwxr-xr-xtests/runner.py4
2 files changed, 12 insertions, 6 deletions
diff --git a/src/library.js b/src/library.js
index 078bc037..9e70b596 100644
--- a/src/library.js
+++ b/src/library.js
@@ -6315,14 +6315,18 @@ LibraryManager.library = {
ntohl: 'htonl',
ntohs: 'htons',
- inet_pton__deps: ['__setErrNo', '$ERRNO_CODES'],
+ inet_addr: function(ptr) {
+ var b = Pointer_stringify(ptr).split(".");
+ if (b.length !== 4) return -1; // we return -1 for error, and otherwise a uint32. this helps inet_pton differentiate
+ return (Number(b[0]) | (Number(b[1]) << 8) | (Number(b[2]) << 16) | (Number(b[3]) << 24)) >>> 0;
+ },
+
+ inet_pton__deps: ['__setErrNo', '$ERRNO_CODES', 'inet_addr'],
inet_pton: function(af, src, dst) {
// int af, const char *src, void *dst
if ((af ^ {{{ cDefine("AF_INET") }}}) !== 0) { ___setErrNo(ERRNO_CODES.EAFNOSUPPORT); return -1; }
- var b = Pointer_stringify(src).split(".");
- if (b.length !== 4) return 0;
- var ret = Number(b[0]) | (Number(b[1]) << 8) | (Number(b[2]) << 16) | (Number(b[3]) << 24);
- if (isNaN(ret)) return 0;
+ var ret = _inet_addr(src);
+ if (ret == -1 || isNaN(ret)) return 0;
setValue(dst, ret, 'i32');
return 1;
},
diff --git a/tests/runner.py b/tests/runner.py
index 89a633f1..1b4cd729 100755
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -5069,10 +5069,12 @@ def process(filename):
int main() {
printf("*%x,%x,%x,%x,%x,%x*\n", htonl(0xa1b2c3d4), htonl(0xfe3572e0), htonl(0x07abcdf0), htons(0xabcd), ntohl(0x43211234), ntohs(0xbeaf));
+ in_addr_t i = inet_addr("190.180.10.78");
+ printf("%x\n", i);
return 0;
}
'''
- self.do_run(src, '*d4c3b2a1,e07235fe,f0cdab07,cdab,34122143,afbe*')
+ self.do_run(src, '*d4c3b2a1,e07235fe,f0cdab07,cdab,34122143,afbe*\n4e0ab4be\n')
def test_ctype(self):
# The bit fiddling done by the macros using __ctype_b_loc requires this.