Hi,<br><br>This patch fixes 4 problems which prevented the VM from building<br>on Solaris/SPARC.&nbsp; They shouldn&#39;t cause problems for other<br>platforms (famous last words), so please would someone (Ian?)<br>confirm this before checking in.
<br><br>The problems fixed by this patch are:<br><ol><li>&quot;sun&quot; is already defined by some header or other in Solaris;<br>I&#39;ve changed it to s_un.</li><li>AF_LOCAL isn&#39;t defined on Solaris.&nbsp; W Richard Stevens&#39;
<br>&quot;Advanced programming in the Unix environment&quot; says that<br>AF_UNIX is more standard anyway.</li><li>Solaris&#39; feof() call really wants a FILE*.</li><li>A missing prototype is added for sound_AvailableSpace(void)
</li></ol>With this patch, the VM builds and runs fine if built with gcc-3.4.3.<br>I&#39;ve checked both the stock 3.9a-7024 image as well as the <br>etoys image. (My motivation for this whole exercise is to fix the<br>problems with audio under Solaris for my young daughter to use
<br>etoys: the first sound plays, but after that, no sounds ever play.)<br><br>With gcc-4.2.1 and -O2, the VM won&#39;t even start up (complains<br>about a missing vm-display-X11, even though it&#39;s there).&nbsp; With<br>gcc-4.2.1
 and no -O2, the VM starts, runs for a short while, and<br>then cores with a bus error.&nbsp; gdb shows a corrupt stack.&nbsp; I&#39;m<br>about to build gcc-4.1.2 and give it a spin building the VM to<br>try to track this down.&nbsp; But I do suspect bad code generation
