Author: eliot Date: 2012-06-07 12:29:52 -0700 (Thu, 07 Jun 2012) New Revision: 2556 Added: branches/Cog/processors/IA32/linuxbochs/bochsconfig.h Modified: branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c branches/Cog/nscogsrc/vm/cointerp.c branches/Cog/nscogsrc/vm/gcc3x-cointerp.c branches/Cog/platforms/Cross/vm/sqSCCSVersion.h branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c branches/Cog/src/vm/cointerp.c branches/Cog/src/vm/cointerpmt.c branches/Cog/src/vm/gcc3x-cointerp.c branches/Cog/src/vm/gcc3x-cointerpmt.c Log: CogVM source as per VMMaker.oscog-eem.161. Integrate ipv6 socket primitives. Add UnixOSProcessPlugin primitiveDup, and make primitiveChdir return error and success results the right way round. Modified: branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/nscogsrc/plugins/SocketPlugin/SocketPlugin.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,9 +1,9 @@ /* Automatically generated by - SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.105 uuid: 79234f80-ee6a-404c-9e5c-2134e3b76463 + SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - SocketPlugin VMMaker.oscog-eem.105 uuid: 79234f80-ee6a-404c-9e5c-2134e3b76463 + SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "SocketPlugin VMMaker.oscog-eem.105 uuid: 79234f80-ee6a-404c-9e5c-2134e3b76463 " __DATE__ ; +static char __buildInfo[] = "SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; @@ -38,6 +38,8 @@ /*** Constants ***/ +#define BytesPerWord 4 +#define MULTIPLEBYTECODESETS 0 /*** Function Prototypes ***/ @@ -55,6 +57,20 @@ EXPORT(sqInt) primitiveResolverAbortLookup(void); EXPORT(sqInt) primitiveResolverAddressLookupResult(void); EXPORT(sqInt) primitiveResolverError(void); +EXPORT(sqInt) primitiveResolverGetAddressInfo(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoFamily(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoNext(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoProtocol(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoResult(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoSize(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoType(void); +EXPORT(sqInt) primitiveResolverGetNameInfo(void); +EXPORT(sqInt) primitiveResolverGetNameInfoHostResult(void); +EXPORT(sqInt) primitiveResolverGetNameInfoHostSize(void); +EXPORT(sqInt) primitiveResolverGetNameInfoServiceResult(void); +EXPORT(sqInt) primitiveResolverGetNameInfoServiceSize(void); +EXPORT(sqInt) primitiveResolverHostNameResult(void); +EXPORT(sqInt) primitiveResolverHostNameSize(void); EXPORT(sqInt) primitiveResolverLocalAddress(void); EXPORT(sqInt) primitiveResolverNameLookupResult(void); EXPORT(sqInt) primitiveResolverStartAddressLookup(void); @@ -63,9 +79,13 @@ EXPORT(sqInt) primitiveSocketAbortConnection(void); EXPORT(sqInt) primitiveSocketAccept(void); EXPORT(sqInt) primitiveSocketAccept3Semaphores(void); +EXPORT(sqInt) primitiveSocketAddressGetPort(void); +EXPORT(sqInt) primitiveSocketAddressSetPort(void); +EXPORT(sqInt) primitiveSocketBindTo(void); EXPORT(sqInt) primitiveSocketBindToPort(void); EXPORT(sqInt) primitiveSocketCloseConnection(void); EXPORT(sqInt) primitiveSocketConnectionStatus(void); +EXPORT(sqInt) primitiveSocketConnectTo(void); EXPORT(sqInt) primitiveSocketConnectToPort(void); EXPORT(sqInt) primitiveSocketCreate(void); EXPORT(sqInt) primitiveSocketCreate3Semaphores(void); @@ -76,13 +96,18 @@ EXPORT(sqInt) primitiveSocketListenOnPort(void); EXPORT(sqInt) primitiveSocketListenOnPortBacklog(void); EXPORT(sqInt) primitiveSocketListenOnPortBacklogInterface(void); +EXPORT(sqInt) primitiveSocketListenWithBacklog(void); EXPORT(sqInt) primitiveSocketListenWithOrWithoutBacklog(void); EXPORT(sqInt) primitiveSocketLocalAddress(void); +EXPORT(sqInt) primitiveSocketLocalAddressResult(void); +EXPORT(sqInt) primitiveSocketLocalAddressSize(void); EXPORT(sqInt) primitiveSocketLocalPort(void); EXPORT(sqInt) primitiveSocketReceiveDataAvailable(void); EXPORT(sqInt) primitiveSocketReceiveDataBufCount(void); EXPORT(sqInt) primitiveSocketReceiveUDPDataBufCount(void); EXPORT(sqInt) primitiveSocketRemoteAddress(void); +EXPORT(sqInt) primitiveSocketRemoteAddressResult(void); +EXPORT(sqInt) primitiveSocketRemoteAddressSize(void); EXPORT(sqInt) primitiveSocketRemotePort(void); EXPORT(sqInt) primitiveSocketSendDataBufCount(void); EXPORT(sqInt) primitiveSocketSendDone(void); @@ -103,9 +128,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "SocketPlugin VMMaker.oscog-eem.105 (i)" + "SocketPlugin VMMaker.oscog-eem.161 (i)" #else - "SocketPlugin VMMaker.oscog-eem.105 (e)" + "SocketPlugin VMMaker.oscog-eem.161 (e)" #endif ; static void * sCCLOPfn; @@ -295,6 +320,321 @@ } EXPORT(sqInt) +primitiveResolverGetAddressInfo(void) +{ + sqInt family; + sqInt flags; + char *hostName; + sqInt hostSize; + sqInt protocol; + char *servName; + sqInt servSize; + sqInt type; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(5))); + hostName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(5)))); + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(4))); + servName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(4)))); + flags = interpreterProxy->stackIntegerValue(3); + family = interpreterProxy->stackIntegerValue(2); + type = interpreterProxy->stackIntegerValue(1); + protocol = interpreterProxy->stackIntegerValue(0); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + hostSize = interpreterProxy->byteSizeOf(((sqInt)(long)(hostName) - 4)); + servSize = interpreterProxy->byteSizeOf(((sqInt)(long)(servName) - 4)); + sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(hostName, hostSize, servName, servSize, flags, family, type, protocol); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(6); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoFamily(void) +{ + sqInt family; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + family = sqResolverGetAddressInfoFamily(); + _return_value = interpreterProxy->integerObjectOf(family); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoNext(void) +{ + sqInt more; + sqInt _return_value; + + more = sqResolverGetAddressInfoNext(); + if (interpreterProxy->failed()) { + return null; + } + _return_value = (more) ? interpreterProxy->trueObject(): interpreterProxy->falseObject(); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoProtocol(void) +{ + sqInt protocol; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + protocol = sqResolverGetAddressInfoProtocol(); + _return_value = interpreterProxy->integerObjectOf(protocol); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoResult(void) +{ + sqInt addrSize; + char *socketAddress; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + socketAddress = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketAddress) - 4)); + sqResolverGetAddressInfoResultSize(socketAddress, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverGetAddressInfoSize(); + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoType(void) +{ + sqInt type; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + type = sqResolverGetAddressInfoType(); + _return_value = interpreterProxy->integerObjectOf(type); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfo(void) +{ + char *addrBase; + sqInt addrSize; + sqInt flags; + sqInt socketAddress; + + socketAddress = interpreterProxy->stackValue(1); + flags = interpreterProxy->stackIntegerValue(0); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + sqResolverGetNameInfoSizeFlags(addrBase, addrSize, flags); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoHostResult(void) +{ + sqInt addrSize; + char *socketName; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4)); + sqResolverGetNameInfoHostResultSize(socketName, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoHostSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverGetNameInfoHostSize(); + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoServiceResult(void) +{ + sqInt addrSize; + char *socketName; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4)); + sqResolverGetNameInfoServiceResultSize(socketName, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoServiceSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverGetNameInfoServiceSize(); + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverHostNameResult(void) +{ + sqInt nameSize; + char *nameString; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + nameString = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + nameSize = interpreterProxy->byteSizeOf(((sqInt)(long)(nameString) - 4)); + sqResolverHostNameResultSize(nameString, nameSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverHostNameSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverHostNameSize(); + if (!(interpreterProxy->failed())) { + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) primitiveResolverLocalAddress(void) { sqInt addr; @@ -396,7 +736,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(0); if (interpreterProxy->failed()) { @@ -405,13 +744,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketAbortConnection(s); } @@ -430,8 +765,6 @@ sqInt semaIndex; sqInt sendBufSize; SocketPtr serverSocket; - void *socketIndex; - void *socketIndex1; sqInt socketOop; sqInt sockHandle; @@ -445,25 +778,17 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(sockHandle)) && ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - serverSocket = null; - goto l2; - } - socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))); - serverSocket = socketIndex1; -l2: /* end socketValueOf: */; + serverSocket = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)))); if (!(interpreterProxy->failed())) { socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize()); /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; - l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketAcceptFromRecvBytesSendBytesSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex); } if (interpreterProxy->failed()) { @@ -483,8 +808,6 @@ sqInt semaIndex; sqInt sendBufSize; SocketPtr serverSocket; - void *socketIndex; - void *socketIndex1; sqInt socketOop; sqInt sockHandle; @@ -500,25 +823,17 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(sockHandle)) && ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - serverSocket = null; - goto l2; - } - socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))); - serverSocket = socketIndex1; -l2: /* end socketValueOf: */; + serverSocket = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)))); if (!(interpreterProxy->failed())) { socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize()); /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; - l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketAcceptFromRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema); } if (interpreterProxy->failed()) { @@ -529,6 +844,95 @@ } EXPORT(sqInt) +primitiveSocketAddressGetPort(void) +{ + sqInt addr; + char *addrBase; + sqInt addrSize; + sqInt port; + sqInt _return_value; + + addr = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + addrSize = interpreterProxy->byteSizeOf(addr); + addrBase = ((char *) (interpreterProxy->firstIndexableField(addr))); + if (!(interpreterProxy->failed())) { + port = sqSocketAddressSizeGetPort(addrBase, addrSize); + if (!(interpreterProxy->failed())) { + _return_value = interpreterProxy->integerObjectOf(port); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveSocketAddressSetPort(void) +{ + sqInt addr; + char *addrBase; + sqInt addrSize; + sqInt portNumber; + + portNumber = interpreterProxy->stackIntegerValue(0); + addr = interpreterProxy->stackValue(1); + if (interpreterProxy->failed()) { + return null; + } + addrSize = interpreterProxy->byteSizeOf(addr); + addrBase = ((char *) (interpreterProxy->firstIndexableField(addr))); + if (!(interpreterProxy->failed())) { + sqSocketAddressSizeSetPort(addrBase, addrSize, portNumber); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveSocketBindTo(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketBindToAddressSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) primitiveSocketBindToPort(void) { sqInt addr; @@ -536,7 +940,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt sz; socket = interpreterProxy->stackValue(2); @@ -557,13 +960,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketBindToPort(s, addr, port); } @@ -579,7 +978,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(0); if (interpreterProxy->failed()) { @@ -588,13 +986,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketCloseConnection(s); } @@ -610,7 +1004,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; sqInt status; sqInt _return_value; @@ -621,13 +1014,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { status = sqSocketConnectionStatus(s); } @@ -640,6 +1029,38 @@ } EXPORT(sqInt) +primitiveSocketConnectTo(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketConnectToAddressSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) primitiveSocketConnectToPort(void) { sqInt addr; @@ -648,7 +1069,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt sz; socket = interpreterProxy->stackValue(2); @@ -668,7 +1088,7 @@ l1: /* end netAddressToInt: */; if (sCCTPfn != 0) { okToConnect = ((int (*) (int, int)) sCCTPfn)(addr, port); - if (!(okToConnect)) { + if (!okToConnect) { interpreterProxy->primitiveFail(); return null; } @@ -676,13 +1096,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketConnectToPort(s, addr, port); } @@ -702,7 +1118,6 @@ SocketPtr s; sqInt semaIndex; sqInt sendBufSize; - void *socketIndex; sqInt socketOop; sqInt socketType; @@ -716,7 +1131,7 @@ } if (sCCSOTfn != 0) { okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType); - if (!(okToCreate)) { + if (!okToCreate) { interpreterProxy->primitiveFail(); return null; } @@ -725,13 +1140,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex); if (interpreterProxy->failed()) { return null; @@ -751,7 +1162,6 @@ SocketPtr s; sqInt semaIndex; sqInt sendBufSize; - void *socketIndex; sqInt socketOop; sqInt socketType; @@ -767,7 +1177,7 @@ } if (sCCSOTfn != 0) { okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType); - if (!(okToCreate)) { + if (!okToCreate) { interpreterProxy->primitiveFail(); return null; } @@ -776,13 +1186,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema); if (interpreterProxy->failed()) { return null; @@ -803,7 +1209,6 @@ SocketPtr s; sqInt semaIndex; sqInt sendBufSize; - void *socketIndex; sqInt socketOop; netType = interpreterProxy->stackIntegerValue(6); @@ -818,7 +1223,7 @@ } if (sCCSOTfn != 0) { okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, protoType); - if (!(okToCreate)) { + if (!okToCreate) { interpreterProxy->primitiveFail(); return null; } @@ -827,13 +1232,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, protoType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema); if (interpreterProxy->failed()) { return null; @@ -847,7 +1248,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(0); if (interpreterProxy->failed()) { @@ -856,13 +1256,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketDestroy(s); } @@ -879,7 +1275,6 @@ sqInt err; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -889,13 +1284,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { err = sqSocketError(s); } @@ -918,7 +1309,6 @@ sqInt returnedValue; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(1); optionName = interpreterProxy->stackValue(0); @@ -928,13 +1318,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isBytes(optionName)); optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName))); optionNameSize = interpreterProxy->slotSizeOf(optionName); @@ -968,7 +1354,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(1); port = interpreterProxy->stackIntegerValue(0); @@ -978,21 +1363,19 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (sCCLOPfn != 0) { okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port); - if (!(okToListen)) { + if (!okToListen) { interpreterProxy->primitiveFail(); return null; } } - sqSocketListenOnPort(s, port); + if (!(interpreterProxy->failed())) { + sqSocketListenOnPort(s, port); + } if (interpreterProxy->failed()) { return null; } @@ -1013,7 +1396,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(2); port = interpreterProxy->stackIntegerValue(1); @@ -1024,16 +1406,12 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (sCCLOPfn != 0) { okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port); - if (!(okToListen)) { + if (!okToListen) { interpreterProxy->primitiveFail(); return null; } @@ -1062,7 +1440,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt sz; socket = interpreterProxy->stackValue(3); @@ -1076,16 +1453,12 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (sCCLOPfn != 0) { okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port); - if (!(okToListen)) { + if (!okToListen) { interpreterProxy->primitiveFail(); return null; } @@ -1106,7 +1479,35 @@ return null; } +EXPORT(sqInt) +primitiveSocketListenWithBacklog(void) +{ + sqInt backlogSize; + SocketPtr s; + sqInt socket; + socket = interpreterProxy->stackValue(1); + backlogSize = interpreterProxy->stackIntegerValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + if (!(interpreterProxy->failed())) { + sqSocketListenBacklog(s, backlogSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + + /* Backward compatibility */ EXPORT(sqInt) @@ -1126,7 +1527,6 @@ sqInt addr; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1136,13 +1536,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); addr = sqSocketLocalAddress(s); _return_value = intToNetAddress(addr); if (interpreterProxy->failed()) { @@ -1153,12 +1549,76 @@ } EXPORT(sqInt) +primitiveSocketLocalAddressResult(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketLocalAddressResultSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) +primitiveSocketLocalAddressSize(void) +{ + SocketPtr s; + sqInt size; + sqInt socket; + sqInt _return_value; + + socket = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + if (interpreterProxy->failed()) { + return null; + } + size = sqSocketLocalAddressSize(s); + if (interpreterProxy->failed()) { + return null; + } + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(2, _return_value); + return null; +} + +EXPORT(sqInt) primitiveSocketLocalPort(void) { sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1168,13 +1628,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); port = sqSocketLocalPort(s); _return_value = interpreterProxy->integerObjectOf(port); if (interpreterProxy->failed()) { @@ -1190,7 +1646,6 @@ sqInt dataIsAvailable; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1200,13 +1655,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); dataIsAvailable = sqSocketReceiveDataAvailable(s); _return_value = (dataIsAvailable) ? interpreterProxy->trueObject(): interpreterProxy->falseObject(); if (interpreterProxy->failed()) { @@ -1227,7 +1678,6 @@ sqInt count; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; sqInt _return_value; @@ -1241,13 +1691,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1289,7 +1735,6 @@ sqInt results; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; socket = interpreterProxy->stackValue(3); @@ -1302,13 +1747,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1361,7 +1802,6 @@ sqInt addr; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1371,13 +1811,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); addr = sqSocketRemoteAddress(s); _return_value = intToNetAddress(addr); if (interpreterProxy->failed()) { @@ -1388,12 +1824,76 @@ } EXPORT(sqInt) +primitiveSocketRemoteAddressResult(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketRemoteAddressResultSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) +primitiveSocketRemoteAddressSize(void) +{ + SocketPtr s; + sqInt size; + sqInt socket; + sqInt _return_value; + + socket = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + if (interpreterProxy->failed()) { + return null; + } + size = sqSocketRemoteAddressSize(s); + if (interpreterProxy->failed()) { + return null; + } + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(2, _return_value); + return null; +} + +EXPORT(sqInt) primitiveSocketRemotePort(void) { sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1403,13 +1903,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); port = sqSocketRemotePort(s); _return_value = interpreterProxy->integerObjectOf(port); if (interpreterProxy->failed()) { @@ -1430,7 +1926,6 @@ sqInt count; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; sqInt _return_value; @@ -1444,13 +1939,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1483,7 +1974,6 @@ sqInt done; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1493,13 +1983,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); done = sqSocketSendDone(s); _return_value = (done) ? interpreterProxy->trueObject(): interpreterProxy->falseObject(); if (interpreterProxy->failed()) { @@ -1523,7 +2009,6 @@ sqInt portNumber; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; sqInt sz; sqInt _return_value; @@ -1541,13 +2026,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1596,7 +2077,6 @@ sqInt returnedValue; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(2); optionName = interpreterProxy->stackValue(1); @@ -1607,13 +2087,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isBytes(optionName)); optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName))); optionNameSize = interpreterProxy->slotSizeOf(optionName); @@ -1677,15 +2153,11 @@ static SocketPtr socketValueOf(sqInt socketOop) { - void *socketIndex; - interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - return null; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - return socketIndex; + return (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); } static void @@ -1707,6 +2179,20 @@ {"SocketPlugin", "primitiveResolverAbortLookup", (void*)primitiveResolverAbortLookup}, {"SocketPlugin", "primitiveResolverAddressLookupResult", (void*)primitiveResolverAddressLookupResult}, {"SocketPlugin", "primitiveResolverError", (void*)primitiveResolverError}, + {"SocketPlugin", "primitiveResolverGetAddressInfo", (void*)primitiveResolverGetAddressInfo}, + {"SocketPlugin", "primitiveResolverGetAddressInfoFamily", (void*)primitiveResolverGetAddressInfoFamily}, + {"SocketPlugin", "primitiveResolverGetAddressInfoNext", (void*)primitiveResolverGetAddressInfoNext}, + {"SocketPlugin", "primitiveResolverGetAddressInfoProtocol", (void*)primitiveResolverGetAddressInfoProtocol}, + {"SocketPlugin", "primitiveResolverGetAddressInfoResult", (void*)primitiveResolverGetAddressInfoResult}, + {"SocketPlugin", "primitiveResolverGetAddressInfoSize", (void*)primitiveResolverGetAddressInfoSize}, + {"SocketPlugin", "primitiveResolverGetAddressInfoType", (void*)primitiveResolverGetAddressInfoType}, + {"SocketPlugin", "primitiveResolverGetNameInfo", (void*)primitiveResolverGetNameInfo}, + {"SocketPlugin", "primitiveResolverGetNameInfoHostResult", (void*)primitiveResolverGetNameInfoHostResult}, + {"SocketPlugin", "primitiveResolverGetNameInfoHostSize", (void*)primitiveResolverGetNameInfoHostSize}, + {"SocketPlugin", "primitiveResolverGetNameInfoServiceResult", (void*)primitiveResolverGetNameInfoServiceResult}, + {"SocketPlugin", "primitiveResolverGetNameInfoServiceSize", (void*)primitiveResolverGetNameInfoServiceSize}, + {"SocketPlugin", "primitiveResolverHostNameResult", (void*)primitiveResolverHostNameResult}, + {"SocketPlugin", "primitiveResolverHostNameSize", (void*)primitiveResolverHostNameSize}, {"SocketPlugin", "primitiveResolverLocalAddress", (void*)primitiveResolverLocalAddress}, {"SocketPlugin", "primitiveResolverNameLookupResult", (void*)primitiveResolverNameLookupResult}, {"SocketPlugin", "primitiveResolverStartAddressLookup", (void*)primitiveResolverStartAddressLookup}, @@ -1715,9 +2201,13 @@ {"SocketPlugin", "primitiveSocketAbortConnection", (void*)primitiveSocketAbortConnection}, {"SocketPlugin", "primitiveSocketAccept", (void*)primitiveSocketAccept}, {"SocketPlugin", "primitiveSocketAccept3Semaphores", (void*)primitiveSocketAccept3Semaphores}, + {"SocketPlugin", "primitiveSocketAddressGetPort", (void*)primitiveSocketAddressGetPort}, + {"SocketPlugin", "primitiveSocketAddressSetPort", (void*)primitiveSocketAddressSetPort}, + {"SocketPlugin", "primitiveSocketBindTo", (void*)primitiveSocketBindTo}, {"SocketPlugin", "primitiveSocketBindToPort", (void*)primitiveSocketBindToPort}, {"SocketPlugin", "primitiveSocketCloseConnection", (void*)primitiveSocketCloseConnection}, {"SocketPlugin", "primitiveSocketConnectionStatus", (void*)primitiveSocketConnectionStatus}, + {"SocketPlugin", "primitiveSocketConnectTo", (void*)primitiveSocketConnectTo}, {"SocketPlugin", "primitiveSocketConnectToPort", (void*)primitiveSocketConnectToPort}, {"SocketPlugin", "primitiveSocketCreate", (void*)primitiveSocketCreate}, {"SocketPlugin", "primitiveSocketCreate3Semaphores", (void*)primitiveSocketCreate3Semaphores}, @@ -1728,13 +2218,18 @@ {"SocketPlugin", "primitiveSocketListenOnPort", (void*)primitiveSocketListenOnPort}, {"SocketPlugin", "primitiveSocketListenOnPortBacklog", (void*)primitiveSocketListenOnPortBacklog}, {"SocketPlugin", "primitiveSocketListenOnPortBacklogInterface", (void*)primitiveSocketListenOnPortBacklogInterface}, + {"SocketPlugin", "primitiveSocketListenWithBacklog", (void*)primitiveSocketListenWithBacklog}, {"SocketPlugin", "primitiveSocketListenWithOrWithoutBacklog", (void*)primitiveSocketListenWithOrWithoutBacklog}, {"SocketPlugin", "primitiveSocketLocalAddress", (void*)primitiveSocketLocalAddress}, + {"SocketPlugin", "primitiveSocketLocalAddressResult", (void*)primitiveSocketLocalAddressResult}, + {"SocketPlugin", "primitiveSocketLocalAddressSize", (void*)primitiveSocketLocalAddressSize}, {"SocketPlugin", "primitiveSocketLocalPort", (void*)primitiveSocketLocalPort}, {"SocketPlugin", "primitiveSocketReceiveDataAvailable", (void*)primitiveSocketReceiveDataAvailable}, {"SocketPlugin", "primitiveSocketReceiveDataBufCount", (void*)primitiveSocketReceiveDataBufCount}, {"SocketPlugin", "primitiveSocketReceiveUDPDataBufCount", (void*)primitiveSocketReceiveUDPDataBufCount}, {"SocketPlugin", "primitiveSocketRemoteAddress", (void*)primitiveSocketRemoteAddress}, + {"SocketPlugin", "primitiveSocketRemoteAddressResult", (void*)primitiveSocketRemoteAddressResult}, + {"SocketPlugin", "primitiveSocketRemoteAddressSize", (void*)primitiveSocketRemoteAddressSize}, {"SocketPlugin", "primitiveSocketRemotePort", (void*)primitiveSocketRemotePort}, {"SocketPlugin", "primitiveSocketSendDataBufCount", (void*)primitiveSocketSendDataBufCount}, {"SocketPlugin", "primitiveSocketSendDone", (void*)primitiveSocketSendDone}, Modified: branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c =================================================================== --- branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/nscogsrc/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,9 +1,9 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.154 uuid: 5cbb57c7-0a54-4b7e-848c-1f292759f1fa + VMPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139 + UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7 */ -static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139 " __DATE__ ; +static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7 " __DATE__ ; @@ -109,6 +109,7 @@ EXPORT(sqInt) primitiveChdir(void); EXPORT(sqInt) primitiveCreatePipe(void); EXPORT(sqInt) primitiveCreatePipeWithSessionIdentifier(void); +EXPORT(sqInt) primitiveDup(sqInt fileDescriptor); EXPORT(sqInt) primitiveDupTo(sqInt oldFileDescriptor, sqInt newFileDescriptor); EXPORT(sqInt) primitiveEnvironmentAt(void); EXPORT(sqInt) primitiveEnvironmentAtSymbol(void); @@ -249,9 +250,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (i)" + "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (i)" #else - "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (e)" + "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (e)" #endif ; static void *originalSigHandlers[NSIG]; @@ -1292,11 +1293,11 @@ path = transientCStringFromString(interpreterProxy->stackObjectValue(0)); if (chdir(path)) { interpreterProxy->pop(2); - interpreterProxy->push(interpreterProxy->nilObject()); + interpreterProxy->pushInteger(errno); } else { interpreterProxy->pop(2); - interpreterProxy->pushInteger(errno); + interpreterProxy->push(interpreterProxy->nilObject()); } } @@ -1420,6 +1421,24 @@ } +/* Call dup() to duplicate a file descriptor using the next available + descriptor. Answer + the new file descriptor or -1 on failure. + */ + +EXPORT(sqInt) +primitiveDup(sqInt fileDescriptor) +{ + sqInt fd; + int result; + + fd = interpreterProxy->stackIntegerValue(0); + result = dup(fd); + interpreterProxy->pop(2); + interpreterProxy->pushInteger(result); +} + + /* Call dup2() to duplicate a file descriptor. Answer the duplicated file descriptor or -1 on failure. */ @@ -4440,6 +4459,7 @@ {"UnixOSProcessPlugin", "primitiveChdir", (void*)primitiveChdir}, {"UnixOSProcessPlugin", "primitiveCreatePipe", (void*)primitiveCreatePipe}, {"UnixOSProcessPlugin", "primitiveCreatePipeWithSessionIdentifier", (void*)primitiveCreatePipeWithSessionIdentifier}, + {"UnixOSProcessPlugin", "primitiveDup", (void*)primitiveDup}, {"UnixOSProcessPlugin", "primitiveDupTo", (void*)primitiveDupTo}, {"UnixOSProcessPlugin", "primitiveEnvironmentAt", (void*)primitiveEnvironmentAt}, {"UnixOSProcessPlugin", "primitiveEnvironmentAtSymbol", (void*)primitiveEnvironmentAtSymbol}, Modified: branches/Cog/nscogsrc/vm/cointerp.c =================================================================== --- branches/Cog/nscogsrc/vm/cointerp.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/nscogsrc/vm/cointerp.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -1916,7 +1916,7 @@ /* 575 */ (void (*)(void))0, 0 }; static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void); -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.159"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.161"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */; volatile int sendTrace; @@ -22497,7 +22497,7 @@ /* This is a helper for primitiveObjectPointsTo so it *does not* check the frameContext field because that is an implicit self-reference not present - in the stale . + in the state . */ static sqInt Modified: branches/Cog/nscogsrc/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/nscogsrc/vm/gcc3x-cointerp.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -2,11 +2,11 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -1919,7 +1919,7 @@ /* 575 */ (void (*)(void))0, 0 }; static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void); -const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.159"; +const char *interpreterVersion = "Newspeak Virtual Machine CoInterpreter_VMMaker.oscog-eem.161"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */; volatile int sendTrace; @@ -22501,7 +22501,7 @@ /* This is a helper for primitiveObjectPointsTo so it *does not* check the frameContext field because that is an implicit self-reference not present - in the stale . + in the state . */ static sqInt Property changes on: branches/Cog/platforms/Cross/vm/sqSCCSVersion.h ___________________________________________________________________ Modified: checkindate - Wed May 2 16:06:54 PDT 2012 + Thu Jun 7 12:25:51 PDT 2012 Modified: branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c =================================================================== --- branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/platforms/unix/plugins/SocketPlugin/sqUnixSocket.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,17 +1,17 @@ /* sqUnixSocket.c -- Unix socket support * - * Copyright (C) 1996-2006 by Ian Piumarta and other authors/contributors + * Copyright (C) 1996-2007 by Ian Piumarta and other authors/contributors * listed elsewhere in this file. * All rights reserved. * * This file is part of Unix Squeak. * - * Permission is hereby granted, free of charge, to any person obtaining a - * copy of this software and associated documentation files (the "Software"), - * to deal in the Software without restriction, including without limitation - * the rights to use, copy, modify, merge, publish, distribute, sublicense, - * and/or sell copies of the Software, and to permit persons to whom the - * Software is furnished to do so, subject to the following conditions: + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: * * The above copyright notice and this permission notice shall be included in * all copies or substantial portions of the Software. @@ -20,9 +20,9 @@ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING - * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. */ /* Author: [hidden email] @@ -73,7 +73,9 @@ # include <time.h> # endif # include <sys/param.h> +# include <sys/stat.h> # include <sys/socket.h> +# include <sys/un.h> # include <netinet/in.h> # include <netinet/udp.h> # include <netinet/tcp.h> @@ -104,7 +106,7 @@ }; # else /* !ACORN */ extern int aioLastTick, aioThisTick; -# define FPRINTF(X) { aioThisTick= ioMSecs(); fprintf(stderr, "%8d %8d ", aioThisTick, aioThisTick - aioLastTick); aioLastTick= aioThisTick; fprintf X; } +# define FPRINTF(X) { aioThisTick= ioLowResMSecs(); fprintf(stderr, "%8d %8d ", aioThisTick, aioThisTick - aioLastTick); aioLastTick= aioThisTick; fprintf X; } # endif #else /* !DEBUG */ # define FPRINTF(X) @@ -117,6 +119,7 @@ #define UDPSocketType 1 #define RAWSocketType 2 + /*** Resolver states ***/ #define ResolverUninitialised 0 @@ -142,6 +145,14 @@ static char localHostName[MAXHOSTNAMELEN]; static u_long localHostAddress; /* GROSS IPv4 ASSUMPTION! */ +union sockaddr_any +{ + struct sockaddr sa; + struct sockaddr_un saun; + struct sockaddr_in sin; + struct sockaddr_in6 sin6; +}; + typedef struct privateSocketStruct { int s; /* Unix socket */ @@ -150,7 +161,10 @@ int writeSema; /* write io notification semaphore */ int sockState; /* connection + data state */ int sockError; /* errno after socket error */ - struct sockaddr_in peer; /* default send/recv address for UDP */ + union sockaddr_any peer; /* default send/recv address for UDP */ + socklen_t peerSize; /* dynamic sizeof(peer) */ + union sockaddr_any sender; /* sender address for last UDP receive */ + socklen_t senderSize; /* dynamic sizeof(sender) */ int multiListen; /* whether to listen for multiple connections */ int acceptedSock; /* a connection that has been accepted */ } privateSocketStruct; @@ -178,10 +192,11 @@ #define _PSP(S) (((S)->privateSocketPtr)) #define PSP(S) ((privateSocketStruct *)((S)->privateSocketPtr)) -#define SOCKET(S) (PSP(S)->s) -#define SOCKETSTATE(S) (PSP(S)->sockState) -#define SOCKETERROR(S) (PSP(S)->sockError) -#define SOCKETPEER(S) (PSP(S)->peer) +#define SOCKET(S) (PSP(S)->s) +#define SOCKETSTATE(S) (PSP(S)->sockState) +#define SOCKETERROR(S) (PSP(S)->sockError) +#define SOCKETPEER(S) (PSP(S)->peer) +#define SOCKETPEERSIZE(S) (PSP(S)->peerSize) /*** Resolver state ***/ @@ -504,26 +519,34 @@ /* create a new socket */ -void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(SocketPtr s, sqInt netType, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex) +void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(SocketPtr s, sqInt domain, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex) { - sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, socketType,recvBufSize, sendBufSize, semaIndex, semaIndex, semaIndex); + sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, domain, socketType,recvBufSize, sendBufSize, semaIndex, semaIndex, semaIndex); } -void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt netType, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex) +void sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt domain, sqInt socketType, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex) { int newSocket= -1; privateSocketStruct *pss; + switch (domain) + { + case 0: domain= AF_INET; break; /* SQ_SOCKET_DOMAIN_UNSPECIFIED */ + case 1: domain= AF_UNIX; break; /* SQ_SOCKET_DOMAIN_LOCAL */ + case 2: domain= AF_INET; break; /* SQ_SOCKET_DOMAIN_INET4 */ + case 3: domain= AF_INET6; break; /* SQ_SOCKET_DOMAIN_INET6 */ + } + s->sessionID= 0; if (TCPSocketType == socketType) { /* --- TCP --- */ - newSocket= socket(AF_INET, SOCK_STREAM, 0); + newSocket= socket(domain, SOCK_STREAM, 0); } else if (UDPSocketType == socketType) { /* --- UDP --- */ - newSocket= socket(AF_INET, SOCK_DGRAM, 0); + newSocket= socket(domain, SOCK_DGRAM, 0); } if (-1 == newSocket) { @@ -558,9 +581,9 @@ pss->sockError= 0; /* initial UDP peer := wildcard */ memset(&pss->peer, 0, sizeof(pss->peer)); - pss->peer.sin_family= AF_INET; - pss->peer.sin_port= 0; - pss->peer.sin_addr.s_addr= INADDR_ANY; + pss->peer.sin.sin_family= AF_INET; + pss->peer.sin.sin_port= 0; + pss->peer.sin.sin_addr.s_addr= INADDR_ANY; /* Squeak socket */ s->sessionID= thisNetSession; s->socketType= socketType; @@ -569,7 +592,7 @@ /* Note: socket is in BLOCKING mode until aioEnable is called for it! */ } -void sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt netType, sqInt protocol, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex) +void sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(SocketPtr s, sqInt domain, sqInt protocol, sqInt recvBufSize, sqInt sendBufSize, sqInt semaIndex, sqInt readSemaIndex, sqInt writeSemaIndex) { int newSocket= -1; privateSocketStruct *pss; @@ -605,9 +628,9 @@ pss->sockError= 0; /* initial UDP peer := wildcard */ memset(&pss->peer, 0, sizeof(pss->peer)); - pss->peer.sin_family= AF_INET; - pss->peer.sin_port= 0; - pss->peer.sin_addr.s_addr= INADDR_ANY; + pss->peer.sin.sin_family= AF_INET; + pss->peer.sin.sin_port= 0; + pss->peer.sin.sin_addr.s_addr= INADDR_ANY; /* Squeak socket */ s->sessionID= thisNetSession; s->socketType= RAWSocketType; @@ -718,7 +741,8 @@ /* --- UDP/RAW --- */ if (SOCKET(s) >= 0) { - memcpy((void *)&SOCKETPEER(s), (void *)&saddr, sizeof(SOCKETPEER(s))); + memcpy((void *)&SOCKETPEER(s), (void *)&saddr, sizeof(saddr)); + SOCKETPEERSIZE(s)= sizeof(struct sockaddr_in); SOCKETSTATE(s)= Connected; } } @@ -931,7 +955,7 @@ return ntohl(saddr.sin_addr.s_addr); } /* --- UDP/RAW --- */ - return ntohl(SOCKETPEER(s).sin_addr.s_addr); + return ntohl(SOCKETPEER(s).sin.sin_addr.s_addr); } @@ -969,7 +993,7 @@ return ntohs(saddr.sin_port); } /* --- UDP/RAW --- */ - return ntohs(SOCKETPEER(s).sin_port); + return ntohs(SOCKETPEER(s).sin.sin_port); } @@ -1033,6 +1057,9 @@ if (!socketValid(s)) return -1; + + SOCKETPEERSIZE(s)= 0; + if (TCPSocketType != s->socketType) { /* --- UDP/RAW --- */ @@ -1048,6 +1075,7 @@ FPRINTF((stderr, "UDP receiveData(%d) < 1 [a:%d]\n", SOCKET(s), errno)); return 0; } + SOCKETPEERSIZE(s)= addrSize; } else { @@ -1129,7 +1157,7 @@ */ sqInt sqSocketReceiveUDPDataBufCountaddressportmoreFlag(SocketPtr s, char *buf, sqInt bufSize, sqInt *address, sqInt *port, sqInt *moreFlag) { - if (socketValid(s) && (TCPSocketType != s->socketType)) + if (socketValid(s) && (TCPSocketType != s->socketType)) /* --- UDP/RAW --- */ { struct sockaddr_in saddr; socklen_t addrSize= sizeof(saddr); @@ -1403,6 +1431,7 @@ { PSP(s)->sockError= errno; interpreterProxy->success(false); + return; } } @@ -1431,9 +1460,9 @@ sqInt sqResolverStatus(void) { - if(!thisNetSession) + if (!thisNetSession) return ResolverUninitialised; - if(lastError != 0) + if (lastError != 0) return ResolverError; return ResolverSuccess; } @@ -1467,3 +1496,703 @@ /* we're done before we even started */ interpreterProxy->signalSemaphoreWithIndex(resolverSema); } + + +/* ikp 2007-06-07: Generalised primitives for IPv6, &c. */ + +/* flags */ + +#define SQ_SOCKET_NUMERIC (1<<0) +#define SQ_SOCKET_PASSIVE (1<<1) + +/* family */ + +#define SQ_SOCKET_FAMILY_UNSPECIFIED 0 +#define SQ_SOCKET_FAMILY_LOCAL 1 +#define SQ_SOCKET_FAMILY_INET4 2 +#define SQ_SOCKET_FAMILY_INET6 3 +#define SQ_SOCKET_FAMILY_MAX 4 + +/* type */ + +#define SQ_SOCKET_TYPE_UNSPECIFIED 0 +#define SQ_SOCKET_TYPE_STREAM 1 +#define SQ_SOCKET_TYPE_DGRAM 2 +#define SQ_SOCKET_TYPE_MAX 3 + +/* protocol */ + +#define SQ_SOCKET_PROTOCOL_UNSPECIFIED 0 +#define SQ_SOCKET_PROTOCOL_TCP 1 +#define SQ_SOCKET_PROTOCOL_UDP 2 +#define SQ_SOCKET_PROTOCOL_MAX 3 + +void sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(char *hostName, sqInt hostSize, char *servName, sqInt servSize, + sqInt flags, sqInt family, sqInt type, sqInt protocol); +sqInt sqResolverGetAddressInfoSize(void); +void sqResolverGetAddressInfoResultSize(char *addr, sqInt addrSize); +sqInt sqResolverGetAddressInfoFamily(void); +sqInt sqResolverGetAddressInfoType(void); +sqInt sqResolverGetAddressInfoProtocol(void); +sqInt sqResolverGetAddressInfoNext(void); + +sqInt sqSocketAddressSizeGetPort(char *addr, sqInt addrSize); +void sqSocketAddressSizeSetPort(char *addr, sqInt addrSize, sqInt port); + +void sqResolverGetNameInfoSizeFlags(char *addr, sqInt addrSize, sqInt flags); +sqInt sqResolverGetNameInfoHostSize(void); +void sqResolverGetNameInfoHostResultSize(char *name, sqInt nameSize); +sqInt sqResolverGetNameInfoServiceSize(void); +void sqResolverGetNameInfoServiceResultSize(char *name, sqInt nameSize); + +sqInt sqResolverHostNameSize(void); +void sqResolverHostNameResultSize(char *name, sqInt nameSize); + +void sqSocketBindToAddressSize(SocketPtr s, char *addr, sqInt addrSize); +void sqSocketListenBacklog(SocketPtr s, sqInt backlogSize); +void sqSocketConnectToAddressSize(SocketPtr s, char *addr, sqInt addrSize); + +sqInt sqSocketLocalAddressSize(SocketPtr s); +void sqSocketLocalAddressResultSize(SocketPtr s, char *addr, int addrSize); +sqInt sqSocketRemoteAddressSize(SocketPtr s); +void sqSocketRemoteAddressResultSize(SocketPtr s, char *addr, int addrSize); + +sqInt sqSocketSendUDPToSizeDataBufCount(SocketPtr s, char *addr, sqInt addrSize, char *buf, sqInt bufSize); +sqInt sqSocketReceiveUDPDataBufCount(SocketPtr s, char *buf, sqInt bufSize); + + +/* ---- address and service lookup ---- */ + + +static struct addrinfo *addrList= 0; +static struct addrinfo *addrInfo= 0; +static struct addrinfo *localInfo= 0; + + +void sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(char *hostName, sqInt hostSize, char *servName, sqInt servSize, + sqInt flags, sqInt family, sqInt type, sqInt protocol) +{ + char host[MAXHOSTNAMELEN+1], serv[MAXHOSTNAMELEN+1]; + struct addrinfo request; + int gaiError= 0; + + FPRINTF((stderr, "GetAddressInfo %d %d %d %d %d %d\n", hostSize, servSize, flags, family, type, protocol)); + + if (addrList) + { + freeaddrinfo(addrList); + addrList= addrInfo= 0; + } + + if (localInfo) + { + free(localInfo->ai_addr); + free(localInfo); + localInfo= addrInfo= 0; + } + + if ((!thisNetSession) + || (hostSize < 0) || (hostSize > MAXHOSTNAMELEN) + || (servSize < 0) || (servSize > MAXHOSTNAMELEN) + || (family < 0) || (family >= SQ_SOCKET_FAMILY_MAX) + || (type < 0) || (type >= SQ_SOCKET_TYPE_MAX) + || (protocol < 0) || (protocol >= SQ_SOCKET_PROTOCOL_MAX)) + goto fail; + + if (hostSize) + memcpy(host, hostName, hostSize); + host[hostSize]= '\0'; + + if (servSize) + memcpy(serv, servName, servSize); + serv[servSize]= '\0'; + + FPRINTF((stderr, " -> GetAddressInfo %s %s\n", host, serv)); + + if (servSize && (family == SQ_SOCKET_FAMILY_LOCAL) && (servSize < (int)sizeof(((struct sockaddr_un *)0)->sun_path)) && !(flags & SQ_SOCKET_NUMERIC)) + { + struct stat st; + if ((0 == stat(servName, &st)) && (st.st_mode & S_IFSOCK)) + { + struct sockaddr_un *saun= calloc(1, sizeof(struct sockaddr_un)); + localInfo= (struct addrinfo *)calloc(1, sizeof(struct addrinfo)); + localInfo->ai_family= AF_UNIX; + localInfo->ai_socktype= SOCK_STREAM; + localInfo->ai_addrlen= sizeof(struct sockaddr_un); + localInfo->ai_addr= (struct sockaddr *)saun; + /*saun->sun_len= sizeof(struct sockaddr_un);*/ + saun->sun_family= AF_UNIX; + memcpy(saun->sun_path, servName, servSize); + saun->sun_path[servSize]= '\0'; + addrInfo= localInfo; + interpreterProxy->signalSemaphoreWithIndex(resolverSema); + return; + } + } + + memset(&request, 0, sizeof(request)); + + if (flags & SQ_SOCKET_NUMERIC) request.ai_flags |= AI_NUMERICHOST; + if (flags & SQ_SOCKET_PASSIVE) request.ai_flags |= AI_PASSIVE; + + switch (family) + { + case SQ_SOCKET_FAMILY_LOCAL: request.ai_family= AF_UNIX; break; + case SQ_SOCKET_FAMILY_INET4: request.ai_family= AF_INET; break; + case SQ_SOCKET_FAMILY_INET6: request.ai_family= AF_INET6; break; + } + + switch (type) + { + case SQ_SOCKET_TYPE_STREAM: request.ai_socktype= SOCK_STREAM; break; + case SQ_SOCKET_TYPE_DGRAM: request.ai_socktype= SOCK_DGRAM; break; + } + + switch (protocol) + { + case SQ_SOCKET_PROTOCOL_TCP: request.ai_protocol= IPPROTO_TCP; break; + case SQ_SOCKET_PROTOCOL_UDP: request.ai_protocol= IPPROTO_UDP; break; + } + + gaiError= getaddrinfo(hostSize ? host : 0, servSize ? serv : 0, &request, &addrList); + + if (gaiError) + { + /* Linux gives you either <netdb.h> with correct NI_* bit definitions and no EAI_* definitions at all + or <bind/netdb.h> with incorrect NI_* bit definitions and the EAI_* definitions we need. + We cannot distinguish between impossible constraints and genuine lookup failure, so err conservatively. */ +# if defined(EAI_BADHINTS) + if (EAI_BADHINTS != gaiError) + { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(gaiError)); + lastError= gaiError; + goto fail; + } +# else + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(gaiError)); +# endif + addrList= 0; /* succeed with zero results for impossible constraints */ + } + + addrInfo= addrList; + interpreterProxy->signalSemaphoreWithIndex(resolverSema); + return; + + fail: + interpreterProxy->success(false); + return; +} + + +struct addressHeader +{ + int sessionID; + int size; +}; + +#define AddressHeaderSize sizeof(struct addressHeader) + +#define addressHeader(A) ((struct addressHeader *)(A)) +#define socketAddress(A) ((struct sockaddr *)((char *)(A) + AddressHeaderSize)) + +#define addressValid(A, S) (thisNetSession && (thisNetSession == addressHeader(A)->sessionID) && (addressHeader(A)->size == (int)((S) - AddressHeaderSize))) +#define addressSize(A) (addressHeader(A)->size) + + +#if 0 +static void dumpAddr(struct sockaddr *addr, int addrSize) +{ + int i; + for (i= 0; i < addrSize; ++i) + fprintf(stderr, "%02x ", ((unsigned char *)addr)[i]); + fprintf(stderr, " "); + switch (addr->sa_family) + { + case AF_UNIX: fprintf(stderr, "local\n"); break; + case AF_INET: fprintf(stderr, "inet\n"); break; + case AF_INET6: fprintf(stderr, "inet6\n"); break; + default: fprintf(stderr, "?\n"); break; + } +} +#endif + +sqInt sqResolverGetAddressInfoSize(void) +{ + if (!addrInfo) + return -1; + return AddressHeaderSize + addrInfo->ai_addrlen; +} + + +void sqResolverGetAddressInfoResultSize(char *addr, sqInt addrSize) +{ + if ((!addrInfo) || (addrSize < (int)(AddressHeaderSize + addrInfo->ai_addrlen))) + { + interpreterProxy->success(false); + return; + } + + addressHeader(addr)->sessionID= thisNetSession; + addressHeader(addr)->size= addrInfo->ai_addrlen; + memcpy(socketAddress(addr), addrInfo->ai_addr, addrInfo->ai_addrlen); + /*dumpAddr(socketAddress(addr), addrSize - AddressHeaderSize);*/ +} + + +sqInt sqResolverGetAddressInfoFamily(void) +{ + if (!addrInfo) + { + interpreterProxy->success(false); + return 0; + } + + switch (addrInfo->ai_family) + { + case AF_UNIX: return SQ_SOCKET_FAMILY_LOCAL; + case AF_INET: return SQ_SOCKET_FAMILY_INET4; + case AF_INET6: return SQ_SOCKET_FAMILY_INET6; + } + + return SQ_SOCKET_FAMILY_UNSPECIFIED; +} + + +sqInt sqResolverGetAddressInfoType(void) +{ + if (!addrInfo) + { + interpreterProxy->success(false); + return 0; + } + + switch (addrInfo->ai_socktype) + { + case SOCK_STREAM: return SQ_SOCKET_TYPE_STREAM; + case SOCK_DGRAM: return SQ_SOCKET_TYPE_DGRAM; + } + + return SQ_SOCKET_TYPE_UNSPECIFIED; +} + + +sqInt sqResolverGetAddressInfoProtocol(void) +{ + if (!addrInfo) + { + interpreterProxy->success(false); + return 0; + } + + switch (addrInfo->ai_protocol) + { + case IPPROTO_TCP: return SQ_SOCKET_PROTOCOL_TCP; + case IPPROTO_UDP: return SQ_SOCKET_PROTOCOL_UDP; + } + + return SQ_SOCKET_PROTOCOL_UNSPECIFIED; +} + + +sqInt sqResolverGetAddressInfoNext(void) +{ + return (addrInfo && (addrInfo= addrInfo->ai_next)) ? true : false; +} + + +/* ---- address manipulation ---- */ + + +sqInt sqSocketAddressSizeGetPort(char *addr, sqInt addrSize) +{ + if (addressValid(addr, addrSize)) + switch (socketAddress(addr)->sa_family) + { + case AF_INET: return ntohs(((struct sockaddr_in *)socketAddress(addr))->sin_port); + case AF_INET6: return ntohs(((struct sockaddr_in6 *)socketAddress(addr))->sin6_port); + } + + interpreterProxy->success(false); + return 0; +} + + +void sqSocketAddressSizeSetPort(char *addr, sqInt addrSize, sqInt port) +{ + if (addressValid(addr, addrSize)) + switch (socketAddress(addr)->sa_family) + { + case AF_INET: ((struct sockaddr_in *)socketAddress(addr))->sin_port= htons(port); return; + case AF_INET6: ((struct sockaddr_in6 *)socketAddress(addr))->sin6_port= htons(port); return; + } + + interpreterProxy->success(false); +} + + +/* ---- host name lookup ---- */ + + +static char hostNameInfo[MAXHOSTNAMELEN+1]; +static char servNameInfo[MAXHOSTNAMELEN+1]; + +static int nameInfoValid= 0; + + +void sqResolverGetNameInfoSizeFlags(char *addr, sqInt addrSize, sqInt flags) +{ + int niFlags= 0; + int gaiError= 0; + + FPRINTF((stderr, "GetNameInfoSizeFlags %p %d %d\n", addr, addrSize, flags)); + + nameInfoValid= 0; + + if (!addressValid(addr, addrSize)) + goto fail; + + niFlags |= NI_NOFQDN; + + if (flags & SQ_SOCKET_NUMERIC) niFlags |= (NI_NUMERICHOST | NI_NUMERICSERV); + + /*dumpAddr(socketAddress(addr), addrSize - AddressHeaderSize); fprintf(stderr, "%02x\n", niFlags);*/ + + gaiError= getnameinfo(socketAddress(addr), addrSize - AddressHeaderSize, + hostNameInfo, sizeof(hostNameInfo), + servNameInfo, sizeof(servNameInfo), + niFlags); + + if (gaiError) + { + fprintf(stderr, "getnameinfo: %s\n", gai_strerror(gaiError)); + lastError= gaiError; + goto fail; + } + + nameInfoValid= 1; + interpreterProxy->signalSemaphoreWithIndex(resolverSema); + return; + + fail: + interpreterProxy->success(false); +} + + +sqInt sqResolverGetNameInfoHostSize(void) +{ + if (!nameInfoValid) + { + interpreterProxy->success(false); + return 0; + } + return strlen(hostNameInfo); +} + + +void sqResolverGetNameInfoHostResultSize(char *name, sqInt nameSize) +{ + int len; + + if (!nameInfoValid) + goto fail; + + len= strlen(hostNameInfo); + if (nameSize < len) + goto fail; + + memcpy(name, hostNameInfo, len); + return; + + fail: + interpreterProxy->success(false); +} + + +sqInt sqResolverGetNameInfoServiceSize(void) +{ + if (!nameInfoValid) + { + interpreterProxy->success(false); + return 0; + } + return strlen(servNameInfo); +} + + +void sqResolverGetNameInfoServiceResultSize(char *name, sqInt nameSize) +{ + int len; + + if (!nameInfoValid) + goto fail; + + len= strlen(servNameInfo); + if (nameSize < len) + goto fail; + + memcpy(name, servNameInfo, len); + return; + + fail: + interpreterProxy->success(false); +} + + +sqInt sqResolverHostNameSize(void) +{ + char buf[MAXHOSTNAMELEN+1]; + if (gethostname(buf, sizeof(buf))) + { + interpreterProxy->success(false); + return 0; + } + return strlen(buf); +} + + +void sqResolverHostNameResultSize(char *name, sqInt nameSize) +{ + char buf[MAXHOSTNAMELEN+1]; + int len; + if (gethostname(buf, sizeof(buf)) || (nameSize < (len= strlen(buf)))) + { + interpreterProxy->success(false); + return; + } + memcpy(name, buf, len); +} + + +/* ---- circuit setup ---- */ + + +void sqSocketBindToAddressSize(SocketPtr s, char *addr, sqInt addrSize) +{ + privateSocketStruct *pss= PSP(s); + + if (!(socketValid(s) && addressValid(addr, addrSize))) + goto fail; + + if (bind(SOCKET(s), socketAddress(addr), addressSize(addr)) == 0) + return; + + pss->sockError= errno; + + fail: + interpreterProxy->success(false); +} + + +void sqSocketListenBacklog(SocketPtr s, sqInt backlogSize) +{ + if (!socketValid(s)) + goto fail; + + if ((backlogSize > 1) && (s->socketType != TCPSocketType)) + goto fail; + + PSP(s)->multiListen= (backlogSize > 1); + + FPRINTF((stderr, "listenBacklog(%d, %d)\n", SOCKET(s), backlogSize)); + + if (TCPSocketType == s->socketType) + { + listen(SOCKET(s), backlogSize); /* acceptHandler catches errors */ + SOCKETSTATE(s)= WaitingForConnection; + aioEnable(SOCKET(s), PSP(s), 0); + aioHandle(SOCKET(s), acceptHandler, AIO_RX); /* R => accept() */ + } + + return; + + fail: + interpreterProxy->success(false); + return; +} + + +void sqSocketConnectToAddressSize(SocketPtr s, char *addr, sqInt addrSize) +{ + /* TCP => open a connection. + * UDP => set remote address. + */ + if (!(socketValid(s) && addressValid(addr, addrSize))) + { + interpreterProxy->success(false); + return; + } + + FPRINTF((stderr, "connectToAddressSize(%d)\n", SOCKET(s))); + + if (TCPSocketType != s->socketType) /* --- UDP/RAW --- */ + { + if (SOCKET(s) >= 0) + { + memcpy((void *)&SOCKETPEER(s), socketAddress(addr), addressSize(addr)); + SOCKETPEERSIZE(s)= addressSize(addr); + SOCKETSTATE(s)= Connected; + } + } + else /* --- TCP --- */ + { + int result; + aioEnable(SOCKET(s), PSP(s), 0); + result= connect(SOCKET(s), socketAddress(addr), addressSize(addr)); + FPRINTF((stderr, "connect() => %d\n", result)); + if (result == 0) + { + /* connection completed synchronously */ + SOCKETSTATE(s)= Connected; + notify(PSP(s), CONN_NOTIFY); + setLinger(SOCKET(s), 1); + } + else + { + if (errno == EINPROGRESS || errno == EWOULDBLOCK) + { + /* asynchronous connection in progress */ + SOCKETSTATE(s)= WaitingForConnection; + aioHandle(SOCKET(s), connectHandler, AIO_WX); /* W => connect() */ + } + else + { + /* connection error */ + perror("sqConnectToAddressSize"); + SOCKETSTATE(s)= Unconnected; + SOCKETERROR(s)= errno; + notify(PSP(s), CONN_NOTIFY); + } + } + } +} + + +sqInt sqSocketLocalAddressSize(SocketPtr s) +{ + union sockaddr_any saddr; + socklen_t saddrSize= sizeof(saddr); + + if (!socketValid(s)) + return -1; + + if (getsockname(SOCKET(s), &saddr.sa, &saddrSize)) + return 0; + + return AddressHeaderSize + saddrSize; +} + + +void sqSocketLocalAddressResultSize(SocketPtr s, char *addr, int addrSize) +{ + union sockaddr_any saddr; + socklen_t saddrSize= sizeof(saddr); + + if (!socketValid(s)) + goto fail; + + if (getsockname(SOCKET(s), &saddr.sa, &saddrSize)) + goto fail; + + if (addrSize != (int)(AddressHeaderSize + saddrSize)) + goto fail; + + addressHeader(addr)->sessionID= thisNetSession; + addressHeader(addr)->size= saddrSize; + memcpy(socketAddress(addr), &saddr.sa, saddrSize); + return; + + fail: + interpreterProxy->success(false); + return; +} + + +sqInt sqSocketRemoteAddressSize(SocketPtr s) +{ + union sockaddr_any saddr; + socklen_t saddrSize= sizeof(saddr); + + if (!socketValid(s)) + return -1; + + if (TCPSocketType == s->socketType) /* --- TCP --- */ + { + if (0 == getpeername(SOCKET(s), &saddr.sa, &saddrSize)) + { + if (saddrSize < sizeof(SOCKETPEER(s))) + { + memcpy(&SOCKETPEER(s), &saddr.sa, saddrSize); + return AddressHeaderSize + (SOCKETPEERSIZE(s)= saddrSize); + } + } + } + else if (SOCKETPEERSIZE(s)) /* --- UDP/RAW --- */ + { + return AddressHeaderSize + SOCKETPEERSIZE(s); + } + + return -1; +} + + +void sqSocketRemoteAddressResultSize(SocketPtr s, char *addr, int addrSize) +{ + if (!socketValid(s) + || !SOCKETPEERSIZE(s) + || (addrSize != (int)(AddressHeaderSize + SOCKETPEERSIZE(s)))) { + interpreterProxy->success(false); + return; + } + + addressHeader(addr)->sessionID= thisNetSession; + addressHeader(addr)->size= SOCKETPEERSIZE(s); + memcpy(socketAddress(addr), &SOCKETPEER(s), SOCKETPEERSIZE(s)); + SOCKETPEERSIZE(s)= 0; +} + + +/* ---- communication ---- */ + + +sqInt sqSocketSendUDPToSizeDataBufCount(SocketPtr s, char *addr, sqInt addrSize, char *buf, sqInt bufSize) +{ + FPRINTF((stderr, "sendTo(%d)\n", SOCKET(s))); + if (socketValid(s) && addressValid(addr, addrSize) && (TCPSocketType != s->socketType)) /* --- UDP/RAW --- */ + { + int nsent= sendto(SOCKET(s), buf, bufSize, 0, socketAddress(addr), addrSize - AddressHeaderSize); + if (nsent >= 0) + return nsent; + + if (errno == EWOULDBLOCK) /* asynchronous write in progress */ + return 0; + + FPRINTF((stderr, "UDP send failed\n")); + SOCKETERROR(s)= errno; + } + + interpreterProxy->success(false); + return 0; +} + + +sqInt sqSocketReceiveUDPDataBufCount(SocketPtr s, char *buf, sqInt bufSize) +{ + FPRINTF((stderr, "recvFrom(%d)\n", SOCKET(s))); + if (socketValid(s) && (TCPSocketType != s->socketType)) /* --- UDP/RAW --- */ + { + socklen_t saddrSize= sizeof(SOCKETPEER(s)); + int nread= recvfrom(SOCKET(s), buf, bufSize, 0, &SOCKETPEER(s).sa, &saddrSize); + if (nread >= 0) + { + SOCKETPEERSIZE(s)= saddrSize; + return nread; + } + SOCKETPEERSIZE(s)= 0; + if (errno == EWOULDBLOCK) /* asynchronous read in progress */ + return 0; + SOCKETERROR(s)= errno; + FPRINTF((stderr, "receiveData(%d)= %da\n", SOCKET(s), 0)); + } + interpreterProxy->success(false); + return 0; +} Added: branches/Cog/processors/IA32/linuxbochs/bochsconfig.h =================================================================== --- branches/Cog/processors/IA32/linuxbochs/bochsconfig.h (rev 0) +++ branches/Cog/processors/IA32/linuxbochs/bochsconfig.h 2012-06-07 19:29:52 UTC (rev 2556) @@ -0,0 +1 @@ +link config.h \ No newline at end of file Property changes on: branches/Cog/processors/IA32/linuxbochs/bochsconfig.h ___________________________________________________________________ Added: svn:special + * Modified: branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c =================================================================== --- branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/src/plugins/SocketPlugin/SocketPlugin.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,9 +1,9 @@ /* Automatically generated by - SmartSyntaxPluginCodeGenerator VMMaker-oscog.40 uuid: 637db40c-33c6-4263-816e-1b8cc19e3c99 + SmartSyntaxPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - SocketPlugin VMMaker-oscog.40 uuid: 637db40c-33c6-4263-816e-1b8cc19e3c99 + SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "SocketPlugin VMMaker-oscog.40 uuid: 637db40c-33c6-4263-816e-1b8cc19e3c99 " __DATE__ ; +static char __buildInfo[] = "SocketPlugin VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; @@ -38,6 +38,8 @@ /*** Constants ***/ +#define BytesPerWord 4 +#define MULTIPLEBYTECODESETS 0 /*** Function Prototypes ***/ @@ -55,6 +57,20 @@ EXPORT(sqInt) primitiveResolverAbortLookup(void); EXPORT(sqInt) primitiveResolverAddressLookupResult(void); EXPORT(sqInt) primitiveResolverError(void); +EXPORT(sqInt) primitiveResolverGetAddressInfo(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoFamily(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoNext(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoProtocol(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoResult(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoSize(void); +EXPORT(sqInt) primitiveResolverGetAddressInfoType(void); +EXPORT(sqInt) primitiveResolverGetNameInfo(void); +EXPORT(sqInt) primitiveResolverGetNameInfoHostResult(void); +EXPORT(sqInt) primitiveResolverGetNameInfoHostSize(void); +EXPORT(sqInt) primitiveResolverGetNameInfoServiceResult(void); +EXPORT(sqInt) primitiveResolverGetNameInfoServiceSize(void); +EXPORT(sqInt) primitiveResolverHostNameResult(void); +EXPORT(sqInt) primitiveResolverHostNameSize(void); EXPORT(sqInt) primitiveResolverLocalAddress(void); EXPORT(sqInt) primitiveResolverNameLookupResult(void); EXPORT(sqInt) primitiveResolverStartAddressLookup(void); @@ -63,9 +79,13 @@ EXPORT(sqInt) primitiveSocketAbortConnection(void); EXPORT(sqInt) primitiveSocketAccept(void); EXPORT(sqInt) primitiveSocketAccept3Semaphores(void); +EXPORT(sqInt) primitiveSocketAddressGetPort(void); +EXPORT(sqInt) primitiveSocketAddressSetPort(void); +EXPORT(sqInt) primitiveSocketBindTo(void); EXPORT(sqInt) primitiveSocketBindToPort(void); EXPORT(sqInt) primitiveSocketCloseConnection(void); EXPORT(sqInt) primitiveSocketConnectionStatus(void); +EXPORT(sqInt) primitiveSocketConnectTo(void); EXPORT(sqInt) primitiveSocketConnectToPort(void); EXPORT(sqInt) primitiveSocketCreate(void); EXPORT(sqInt) primitiveSocketCreate3Semaphores(void); @@ -76,13 +96,18 @@ EXPORT(sqInt) primitiveSocketListenOnPort(void); EXPORT(sqInt) primitiveSocketListenOnPortBacklog(void); EXPORT(sqInt) primitiveSocketListenOnPortBacklogInterface(void); +EXPORT(sqInt) primitiveSocketListenWithBacklog(void); EXPORT(sqInt) primitiveSocketListenWithOrWithoutBacklog(void); EXPORT(sqInt) primitiveSocketLocalAddress(void); +EXPORT(sqInt) primitiveSocketLocalAddressResult(void); +EXPORT(sqInt) primitiveSocketLocalAddressSize(void); EXPORT(sqInt) primitiveSocketLocalPort(void); EXPORT(sqInt) primitiveSocketReceiveDataAvailable(void); EXPORT(sqInt) primitiveSocketReceiveDataBufCount(void); EXPORT(sqInt) primitiveSocketReceiveUDPDataBufCount(void); EXPORT(sqInt) primitiveSocketRemoteAddress(void); +EXPORT(sqInt) primitiveSocketRemoteAddressResult(void); +EXPORT(sqInt) primitiveSocketRemoteAddressSize(void); EXPORT(sqInt) primitiveSocketRemotePort(void); EXPORT(sqInt) primitiveSocketSendDataBufCount(void); EXPORT(sqInt) primitiveSocketSendDone(void); @@ -103,9 +128,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "SocketPlugin VMMaker-oscog.40 (i)" + "SocketPlugin VMMaker.oscog-eem.161 (i)" #else - "SocketPlugin VMMaker-oscog.40 (e)" + "SocketPlugin VMMaker.oscog-eem.161 (e)" #endif ; static void * sCCLOPfn; @@ -182,7 +207,7 @@ moduleUnloaded(char *aModuleName) { if ((strcmp(aModuleName, "SecurityPlugin")) == 0) { - sDSAfn = sHSAfn = sCCTPfn = sCCLOPfn = sCCSOTfn = 0; + sDSAfn = (sHSAfn = (sCCTPfn = (sCCLOPfn = (sCCSOTfn = 0)))); } } @@ -295,6 +320,321 @@ } EXPORT(sqInt) +primitiveResolverGetAddressInfo(void) +{ + sqInt family; + sqInt flags; + char *hostName; + sqInt hostSize; + sqInt protocol; + char *servName; + sqInt servSize; + sqInt type; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(5))); + hostName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(5)))); + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(4))); + servName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(4)))); + flags = interpreterProxy->stackIntegerValue(3); + family = interpreterProxy->stackIntegerValue(2); + type = interpreterProxy->stackIntegerValue(1); + protocol = interpreterProxy->stackIntegerValue(0); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + hostSize = interpreterProxy->byteSizeOf(((sqInt)(long)(hostName) - 4)); + servSize = interpreterProxy->byteSizeOf(((sqInt)(long)(servName) - 4)); + sqResolverGetAddressInfoHostSizeServiceSizeFlagsFamilyTypeProtocol(hostName, hostSize, servName, servSize, flags, family, type, protocol); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(6); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoFamily(void) +{ + sqInt family; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + family = sqResolverGetAddressInfoFamily(); + _return_value = interpreterProxy->integerObjectOf(family); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoNext(void) +{ + sqInt more; + sqInt _return_value; + + more = sqResolverGetAddressInfoNext(); + if (interpreterProxy->failed()) { + return null; + } + _return_value = (more) ? interpreterProxy->trueObject(): interpreterProxy->falseObject(); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoProtocol(void) +{ + sqInt protocol; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + protocol = sqResolverGetAddressInfoProtocol(); + _return_value = interpreterProxy->integerObjectOf(protocol); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoResult(void) +{ + sqInt addrSize; + char *socketAddress; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + socketAddress = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketAddress) - 4)); + sqResolverGetAddressInfoResultSize(socketAddress, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverGetAddressInfoSize(); + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetAddressInfoType(void) +{ + sqInt type; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + type = sqResolverGetAddressInfoType(); + _return_value = interpreterProxy->integerObjectOf(type); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfo(void) +{ + char *addrBase; + sqInt addrSize; + sqInt flags; + sqInt socketAddress; + + socketAddress = interpreterProxy->stackValue(1); + flags = interpreterProxy->stackIntegerValue(0); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + sqResolverGetNameInfoSizeFlags(addrBase, addrSize, flags); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoHostResult(void) +{ + sqInt addrSize; + char *socketName; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4)); + sqResolverGetNameInfoHostResultSize(socketName, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoHostSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverGetNameInfoHostSize(); + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoServiceResult(void) +{ + sqInt addrSize; + char *socketName; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + socketName = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + addrSize = interpreterProxy->byteSizeOf(((sqInt)(long)(socketName) - 4)); + sqResolverGetNameInfoServiceResultSize(socketName, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverGetNameInfoServiceSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverGetNameInfoServiceSize(); + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveResolverHostNameResult(void) +{ + sqInt nameSize; + char *nameString; + + interpreterProxy->success(interpreterProxy->isBytes(interpreterProxy->stackValue(0))); + nameString = ((char *) (interpreterProxy->firstIndexableField(interpreterProxy->stackValue(0)))); + if (interpreterProxy->failed()) { + return null; + } + if (!(interpreterProxy->failed())) { + nameSize = interpreterProxy->byteSizeOf(((sqInt)(long)(nameString) - 4)); + sqResolverHostNameResultSize(nameString, nameSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveResolverHostNameSize(void) +{ + sqInt size; + sqInt _return_value; + + if (!(interpreterProxy->failed())) { + size = sqResolverHostNameSize(); + if (!(interpreterProxy->failed())) { + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) primitiveResolverLocalAddress(void) { sqInt addr; @@ -396,7 +736,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(0); if (interpreterProxy->failed()) { @@ -405,13 +744,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketAbortConnection(s); } @@ -430,8 +765,6 @@ sqInt semaIndex; sqInt sendBufSize; SocketPtr serverSocket; - void *socketIndex; - void *socketIndex1; sqInt socketOop; sqInt sockHandle; @@ -445,25 +778,17 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(sockHandle)) && ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - serverSocket = null; - goto l2; - } - socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))); - serverSocket = socketIndex1; -l2: /* end socketValueOf: */; + serverSocket = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)))); if (!(interpreterProxy->failed())) { socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize()); /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; - l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketAcceptFromRecvBytesSendBytesSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex); } if (interpreterProxy->failed()) { @@ -483,8 +808,6 @@ sqInt semaIndex; sqInt sendBufSize; SocketPtr serverSocket; - void *socketIndex; - void *socketIndex1; sqInt socketOop; sqInt sockHandle; @@ -500,25 +823,17 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(sockHandle)) && ((interpreterProxy->byteSizeOf(sockHandle)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - serverSocket = null; - goto l2; - } - socketIndex1 = ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle))); - serverSocket = socketIndex1; -l2: /* end socketValueOf: */; + serverSocket = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(sockHandle)))); if (!(interpreterProxy->failed())) { socketOop = interpreterProxy->instantiateClassindexableSize(interpreterProxy->classByteArray(), socketRecordSize()); /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; - l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketAcceptFromRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, serverSocket, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema); } if (interpreterProxy->failed()) { @@ -529,6 +844,95 @@ } EXPORT(sqInt) +primitiveSocketAddressGetPort(void) +{ + sqInt addr; + char *addrBase; + sqInt addrSize; + sqInt port; + sqInt _return_value; + + addr = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + addrSize = interpreterProxy->byteSizeOf(addr); + addrBase = ((char *) (interpreterProxy->firstIndexableField(addr))); + if (!(interpreterProxy->failed())) { + port = sqSocketAddressSizeGetPort(addrBase, addrSize); + if (!(interpreterProxy->failed())) { + _return_value = interpreterProxy->integerObjectOf(port); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(1, _return_value); + return null; + } + } + if (interpreterProxy->failed()) { + return null; + } + return null; +} + +EXPORT(sqInt) +primitiveSocketAddressSetPort(void) +{ + sqInt addr; + char *addrBase; + sqInt addrSize; + sqInt portNumber; + + portNumber = interpreterProxy->stackIntegerValue(0); + addr = interpreterProxy->stackValue(1); + if (interpreterProxy->failed()) { + return null; + } + addrSize = interpreterProxy->byteSizeOf(addr); + addrBase = ((char *) (interpreterProxy->firstIndexableField(addr))); + if (!(interpreterProxy->failed())) { + sqSocketAddressSizeSetPort(addrBase, addrSize, portNumber); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(1); + return null; +} + +EXPORT(sqInt) +primitiveSocketBindTo(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketBindToAddressSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) primitiveSocketBindToPort(void) { sqInt addr; @@ -536,7 +940,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt sz; socket = interpreterProxy->stackValue(2); @@ -557,13 +960,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketBindToPort(s, addr, port); } @@ -579,7 +978,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(0); if (interpreterProxy->failed()) { @@ -588,13 +986,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketCloseConnection(s); } @@ -610,7 +1004,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; sqInt status; sqInt _return_value; @@ -621,13 +1014,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { status = sqSocketConnectionStatus(s); } @@ -640,6 +1029,38 @@ } EXPORT(sqInt) +primitiveSocketConnectTo(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketConnectToAddressSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) primitiveSocketConnectToPort(void) { sqInt addr; @@ -648,7 +1069,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt sz; socket = interpreterProxy->stackValue(2); @@ -668,7 +1088,7 @@ l1: /* end netAddressToInt: */; if (sCCTPfn != 0) { okToConnect = ((int (*) (int, int)) sCCTPfn)(addr, port); - if (!(okToConnect)) { + if (!okToConnect) { interpreterProxy->primitiveFail(); return null; } @@ -676,13 +1096,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketConnectToPort(s, addr, port); } @@ -702,7 +1118,6 @@ SocketPtr s; sqInt semaIndex; sqInt sendBufSize; - void *socketIndex; sqInt socketOop; sqInt socketType; @@ -716,7 +1131,7 @@ } if (sCCSOTfn != 0) { okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType); - if (!(okToCreate)) { + if (!okToCreate) { interpreterProxy->primitiveFail(); return null; } @@ -725,13 +1140,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex); if (interpreterProxy->failed()) { return null; @@ -751,7 +1162,6 @@ SocketPtr s; sqInt semaIndex; sqInt sendBufSize; - void *socketIndex; sqInt socketOop; sqInt socketType; @@ -767,7 +1177,7 @@ } if (sCCSOTfn != 0) { okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, socketType); - if (!(okToCreate)) { + if (!okToCreate) { interpreterProxy->primitiveFail(); return null; } @@ -776,13 +1186,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketCreateNetTypeSocketTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, socketType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema); if (interpreterProxy->failed()) { return null; @@ -803,7 +1209,6 @@ SocketPtr s; sqInt semaIndex; sqInt sendBufSize; - void *socketIndex; sqInt socketOop; netType = interpreterProxy->stackIntegerValue(6); @@ -818,7 +1223,7 @@ } if (sCCSOTfn != 0) { okToCreate = ((int (*) (int, int)) sCCSOTfn)(netType, protoType); - if (!(okToCreate)) { + if (!okToCreate) { interpreterProxy->primitiveFail(); return null; } @@ -827,13 +1232,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); sqSocketCreateRawProtoTypeRecvBytesSendBytesSemaIDReadSemaIDWriteSemaID(s, netType, protoType, recvBufSize, sendBufSize, semaIndex, aReadSema, aWriteSema); if (interpreterProxy->failed()) { return null; @@ -847,7 +1248,6 @@ { SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(0); if (interpreterProxy->failed()) { @@ -856,13 +1256,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { sqSocketDestroy(s); } @@ -879,7 +1275,6 @@ sqInt err; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -889,13 +1284,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (!(interpreterProxy->failed())) { err = sqSocketError(s); } @@ -918,7 +1309,6 @@ sqInt returnedValue; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(1); optionName = interpreterProxy->stackValue(0); @@ -928,13 +1318,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isBytes(optionName)); optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName))); optionNameSize = interpreterProxy->slotSizeOf(optionName); @@ -968,7 +1354,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(1); port = interpreterProxy->stackIntegerValue(0); @@ -978,21 +1363,19 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (sCCLOPfn != 0) { okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port); - if (!(okToListen)) { + if (!okToListen) { interpreterProxy->primitiveFail(); return null; } } - sqSocketListenOnPort(s, port); + if (!(interpreterProxy->failed())) { + sqSocketListenOnPort(s, port); + } if (interpreterProxy->failed()) { return null; } @@ -1013,7 +1396,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(2); port = interpreterProxy->stackIntegerValue(1); @@ -1024,16 +1406,12 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (sCCLOPfn != 0) { okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port); - if (!(okToListen)) { + if (!okToListen) { interpreterProxy->primitiveFail(); return null; } @@ -1062,7 +1440,6 @@ sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt sz; socket = interpreterProxy->stackValue(3); @@ -1076,16 +1453,12 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); if (sCCLOPfn != 0) { okToListen = ((int (*) (SocketPtr, int)) sCCLOPfn)(s, port); - if (!(okToListen)) { + if (!okToListen) { interpreterProxy->primitiveFail(); return null; } @@ -1106,7 +1479,35 @@ return null; } +EXPORT(sqInt) +primitiveSocketListenWithBacklog(void) +{ + sqInt backlogSize; + SocketPtr s; + sqInt socket; + socket = interpreterProxy->stackValue(1); + backlogSize = interpreterProxy->stackIntegerValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + if (!(interpreterProxy->failed())) { + sqSocketListenBacklog(s, backlogSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + + /* Backward compatibility */ EXPORT(sqInt) @@ -1126,7 +1527,6 @@ sqInt addr; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1136,13 +1536,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); addr = sqSocketLocalAddress(s); _return_value = intToNetAddress(addr); if (interpreterProxy->failed()) { @@ -1153,12 +1549,76 @@ } EXPORT(sqInt) +primitiveSocketLocalAddressResult(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketLocalAddressResultSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) +primitiveSocketLocalAddressSize(void) +{ + SocketPtr s; + sqInt size; + sqInt socket; + sqInt _return_value; + + socket = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + if (interpreterProxy->failed()) { + return null; + } + size = sqSocketLocalAddressSize(s); + if (interpreterProxy->failed()) { + return null; + } + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(2, _return_value); + return null; +} + +EXPORT(sqInt) primitiveSocketLocalPort(void) { sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1168,13 +1628,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); port = sqSocketLocalPort(s); _return_value = interpreterProxy->integerObjectOf(port); if (interpreterProxy->failed()) { @@ -1190,7 +1646,6 @@ sqInt dataIsAvailable; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1200,13 +1655,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); dataIsAvailable = sqSocketReceiveDataAvailable(s); _return_value = (dataIsAvailable) ? interpreterProxy->trueObject(): interpreterProxy->falseObject(); if (interpreterProxy->failed()) { @@ -1227,7 +1678,6 @@ sqInt count; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; sqInt _return_value; @@ -1241,13 +1691,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1257,7 +1703,7 @@ } interpreterProxy->success((startIndex >= 1) && ((count >= 0) - && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); + && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); if (!(interpreterProxy->failed())) { /* Note: adjust bufStart for zero-origin indexing */ @@ -1289,7 +1735,6 @@ sqInt results; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; socket = interpreterProxy->stackValue(3); @@ -1302,13 +1747,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1318,7 +1759,7 @@ } interpreterProxy->success((startIndex >= 1) && ((count >= 0) - && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); + && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); if (!(interpreterProxy->failed())) { /* Note: adjust bufStart for zero-origin indexing */ @@ -1361,7 +1802,6 @@ sqInt addr; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1371,13 +1811,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); addr = sqSocketRemoteAddress(s); _return_value = intToNetAddress(addr); if (interpreterProxy->failed()) { @@ -1388,12 +1824,76 @@ } EXPORT(sqInt) +primitiveSocketRemoteAddressResult(void) +{ + char *addrBase; + sqInt addrSize; + SocketPtr s; + sqInt socket; + sqInt socketAddress; + + socket = interpreterProxy->stackValue(1); + socketAddress = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + addrSize = interpreterProxy->byteSizeOf(socketAddress); + addrBase = ((char *) (interpreterProxy->firstIndexableField(socketAddress))); + if (!(interpreterProxy->failed())) { + sqSocketRemoteAddressResultSize(s, addrBase, addrSize); + } + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->pop(2); + return null; +} + +EXPORT(sqInt) +primitiveSocketRemoteAddressSize(void) +{ + SocketPtr s; + sqInt size; + sqInt socket; + sqInt _return_value; + + socket = interpreterProxy->stackValue(0); + if (interpreterProxy->failed()) { + return null; + } + /* begin socketValueOf: */ + interpreterProxy->success((interpreterProxy->isBytes(socket)) + && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); + if (interpreterProxy->failed()) { + return null; + } + size = sqSocketRemoteAddressSize(s); + if (interpreterProxy->failed()) { + return null; + } + _return_value = interpreterProxy->integerObjectOf(size); + if (interpreterProxy->failed()) { + return null; + } + interpreterProxy->popthenPush(2, _return_value); + return null; +} + +EXPORT(sqInt) primitiveSocketRemotePort(void) { sqInt port; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1403,13 +1903,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); port = sqSocketRemotePort(s); _return_value = interpreterProxy->integerObjectOf(port); if (interpreterProxy->failed()) { @@ -1430,7 +1926,6 @@ sqInt count; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; sqInt _return_value; @@ -1444,13 +1939,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1460,7 +1951,7 @@ } interpreterProxy->success((startIndex >= 1) && ((count >= 0) - && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); + && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); if (!(interpreterProxy->failed())) { /* Note: adjust bufStart for zero-origin indexing */ @@ -1483,7 +1974,6 @@ sqInt done; SocketPtr s; sqInt socket; - void *socketIndex; sqInt _return_value; socket = interpreterProxy->stackValue(0); @@ -1493,13 +1983,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); done = sqSocketSendDone(s); _return_value = (done) ? interpreterProxy->trueObject(): interpreterProxy->falseObject(); if (interpreterProxy->failed()) { @@ -1523,7 +2009,6 @@ sqInt portNumber; SocketPtr s; sqInt socket; - void *socketIndex; sqInt startIndex; sqInt sz; sqInt _return_value; @@ -1541,13 +2026,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l2; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l2: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isWordsOrBytes(array)); if (interpreterProxy->isWords(array)) { byteSize = 4; @@ -1557,7 +2038,7 @@ } interpreterProxy->success((startIndex >= 1) && ((count >= 0) - && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); + && (((startIndex + count) - 1) <= (interpreterProxy->slotSizeOf(array))))); if (!(interpreterProxy->failed())) { /* Note: adjust bufStart for zero-origin indexing */ @@ -1596,7 +2077,6 @@ sqInt returnedValue; SocketPtr s; sqInt socket; - void *socketIndex; socket = interpreterProxy->stackValue(2); optionName = interpreterProxy->stackValue(1); @@ -1607,13 +2087,9 @@ /* begin socketValueOf: */ interpreterProxy->success((interpreterProxy->isBytes(socket)) && ((interpreterProxy->byteSizeOf(socket)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - s = null; - goto l1; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socket))); - s = socketIndex; -l1: /* end socketValueOf: */; + s = (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socket)))); interpreterProxy->success(interpreterProxy->isBytes(optionName)); optionNameStart = ((char *) (interpreterProxy->firstIndexableField(optionName))); optionNameSize = interpreterProxy->slotSizeOf(optionName); @@ -1677,15 +2153,11 @@ static SocketPtr socketValueOf(sqInt socketOop) { - void *socketIndex; - interpreterProxy->success((interpreterProxy->isBytes(socketOop)) && ((interpreterProxy->byteSizeOf(socketOop)) == (socketRecordSize()))); - if (interpreterProxy->failed()) { - return null; - } - socketIndex = ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop))); - return socketIndex; + return (interpreterProxy->failed() + ? null + : ((SocketPtr) (interpreterProxy->firstIndexableField(socketOop)))); } static void @@ -1707,6 +2179,20 @@ {"SocketPlugin", "primitiveResolverAbortLookup", (void*)primitiveResolverAbortLookup}, {"SocketPlugin", "primitiveResolverAddressLookupResult", (void*)primitiveResolverAddressLookupResult}, {"SocketPlugin", "primitiveResolverError", (void*)primitiveResolverError}, + {"SocketPlugin", "primitiveResolverGetAddressInfo", (void*)primitiveResolverGetAddressInfo}, + {"SocketPlugin", "primitiveResolverGetAddressInfoFamily", (void*)primitiveResolverGetAddressInfoFamily}, + {"SocketPlugin", "primitiveResolverGetAddressInfoNext", (void*)primitiveResolverGetAddressInfoNext}, + {"SocketPlugin", "primitiveResolverGetAddressInfoProtocol", (void*)primitiveResolverGetAddressInfoProtocol}, + {"SocketPlugin", "primitiveResolverGetAddressInfoResult", (void*)primitiveResolverGetAddressInfoResult}, + {"SocketPlugin", "primitiveResolverGetAddressInfoSize", (void*)primitiveResolverGetAddressInfoSize}, + {"SocketPlugin", "primitiveResolverGetAddressInfoType", (void*)primitiveResolverGetAddressInfoType}, + {"SocketPlugin", "primitiveResolverGetNameInfo", (void*)primitiveResolverGetNameInfo}, + {"SocketPlugin", "primitiveResolverGetNameInfoHostResult", (void*)primitiveResolverGetNameInfoHostResult}, + {"SocketPlugin", "primitiveResolverGetNameInfoHostSize", (void*)primitiveResolverGetNameInfoHostSize}, + {"SocketPlugin", "primitiveResolverGetNameInfoServiceResult", (void*)primitiveResolverGetNameInfoServiceResult}, + {"SocketPlugin", "primitiveResolverGetNameInfoServiceSize", (void*)primitiveResolverGetNameInfoServiceSize}, + {"SocketPlugin", "primitiveResolverHostNameResult", (void*)primitiveResolverHostNameResult}, + {"SocketPlugin", "primitiveResolverHostNameSize", (void*)primitiveResolverHostNameSize}, {"SocketPlugin", "primitiveResolverLocalAddress", (void*)primitiveResolverLocalAddress}, {"SocketPlugin", "primitiveResolverNameLookupResult", (void*)primitiveResolverNameLookupResult}, {"SocketPlugin", "primitiveResolverStartAddressLookup", (void*)primitiveResolverStartAddressLookup}, @@ -1715,9 +2201,13 @@ {"SocketPlugin", "primitiveSocketAbortConnection", (void*)primitiveSocketAbortConnection}, {"SocketPlugin", "primitiveSocketAccept", (void*)primitiveSocketAccept}, {"SocketPlugin", "primitiveSocketAccept3Semaphores", (void*)primitiveSocketAccept3Semaphores}, + {"SocketPlugin", "primitiveSocketAddressGetPort", (void*)primitiveSocketAddressGetPort}, + {"SocketPlugin", "primitiveSocketAddressSetPort", (void*)primitiveSocketAddressSetPort}, + {"SocketPlugin", "primitiveSocketBindTo", (void*)primitiveSocketBindTo}, {"SocketPlugin", "primitiveSocketBindToPort", (void*)primitiveSocketBindToPort}, {"SocketPlugin", "primitiveSocketCloseConnection", (void*)primitiveSocketCloseConnection}, {"SocketPlugin", "primitiveSocketConnectionStatus", (void*)primitiveSocketConnectionStatus}, + {"SocketPlugin", "primitiveSocketConnectTo", (void*)primitiveSocketConnectTo}, {"SocketPlugin", "primitiveSocketConnectToPort", (void*)primitiveSocketConnectToPort}, {"SocketPlugin", "primitiveSocketCreate", (void*)primitiveSocketCreate}, {"SocketPlugin", "primitiveSocketCreate3Semaphores", (void*)primitiveSocketCreate3Semaphores}, @@ -1728,13 +2218,18 @@ {"SocketPlugin", "primitiveSocketListenOnPort", (void*)primitiveSocketListenOnPort}, {"SocketPlugin", "primitiveSocketListenOnPortBacklog", (void*)primitiveSocketListenOnPortBacklog}, {"SocketPlugin", "primitiveSocketListenOnPortBacklogInterface", (void*)primitiveSocketListenOnPortBacklogInterface}, + {"SocketPlugin", "primitiveSocketListenWithBacklog", (void*)primitiveSocketListenWithBacklog}, {"SocketPlugin", "primitiveSocketListenWithOrWithoutBacklog", (void*)primitiveSocketListenWithOrWithoutBacklog}, {"SocketPlugin", "primitiveSocketLocalAddress", (void*)primitiveSocketLocalAddress}, + {"SocketPlugin", "primitiveSocketLocalAddressResult", (void*)primitiveSocketLocalAddressResult}, + {"SocketPlugin", "primitiveSocketLocalAddressSize", (void*)primitiveSocketLocalAddressSize}, {"SocketPlugin", "primitiveSocketLocalPort", (void*)primitiveSocketLocalPort}, {"SocketPlugin", "primitiveSocketReceiveDataAvailable", (void*)primitiveSocketReceiveDataAvailable}, {"SocketPlugin", "primitiveSocketReceiveDataBufCount", (void*)primitiveSocketReceiveDataBufCount}, {"SocketPlugin", "primitiveSocketReceiveUDPDataBufCount", (void*)primitiveSocketReceiveUDPDataBufCount}, {"SocketPlugin", "primitiveSocketRemoteAddress", (void*)primitiveSocketRemoteAddress}, + {"SocketPlugin", "primitiveSocketRemoteAddressResult", (void*)primitiveSocketRemoteAddressResult}, + {"SocketPlugin", "primitiveSocketRemoteAddressSize", (void*)primitiveSocketRemoteAddressSize}, {"SocketPlugin", "primitiveSocketRemotePort", (void*)primitiveSocketRemotePort}, {"SocketPlugin", "primitiveSocketSendDataBufCount", (void*)primitiveSocketSendDataBufCount}, {"SocketPlugin", "primitiveSocketSendDone", (void*)primitiveSocketSendDone}, Modified: branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c =================================================================== --- branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,9 +1,9 @@ /* Automatically generated by - VMPluginCodeGenerator VMMaker.oscog-eem.154 uuid: 5cbb57c7-0a54-4b7e-848c-1f292759f1fa + VMPluginCodeGenerator VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139 + UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7 */ -static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 uuid: 90d36152-4f89-4764-b476-2cc44c195139 " __DATE__ ; +static char __buildInfo[] = "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 uuid: 15acec73-e0e7-4cc0-a521-1c4204a4b5b7 " __DATE__ ; @@ -109,6 +109,7 @@ EXPORT(sqInt) primitiveChdir(void); EXPORT(sqInt) primitiveCreatePipe(void); EXPORT(sqInt) primitiveCreatePipeWithSessionIdentifier(void); +EXPORT(sqInt) primitiveDup(sqInt fileDescriptor); EXPORT(sqInt) primitiveDupTo(sqInt oldFileDescriptor, sqInt newFileDescriptor); EXPORT(sqInt) primitiveEnvironmentAt(void); EXPORT(sqInt) primitiveEnvironmentAtSymbol(void); @@ -249,9 +250,9 @@ struct VirtualMachine* interpreterProxy; static const char *moduleName = #ifdef SQUEAK_BUILTIN_PLUGIN - "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (i)" + "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (i)" #else - "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.34 (e)" + "UnixOSProcessPlugin VMConstruction-Plugins-OSProcessPlugin.oscog-eem.35 (e)" #endif ; static void *originalSigHandlers[NSIG]; @@ -1292,11 +1293,11 @@ path = transientCStringFromString(interpreterProxy->stackObjectValue(0)); if (chdir(path)) { interpreterProxy->pop(2); - interpreterProxy->push(interpreterProxy->nilObject()); + interpreterProxy->pushInteger(errno); } else { interpreterProxy->pop(2); - interpreterProxy->pushInteger(errno); + interpreterProxy->push(interpreterProxy->nilObject()); } } @@ -1420,6 +1421,24 @@ } +/* Call dup() to duplicate a file descriptor using the next available + descriptor. Answer + the new file descriptor or -1 on failure. + */ + +EXPORT(sqInt) +primitiveDup(sqInt fileDescriptor) +{ + sqInt fd; + int result; + + fd = interpreterProxy->stackIntegerValue(0); + result = dup(fd); + interpreterProxy->pop(2); + interpreterProxy->pushInteger(result); +} + + /* Call dup2() to duplicate a file descriptor. Answer the duplicated file descriptor or -1 on failure. */ @@ -4440,6 +4459,7 @@ {"UnixOSProcessPlugin", "primitiveChdir", (void*)primitiveChdir}, {"UnixOSProcessPlugin", "primitiveCreatePipe", (void*)primitiveCreatePipe}, {"UnixOSProcessPlugin", "primitiveCreatePipeWithSessionIdentifier", (void*)primitiveCreatePipeWithSessionIdentifier}, + {"UnixOSProcessPlugin", "primitiveDup", (void*)primitiveDup}, {"UnixOSProcessPlugin", "primitiveDupTo", (void*)primitiveDupTo}, {"UnixOSProcessPlugin", "primitiveEnvironmentAt", (void*)primitiveEnvironmentAt}, {"UnixOSProcessPlugin", "primitiveEnvironmentAtSymbol", (void*)primitiveEnvironmentAtSymbol}, Modified: branches/Cog/src/vm/cointerp.c =================================================================== --- branches/Cog/src/vm/cointerp.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/src/vm/cointerp.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -1906,7 +1906,7 @@ /* 575 */ (void (*)(void))0, 0 }; static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void); -const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.159]"; +const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.161]"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */; volatile int sendTrace; @@ -21821,7 +21821,7 @@ /* This is a helper for primitiveObjectPointsTo so it *does not* check the frameContext field because that is an implicit self-reference not present - in the stale . + in the state . */ static sqInt Modified: branches/Cog/src/vm/cointerpmt.c =================================================================== --- branches/Cog/src/vm/cointerpmt.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/src/vm/cointerpmt.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -1,9 +1,9 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ; +static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -2005,7 +2005,7 @@ /* 575 */ (void (*)(void))0, 0 }; static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void); -const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.159]"; +const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.161]"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */; volatile int sendTrace; sqInt willNotThreadWarnCount; @@ -22581,7 +22581,7 @@ /* This is a helper for primitiveObjectPointsTo so it *does not* check the frameContext field because that is an implicit self-reference not present - in the stale . + in the state . */ static sqInt Modified: branches/Cog/src/vm/gcc3x-cointerp.c =================================================================== --- branches/Cog/src/vm/gcc3x-cointerp.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/src/vm/gcc3x-cointerp.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -2,11 +2,11 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ; +static char __buildInfo[] = "CoInterpreter VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -1909,7 +1909,7 @@ /* 575 */ (void (*)(void))0, 0 }; static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void); -const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.159]"; +const char *interpreterVersion = "Croquet Closure Cog VM [CoInterpreter VMMaker.oscog-eem.161]"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */; volatile int sendTrace; @@ -21825,7 +21825,7 @@ /* This is a helper for primitiveObjectPointsTo so it *does not* check the frameContext field because that is an implicit self-reference not present - in the stale . + in the state . */ static sqInt Modified: branches/Cog/src/vm/gcc3x-cointerpmt.c =================================================================== --- branches/Cog/src/vm/gcc3x-cointerpmt.c 2012-05-30 18:38:08 UTC (rev 2555) +++ branches/Cog/src/vm/gcc3x-cointerpmt.c 2012-06-07 19:29:52 UTC (rev 2556) @@ -2,11 +2,11 @@ /* Automatically generated by - CCodeGeneratorGlobalStructure VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CCodeGeneratorGlobalStructure VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc from - CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 + CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc */ -static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.159 uuid: cbf7f95a-6fe2-4578-898e-47afb8524be4 " __DATE__ ; +static char __buildInfo[] = "CoInterpreterMT VMMaker.oscog-eem.161 uuid: d9d960b4-9f66-43a2-9d90-4fb58d541adc " __DATE__ ; char *__interpBuildInfo = __buildInfo; @@ -2008,7 +2008,7 @@ /* 575 */ (void (*)(void))0, 0 }; static void (*externalPrimitiveTable[MaxExternalPrimitiveTableSize + 1 /* 4097 */])(void); -const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.159]"; +const char *interpreterVersion = "Croquet Closure Cog MT VM [CoInterpreterMT VMMaker.oscog-eem.161]"; sqInt minBackwardJumpCountForCompile = MinBackwardJumpCountForCompile /* 10 */; volatile int sendTrace; sqInt willNotThreadWarnCount; @@ -22585,7 +22585,7 @@ /* This is a helper for primitiveObjectPointsTo so it *does not* check the frameContext field because that is an implicit self-reference not present - in the stale . + in the state . */ static sqInt |
Free forum by Nabble | Edit this page |