Getdomainname for Unixware.
Plain wait() may block. Make it interruptable.
--- a/Unix.st Mon May 20 17:47:19 1996 +0200
+++ b/Unix.st Tue May 21 13:11:56 1996 +0200
@@ -10,6 +10,8 @@
hereby transferred.
"
+'From Smalltalk/X, Version:2.10.9 on 26-apr-1996 at 10:05:20' !
+
Object subclass:#OperatingSystem
instanceVariableNames:''
classVariableNames:'HostName DomainName LastErrorNumber LastExecStatus OSSignals
@@ -20,6 +22,7 @@
!
!OperatingSystem primitiveDefinitions!
+
%{
#define UNIX_LIKE
@@ -349,6 +352,10 @@
# include <sys/wait.h>
# endif
+# if defined(HAS_SYSINFO)
+# include <sys/systeminfo.h>
+# endif
+
#endif /* ! transputer */
/*
@@ -5211,12 +5218,12 @@
getDomainName
"return the domain this host is in.
Notice:
- not all systems support this; on some, 'unknown' is returned."
+ not all systems support this; on some, 'unknown' is returned."
|name|
DomainName notNil ifTrue:[
- ^ DomainName
+ ^ DomainName
].
%{ /* STACK: 2048 */
@@ -5224,27 +5231,36 @@
char buffer[128];
if (getdomainname(buffer, sizeof(buffer)) == 0) {
- name = __MKSTRING(buffer COMMA_CON);
+ name = __MKSTRING(buffer COMMA_CON);
}
#else
# if defined(HAS_UNAME) && defined(HAS_UTS_DOMAINNAME)
struct utsname ubuff;
if (uname(&ubuff) >= 0) {
- name = __MKSTRING(ubuff.domainname COMMA_CON);
- }
+ name = __MKSTRING(ubuff.domainname COMMA_CON);
+ }
+# else
+# if defined(HAS_SYSINFO) && defined(SI_SRPC_DOMAIN)
+ char buffer[256];
+ int ret;
+
+ if ((ret = sysinfo(SI_SRPC_DOMAIN, buffer, sizeof(buffer))) >= 0 && ret <= sizeof(buffer)) {
+ name = __MKSTRING(buffer COMMA_CON);
+ }
+# endif
# endif
#endif
%}.
name isNil ifTrue:[
- name := self getEnvironment:'DOMAIN'.
- name isNil ifTrue:[
- name := self getCommandOutputFrom:'domainname'
- ]
+ name := self getEnvironment:'DOMAIN'.
+ name isNil ifTrue:[
+ name := self getCommandOutputFrom:'domainname'
+ ]
].
name isNil ifTrue:[
- 'OS: cannot find out domainname' errorPrintNL.
- name := 'unknown'.
+ 'OS: cannot find out domainname' errorPrintNL.
+ name := 'unknown'.
].
DomainName := name.
^ name
@@ -5252,6 +5268,8 @@
"
OperatingSystem getDomainName
"
+
+ "Modified: 26.4.1996 / 10:04:54 / stefan"
!
getEnvironment:aStringOrSymbol
@@ -6977,6 +6995,7 @@
# else /*!HAS_WAIT3*/
int s;
# define __WAIT wait(&s)
+# define __BLOCKING_WAIT__ 1
# if !defined(WIFEXITED)
# define WIFEXITED(stat) (((int)((stat)&0377))==0)
@@ -6992,51 +7011,60 @@
# endif /*!WCOREDUMP*/
if (blocking != true) {
- /*
- * We do not support nonBlocking waits, so signal an error
- * Sorry about the goto, but with all these ifdefs ...
- */
- goto done;
+ /*
+ * We do not support nonBlocking waits, so signal an error
+ * Sorry about the goto, but with all these ifdefs ...
+ */
+ goto done;
}
# endif /*!HAS_WAIT3*/
#endif /*!HAS_WAITPID*/
+#if __BLOCKING_WAIT__
+ __BEGIN_INTERRUPTABLE__
+#endif
+
do {
- p = __WAIT;
+ p = __WAIT;
} while (p == -1 && errno == EINTR);
+#if __BLOCKING_WAIT__
+ __END_INTERRUPTABLE__
+# undef __BLOCKING_WAIT__
+#endif
+
#undef __WAIT
if (p == 0)
- RETURN(nil)
+ RETURN(nil)
if (p == -1) {
- if (errno == ECHILD)
- RETURN(nil);
+ if (errno == ECHILD)
+ RETURN(nil);
} else {
- pid = __MKSMALLINT(p);
- if (WIFEXITED(s)) {
- status = @symbol(exit);
- code = __MKSMALLINT(WEXITSTATUS(s));
- core = WCOREDUMP(s) ? true : false;
- } else if (WIFSIGNALED(s)) {
- status = @symbol(signal);
- code = __MKSMALLINT(WTERMSIG(s));
- } else if (WIFSTOPPED(s)) {
- status = @symbol(stop);
- code = __MKSMALLINT(WSTOPSIG(s));
- }
+ pid = __MKSMALLINT(p);
+ if (WIFEXITED(s)) {
+ status = @symbol(exit);
+ code = __MKSMALLINT(WEXITSTATUS(s));
+ core = WCOREDUMP(s) ? true : false;
+ } else if (WIFSIGNALED(s)) {
+ status = @symbol(signal);
+ code = __MKSMALLINT(WTERMSIG(s));
+ } else if (WIFSTOPPED(s)) {
+ status = @symbol(stop);
+ code = __MKSMALLINT(WSTOPSIG(s));
+ }
#if defined(WIFCONTINUED)
- else if (WIFCONTINUED(s)) {
- status = @symbol(continue);
- }
+ else if (WIFCONTINUED(s)) {
+ status = @symbol(continue);
+ }
#endif
}
done: ;
%}.
pid isNil ifTrue:[
- ^ self primitiveFailed
+ ^ self primitiveFailed
].
^ OSProcessStatus pid:pid status:status code:code core:core
@@ -7363,6 +7391,6 @@
!OperatingSystem class methodsFor:'documentation'!
version
- ^ '$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.141 1996-05-18 15:31:46 cg Exp $'
+ ^ '$Header: /cvs/stx/stx/libbasic/Attic/Unix.st,v 1.142 1996-05-21 11:11:56 stefan Exp $'
! !
OperatingSystem initialize!