<br>with gcc-4.2.1.<br><br><br>Thanks,<br>Andrew<br><br>Index: platforms/unix/plugins/SocketPlugin/sqUnixSocket.c<br>===================================================================<br>--- platforms/unix/plugins/SocketPlugin/sqUnixSocket.c&nbsp; (revision 1762)
<br>+++ platforms/unix/plugins/SocketPlugin/sqUnixSocket.c&nbsp; (working copy)<br>@@ -149,7 +149,7 @@<br>&nbsp;union sockaddr_any<br>&nbsp;{<br>&nbsp;&nbsp; struct sockaddr&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sa;<br>-&nbsp; struct sockaddr_un&nbsp;&nbsp; sun;<br>+&nbsp; struct sockaddr_un&nbsp;&nbsp; s_un;
<br>&nbsp;&nbsp; struct sockaddr_in&nbsp;&nbsp; sin;<br>&nbsp;&nbsp; struct sockaddr_in6&nbsp; sin6;<br>&nbsp;};<br>@@ -533,7 +533,7 @@<br>&nbsp;&nbsp; switch (domain)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>&nbsp;&nbsp;&nbsp;&nbsp; case 0:&nbsp;&nbsp;&nbsp; domain= AF_INET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp; /* SQ_SOCKET_DOMAIN_UNSPECIFIED */<br>-&nbsp;&nbsp;&nbsp; case 1:&nbsp;&nbsp;&nbsp; domain= AF_LOCAL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp; /* SQ_SOCKET_DOMAIN_LOCAL */
<br>+&nbsp;&nbsp;&nbsp; case 1:&nbsp;&nbsp;&nbsp; domain= AF_UNIX;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp; /* SQ_SOCKET_DOMAIN_LOCAL */<br>&nbsp;&nbsp;&nbsp;&nbsp; case 2:&nbsp;&nbsp;&nbsp; domain= AF_INET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp; /* SQ_SOCKET_DOMAIN_INET4 */<br>&nbsp;&nbsp;&nbsp;&nbsp; case 3:&nbsp;&nbsp;&nbsp; domain= AF_INET6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;&nbsp; /* SQ_SOCKET_DOMAIN_INET6 */
<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>@@ -1563,16 +1563,16 @@<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct stat st;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((0 == stat(servName, &amp;st)) &amp;&amp; (st.st_mode &amp; S_IFSOCK))<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; {<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct sockaddr_un *sun= calloc(1, sizeof(struct sockaddr_un));
<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; struct sockaddr_un *s_un= calloc(1, sizeof(struct sockaddr_un));<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localInfo= (struct addrinfo *)calloc(1, sizeof(struct addrinfo));<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localInfo-&gt;ai_family= AF_LOCAL;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localInfo-&gt;ai_family= AF_UNIX;
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localInfo-&gt;ai_socktype= SOCK_STREAM;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localInfo-&gt;ai_addrlen= sizeof(struct sockaddr_un);<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localInfo-&gt;ai_addr= (struct sockaddr *)sun;<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*sun-&gt;sun_len= sizeof(struct sockaddr_un);*/
<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sun-&gt;sun_family= AF_LOCAL;<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(sun-&gt;sun_path, servName, servSize);<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sun-&gt;sun_path[servSize]= &#39;\0&#39;;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; localInfo-&gt;ai_addr= (struct sockaddr *)s_un;<br>
+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; /*s_un-&gt;sun_len= sizeof(struct sockaddr_un);*/<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_un-&gt;sun_family= AF_UNIX;<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; memcpy(s_un-&gt;sun_path, servName, servSize);<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; s_un-&gt;sun_path[servSize]= &#39;\0&#39;;<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; addrInfo= localInfo;<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; interpreterProxy-&gt;signalSemaphoreWithIndex(resolverSema);<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return;<br>@@ -1586,7 +1586,7 @@<br>&nbsp;<br>&nbsp;&nbsp; switch (family)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>-&nbsp;&nbsp;&nbsp; case SQ_SOCKET_FAMILY_LOCAL:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
request.ai_family= AF_LOCAL;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>+&nbsp;&nbsp;&nbsp; case SQ_SOCKET_FAMILY_LOCAL:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.ai_family= AF_UNIX;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp; case SQ_SOCKET_FAMILY_INET4:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.ai_family= AF_INET;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;
<br>&nbsp;&nbsp;&nbsp;&nbsp; case SQ_SOCKET_FAMILY_INET6:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; request.ai_family= AF_INET6;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; break;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>@@ -1657,7 +1657,7 @@<br>&nbsp;&nbsp; fprintf(stderr, &quot; &quot;);<br>&nbsp;&nbsp; switch (addr-&gt;sa_family)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>-&nbsp;&nbsp;&nbsp; case AF_LOCAL:&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, &quot;local\n&quot;); break;
<br>+&nbsp;&nbsp;&nbsp; case AF_UNIX:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, &quot;local\n&quot;); break;<br>&nbsp;&nbsp;&nbsp;&nbsp; case AF_INET:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, &quot;inet\n&quot;); break;<br>&nbsp;&nbsp;&nbsp;&nbsp; case AF_INET6:&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, &quot;inet6\n&quot;); break;<br>&nbsp;&nbsp;&nbsp;&nbsp; default:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; fprintf(stderr, &quot;?\n&quot;); break;
<br>@@ -1698,7 +1698,7 @@<br>&nbsp;<br>&nbsp;&nbsp; switch (addrInfo-&gt;ai_family)<br>&nbsp;&nbsp;&nbsp;&nbsp; {<br>-&nbsp;&nbsp;&nbsp; case AF_LOCAL:&nbsp;&nbsp;&nbsp;&nbsp; return SQ_SOCKET_FAMILY_LOCAL;<br>+&nbsp;&nbsp;&nbsp; case AF_UNIX:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SQ_SOCKET_FAMILY_LOCAL;<br>&nbsp;&nbsp;&nbsp;&nbsp; case AF_INET:&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return SQ_SOCKET_FAMILY_INET4;
<br>&nbsp;&nbsp;&nbsp;&nbsp; case AF_INET6:&nbsp;&nbsp;&nbsp;&nbsp; return SQ_SOCKET_FAMILY_INET6;<br>&nbsp;&nbsp;&nbsp;&nbsp; }<br>Index: platforms/unix/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c<br>===================================================================<br>
--- platforms/unix/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (revision 1762)<br>+++ platforms/unix/src/plugins/UnixOSProcessPlugin/UnixOSProcessPlugin.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (working copy)<br>@@ -1818,7 +1818,7 @@<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return interpreterProxy-&gt;primitiveFail();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; }<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; sqFile = interpreterProxy-&gt;arrayValueOf(sqFileOop);<br>-&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((feof(sqFile-&gt;file)) == 0) {<br>+&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; if ((feof((FILE*)(sqFile-&gt;file))) == 0) {
<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = interpreterProxy-&gt;falseObject();<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; } else {<br>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; result = interpreterProxy-&gt;trueObject();<br>Index: platforms/unix/vm-sound-Sun/sqUnixSoundSun.c<br>===================================================================
<br>--- platforms/unix/vm-sound-Sun/sqUnixSoundSun.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (revision 1762)<br>+++ platforms/unix/vm-sound-Sun/sqUnixSoundSun.c&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (working copy)<br>@@ -55,6 +55,7 @@<br>&nbsp;#endif<br>&nbsp;<br>&nbsp;static int sound_Stop(void);<br>
+static int sound_AvailableSpace(void);<br>&nbsp;<br>&nbsp;static int auFd=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; -1;&nbsp;&nbsp; /* open on /dev/dsp */<br>&nbsp;static int fmtStereo=&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 0;&nbsp;&nbsp; /* whether we are playing in stereo or not */<br><br>