Date: Fri, 23 Jul 1999 13:33:05 +0200 From: Ollivier Robert <roberto@eurocontrol.fr> To: emulation@freebsd.org Subject: Star Office 5.1 Message-ID: <19990723133305.A525@caerdonn.eurocontrol.fr>
next in thread | raw e-mail | index | archive | help
I confirm that you _need_ the procfs patch that was posted a while ago to
run SO 5.1.
Just in case, here it is:
-=-=-
cvs diff: Diffing .
Index: procfs_status.c
===================================================================
RCS file: /home/ncvs/src/sys/miscfs/procfs/procfs_status.c,v
retrieving revision 1.14
diff -u -2 -u -r1.14 procfs_status.c
--- procfs_status.c 1999/05/22 20:10:26 1.14
+++ procfs_status.c 1999/07/19 14:50:12
@@ -49,4 +49,8 @@
#include <sys/resourcevar.h>
#include <miscfs/procfs/procfs.h>
+#include <vm/vm.h>
+#include <vm/pmap.h>
+#include <vm/vm_param.h>
+#include <sys/exec.h>
int
@@ -165,13 +169,38 @@
/*
- * For now, this is a hack. To implement this fully would require
- * groping around in the process address space to follow argv etc.
+ * This is a hack: the correct behaviour is only implemented for
+ * the case of the current process enquiring about its own argv
+ * (due to the difficulty of accessing other processes' address space).
+ * For other cases, we cop out and just return argv[0] from p->p_comm.
+ * Note that if the argv is no longer available, we deliberately
+ * don't fall back on p->p_comm or return an error: the authentic
+ * Linux behaviour is to return zero-length in this case.
*/
- ps = psbuf;
- bcopy(p->p_comm, ps, MAXCOMLEN);
- ps[MAXCOMLEN] = '\0';
- ps += strlen(ps);
-
- ps += sprintf(ps, "\n");
+ if (curproc == p) {
+ struct ps_strings pstr;
+ int i;
+ size_t bytes_left, done;
+
+ error = copyin((void*)PS_STRINGS, &pstr, sizeof(pstr));
+ if (error) return (error);
+ bytes_left = sizeof(psbuf);
+ ps = psbuf;
+ for (i = 0; bytes_left && (i < pstr.ps_nargvstr); i++) {
+ error = copyinstr(pstr.ps_argvstr[i], ps,
+ bytes_left, &done);
+ /* If too long or malformed, just truncate */
+ if (error) {
+ error = 0;
+ break;
+ }
+ ps += done;
+ bytes_left -= done;
+ }
+ } else {
+ ps = psbuf;
+ bcopy(p->p_comm, ps, MAXCOMLEN);
+ ps[MAXCOMLEN] = '\0';
+ ps += strlen(ps);
+ }
xlen = ps - psbuf;
-=-=-
--
Ollivier ROBERT -=- Eurocontrol EEC/TEC -=- Ollivier.Robert@eurocontrol.fr
The Postman hits! The Postman hits! You have new mail.
To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe freebsd-emulation" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?19990723133305.A525>
