Date: Wed, 26 May 2004 14:51:21 +0100 (BST) From: =?iso-8859-1?q?Gao=20Long?= <urgaolong@yahoo.com> To: Akihiro Sagawa <sagawa@sohgoh.net>, freebsd-emulation@freebsd.org Cc: Sharp Gao <imgaolong@yahoo.com.cn> Subject: Re: Device name convert for linux use Message-ID: <20040526135121.25679.qmail@web90110.mail.scd.yahoo.com> In-Reply-To: <20040526204931.0F7E.SAGAWA@sohgoh.net>
index | next in thread | previous in thread | raw e-mail
Akihiro Sagawa <sagawa@sohgoh.net> wrote:Hi,
In "Device name convert for linux use", wrote:
> I was developig a name and major/minor device number converting
> mechanism for linux applications to use on a linux.ko module , as if
> the application itself run on a linux.
(snip)
> Is this helpful to linux emulator ?
This mail was a bit old, but that sounds great.
AFAIK, glibc's wordexp(3) checks /dev/null's device number before
opening /dev/null as stderr for a shell. If they are not match (ie.
under FreeBSD Linux emulation mode), wordexp always returns error.
And (maybe?) ld-linux.so also checks /dev/null's device number before
launching programs when one of stdin, stdout, stderr is closed and program
has set SetUID bit. (In glibc-2.3.2/sysdeps/generic/dl-sysdep.c???)
Therefore I made a quick hack patch for sys/compat/linux/linux_stats.c
to tell a lie about /dev/null's device number. But Sharp Gao's way seems
to be better. :)
Where is the patch?
--
Akihiro SAGAWA
To reproduce this problem, compile below source
with linux gcc.
---- for wordexp, cut here
#include
#include
int main(int argc, char* argv[])
{
int i, err;
wordexp_t we;
err = wordexp("`date`", &we, 0);
printf("err=%d\n", err);
if (!err)
for(i=0; i < we.we_wordc; i++)
printf("[%d] %s\n", i, we.we_wordv[i]);
wordfree(&we);
}
---- to here
---- for ld-linux, cut here
#include
#include
#include
int main(int argc, char* argv[])
{
char* exec_args[] = {"id", NULL};
printf("bye stdin\n");
close(STDIN_FILENO);
printf("stdin has closed\n");
fflush(stdout);
execvp(exec_args[0], exec_args);
printf("failed to exec prog.\n");
exit(1);
}
---- to here
_______________________________________________
freebsd-emulation@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-emulation
To unsubscribe, send any mail to "freebsd-emulation-unsubscribe@freebsd.org"
Hi , I moved from imgaolong@yahoo.com.cn to urgaolong@yahoo.com
for the trouble of gb2312 coding.
The intial pulse to build up a convert table is that we find some one in
linux always uses the tty? instead of ttyv? , and the gnu libc is always
fond of checking the major/minor numbers of the devices:->
I have patched the linux_file.c to use a virual name system
just correspond to the linux systems , when linux.ko passes device
names into the FreeBSD kernel , we just consult the table and convert
them into proper FreeBSD styles. So every linux application running on a
FreeBSD seemed to have a correct device name space , including the
major/minor device numbers.
After all , the real behavior of the devices are the critical thing. If the
behavior of the device in two operating systems is absolutely the
same , so every thing is OK , as we have already impletmented the
tty? to ttyv? convertion , nothing bad has ever happened . But not to
any device name else, if the device's behavior is just alike. Other things
continued to make the table still very short.
I may take up time to implement a my-best solution , well , it's just a
try , before I could understand every details of the device name properties
of both the Linux and FreeBSD devices.I was still wandering whether it
could be taken into the next version of linux emulation , for it really can
improve the compatiblities.
---------------------------------
Yahoo! Messenger - Communicate instantly..."Ping" your friends today! Download Messenger Now
help
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20040526135121.25679.qmail>
