diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-10-01 18:24:12 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-10-01 18:24:12 -0700 |
commit | 412ecd600739f6f27728cf67fb54052292168bd6 (patch) | |
tree | d5a350d21916f830213603b03c76ea699e70dcdf | |
parent | 248b605cbb0d6668a1677348feb61cc98395c625 (diff) |
inet_addr
-rw-r--r-- | src/library.js | 14 | ||||
-rwxr-xr-x | tests/runner.py | 4 |
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. |