@@ -38,6 +38,18 @@ LibraryManager.library = {
3838 setTempRet0 ( val ) ;
3939 } ,
4040
41+ $zeroMemory : function ( address , size ) {
42+ #if LEGACY_VM_SUPPORT
43+ if ( ! HEAPU8 . fill ) {
44+ for ( var i = 0 ; i < size ; i ++ ) {
45+ HEAPU8 [ address + i ] = 0 ;
46+ }
47+ return ;
48+ }
49+ #endif
50+ HEAPU8 . fill ( 0 , address , address + size ) ;
51+ } ,
52+
4153#if SAFE_HEAP
4254 // Trivial wrappers around runtime functions that make these symbols available
4355 // to native code.
@@ -1490,12 +1502,13 @@ LibraryManager.library = {
14901502 // sys/times.h
14911503 // ==========================================================================
14921504
1505+ times__deps : [ '$zeroMemory' ] ,
14931506 times : function ( buffer ) {
14941507 // clock_t times(struct tms *buffer);
14951508 // http://pubs.opengroup.org/onlinepubs/009695399/functions/times.html
14961509 // NOTE: This is fake, since we can't calculate real CPU time usage in JS.
14971510 if ( buffer !== 0 ) {
1498- _memset ( buffer , 0 , { { { C_STRUCTS . tms . __size__ } } } ) ;
1511+ zeroMemory ( buffer , { { { C_STRUCTS . tms . __size__ } } } ) ;
14991512 }
15001513 return 0 ;
15011514 } ,
@@ -2040,23 +2053,22 @@ LibraryManager.library = {
20402053
20412054 return { family : family , addr : addr , port : port } ;
20422055 } ,
2043- $writeSockaddr__deps : [ '$Sockets ', '$inetPton4 ', '$inetPton6 '] ,
2056+ $writeSockaddr__deps : [ '$Sockets ', '$inetPton4 ', '$inetPton6 ', ' $zeroMemory ' ] ,
20442057 $writeSockaddr : function ( sa , family , addr , port , addrlen ) {
20452058 switch ( family ) {
20462059 case { { { cDefine ( 'AF_INET ') } } } :
20472060 addr = inetPton4 ( addr ) ;
2061+ zeroMemory ( sa , { { { C_STRUCTS . sockaddr_in . __size__ } } } ) ;
20482062 if ( addrlen ) {
20492063 { { { makeSetValue ( 'addrlen' , 0 , C_STRUCTS . sockaddr_in . __size__ , 'i32' ) } } } ;
20502064 }
20512065 { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in . sin_family , 'family ', 'i16 ') } } } ;
20522066 { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in . sin_addr . s_addr , 'addr ', 'i32 ') } } } ;
20532067 { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in . sin_port , '_htons ( port ) ', 'i16 ') } } } ;
2054- /* Use makeSetValue instead of memset to avoid adding memset dependency for all users of writeSockaddr. */
2055- { { { assert ( C_STRUCTS . sockaddr_in . __size__ - C_STRUCTS . sockaddr_in . sin_zero == 8 ) , '' } } }
2056- { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in . sin_zero , '0 ', 'i64 ') } } } ;
20572068 break ;
20582069 case { { { cDefine ( 'AF_INET6 ') } } } :
20592070 addr = inetPton6 ( addr ) ;
2071+ zeroMemory ( sa , { { { C_STRUCTS . sockaddr_in6 . __size__ } } } ) ;
20602072 if ( addrlen ) {
20612073 { { { makeSetValue ( 'addrlen' , 0 , C_STRUCTS . sockaddr_in6 . __size__ , 'i32' ) } } } ;
20622074 }
@@ -2066,8 +2078,6 @@ LibraryManager.library = {
20662078 { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in6 . sin6_addr . __in6_union . __s6_addr + 8 , 'addr [ 2 ] ', 'i32 ') } } } ;
20672079 { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in6 . sin6_addr . __in6_union . __s6_addr + 12 , 'addr [ 3 ] ', 'i32 ') } } } ;
20682080 { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in6 . sin6_port , '_htons ( port ) ', 'i16 ') } } } ;
2069- { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in6 . sin6_flowinfo , '0 ', 'i32 ') } } } ;
2070- { { { makeSetValue ( 'sa ', C_STRUCTS . sockaddr_in6 . sin6_scope_id , '0 ', 'i32 ') } } } ;
20712081 break ;
20722082 default :
20732083 return { { { cDefine ( 'EAFNOSUPPORT ') } } } ;
0 commit comments