Pull request for branch yem-misc-updates
From: "Yann E. MORIN" <[email protected]>
Hello All!
Here are a small series with a few mostly-unrelated changes:
- bump RPi kernel for misc fixes
- fix nss-mdns instalation and runtime
- instrument the external toolchain wrapper
Regards,
Yann E. MORIN.
The following changes since commit c34cd9e2dab7c37bb0bdea6f43e57addf2b710e2:
ti-gfx: use BR2_ARM_EABIHF (2013-07-18 13:09:57 +0200)
are available in the git repository at:
git://gitorious.org/buildroot/buildroot.git yem-misc-updates
for you to fetch changes up to 574ef0eb7e941dcc6c9dba3540f4aa1c213472bc:
toolchain: instrument external toolchain wrapper (2013-07-18 23:20:34 +0200)
----------------------------------------------------------------
Yann E. MORIN (4):
defconfig/rpi: bump kernel for misc fixes package/nss-mdns: fix avahi socket location package/nss-mdns: do not overwrite user's nsswitch.conf
toolchain: instrument external toolchain wrapper
configs/rpi_defconfig | 2 +- package/nss-mdns/nss-mdns.mk | 5 ++++- package/nss-mdns/nsswitch.conf | 15 --------------- toolchain/toolchain-external/ext-toolchain-wrapper.c | 8 ++++++++ 4 files changed, 13 insertions(+), 17 deletions(-) delete mode 100644 package/nss-mdns/nsswitch.conf
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'
PATCH 1/4 defconfig/rpi: bump kernel for misc fixes
From: "Yann E. MORIN" <[email protected]>
Bump for a few fixes:
- fix for slow SDcards
- fix for USB interrupts
- fix for tracing functions
--- configs/rpi_defconfig | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
configs/rpi_defconfig +1 -1
@@ -17,7 +17,7 @@ BR2_DEFAULT_KERNEL_VERSION="3.6.11" BR2_LINUX_KERNEL=y BR2_LINUX_KERNEL_CUSTOM_GIT=y BR2_LINUX_KERNEL_CUSTOM_GIT_REPO_URL="git://github.com/raspberrypi/linux.git" -BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="53f7e0b" +BR2_LINUX_KERNEL_CUSTOM_GIT_VERSION="0006326" BR2_LINUX_KERNEL_USE_DEFCONFIG=y BR2_LINUX_KERNEL_DEFCONFIG="bcmrpi" BR2_LINUX_KERNEL_ZIMAGE=y
Signature · 1 line
1.8.1.2
PATCH 1/4 defconfig/rpi: bump kernel for misc fixes
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Yann> From: "Yann E. MORIN" <[email protected]> Yann> Bump for a few fixes:
Yann> - fix for slow SDcards Yann> - fix for USB interrupts Yann> - fix for tracing functions
Yann> Signed-off-by: "Yann E. MORIN" <[email protected]>
Committed, thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH 2/4 package/nss-mdns: fix avahi socket location
In reply to Yann E. MORINFrom: "Yann E. MORIN" <[email protected]>
In buildroot, the avahi socket is located in /var/run/avahi-daemon, not in /usr/var/run/avahi-daemon/socket.
--- package/nss-mdns/nss-mdns.mk | 2 ++ 1 file changed, 2 insertions(+)
package/nss-mdns/nss-mdns.mk +2 -0
@@ -7,6 +7,8 @@ NSS_MDNS_VERSION=0.10 NSS_MDNS_SITE=http://0pointer.de/lennart/projects/nss-mdns +NSS_MDNS_CONF_OPT += --localstatedir=/var + define NSS_MDNS_INSTALL_CONFIG $(INSTALL) -D -m 0664 package/nss-mdns/nsswitch.conf $(TARGET_DIR)/etc/nsswitch.conf endef
Signature · 1 line
1.8.1.2
PATCH 2/4 package/nss-mdns: fix avahi socket location
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Yann> From: "Yann E. MORIN" <[email protected]>
Yann> In buildroot, the avahi socket is located in /var/run/avahi-daemon, Yann> not in /usr/var/run/avahi-daemon/socket.
Committed, thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH 3/4 package/nss-mdns: do not overwrite user's nsswitch.conf
In reply to Yann E. MORINFrom: "Yann E. MORIN" <[email protected]>
Instead of over-writing the nsswitch.conf file (which may already contain user's specific configuration if it comes from a rootfs overlay, or a custom skeleton), just replace the 'hosts' line.
Remove now-useless custom nsswitch.conf file.
--- package/nss-mdns/nss-mdns.mk | 3 ++- package/nss-mdns/nsswitch.conf | 15 --------------- 2 files changed, 2 insertions(+), 16 deletions(-) delete mode 100644 package/nss-mdns/nsswitch.conf
package/nss-mdns/nss-mdns.mk +2 -1
@@ -10,7 +10,8 @@ NSS_MDNS_SITE=http://0pointer.de/lennart/projects/nss-mdns NSS_MDNS_CONF_OPT += --localstatedir=/var define NSS_MDNS_INSTALL_CONFIG - $(INSTALL) -D -m 0664 package/nss-mdns/nsswitch.conf $(TARGET_DIR)/etc/nsswitch.conf + sed -r -i -e 's/^(hosts:[[:space:]]+).*/\1files mdns4_minimal [NOTFOUND=return] dns mdns4/' \ + $(TARGET_DIR)/etc/nsswitch.conf endef NSS_MDNS_POST_INSTALL_TARGET_HOOKS += NSS_MDNS_INSTALL_CONFIG
package/nss-mdns/nsswitch.conf deleted +0 -15
@@ -1,15 +0,0 @@ -# /etc/nsswitch.conf - -passwd: compat -group: compat -shadow: compat - -hosts: files mdns4_minimal [NOTFOUND=return] dns mdns4 -networks: files - -protocols: db files -services: db files -ethers: db files -rpc: db files - -netgroup: nis
Signature · 1 line
1.8.1.2
PATCH 3/4 package/nss-mdns: do not overwrite user's nsswitch.conf
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Yann> From: "Yann E. MORIN" <[email protected]>
Yann> Instead of over-writing the nsswitch.conf file (which may already Yann> contain user's specific configuration if it comes from a rootfs Yann> overlay, or a custom skeleton), just replace the 'hosts' line.
It's only an issue for custom skeletons, not overlays as they are only added after all the packages are built.
Committed with the description adjusted, thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH 4/4 toolchain: instrument external toolchain wrapper
In reply to Yann E. MORINFrom: "Yann E. MORIN" <[email protected]>
If BR_DEBUG_WRAPPER is set in the envirnment, dump the actual command being exec()uted, to ease debugging issues with the wrapper.
--- toolchain/toolchain-external/ext-toolchain-wrapper.c | 8 ++++++++ 1 file changed, 8 insertions(+)
toolchain/toolchain-external/ext-toolchain-wrapper.c +8 -0
@@ -136,6 +136,14 @@ int main(int argc, char **argv)/* finish with NULL termination */ *cur =NULL ; +if (getenv ("BR_DEBUG_WRAPPER" ) ) { +fprintf ( stderr,"path='%s'\n" , path ); +int i; +for ( i=0 ; args[i]; i++ ) { +fprintf (stderr,"argv[%d]='%s'\n" , i, args[i] ); + } + } +if (execv (path, args))perror (path);
Signature · 1 line
1.8.1.2
PATCH 4/4 toolchain: instrument external toolchain wrapper
Dear Yann E. MORIN,
I like the feature, but it would be nice if the coding was more consistent with the rest of the code, see below:
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 139
Quoted 1 line · Yann E. MORIN
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+if (getenv ("BR_DEBUG_WRAPPER" ) ) {
No space after ( and before ).
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 140
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+fprintf ( stderr,"path='%s'\n" , path );
Dirro.
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 141
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+int i;
Variable declaration in the middle of the code. I know it's C99 ok, but I'd prefer not to have that (just like the kernel).
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 142
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+for ( i=0 ; args[i]; i++ ) {
for (i = 0; args[i]; i++)
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 143
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+fprintf (stderr,"argv[%d]='%s'\n" , i, args[i] );
Ditto space before ).
Thomas
Signature · 4 lines
Thomas Petazzoni, Free Electrons Kernel, drivers, real-time and embedded Linux development, consulting, training and support. http://free-electrons.com
PATCH 4/4 toolchain: instrument external toolchain wrapper
Thomas, All,
On 2013-07-18 23:32 +0200, Thomas Petazzoni spake thusly:
Quoted 2 lines
I like the feature, but it would be nice if the coding was more consistent with the rest of the code, see below:
Sure! :-)
It initially was a quick'n'dirty hack, and I eventually thought it might be useful upstream too. I'll re-read my code better next time... :-/
Quoted 3 lines · Yann E. MORIN
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 139
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+if (getenv ("BR_DEBUG_WRAPPER" ) ) {No space after ( and before ).
Ack.
Quoted 2 lines
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 140
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+fprintf ( stderr,"path='%s'\n" , path );Dirro.
Ditto?
Ditto! ;-)
Quoted 3 lines
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 141
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+int i;Variable declaration in the middle of the code. I know it's C99 ok, but I'd prefer not to have that (just like the kernel).
Doh. Right.
gcc also whines about this (which was my original code):
for( int i=0; args[i]; i++ ) {Quoted 2 lines
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 142
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+for ( i=0 ; args[i]; i++ ) {for (i = 0; args[i]; i++)
Ack.
Quoted 2 lines
toolchain/toolchain-external/ext-toolchain-wrapper.c int main(int argc, char **argv) · line 143
Quoted 1 line
toolchain/toolchain-external/ext-toolchain-wrapper.c +1
-0+fprintf (stderr,"argv[%d]='%s'\n" , i, args[i] );Ditto space before ).
Atta! I'll fix and respin. Thanks! :-)
Regsards,
Yann E. MORIN.
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'
PATCH v2 4/4 toolchain: instrument external toolchain wrapper
In reply to Yann E. MORINFrom: "Yann E. MORIN" <[email protected]>
If BR_DEBUG_WRAPPER is set in the envirnment, dump the actual command being exec()uted, to ease debugging issues with the wrapper.
---
Changes v1 -> v2:
- style fixes (Thomas)
--- toolchain/toolchain-external/ext-toolchain-wrapper.c | 8 ++++++++ 1 file changed, 8 insertions(+)
toolchain/toolchain-external/ext-toolchain-wrapper.c +8 -0
@@ -136,6 +136,14 @@ int main(int argc, char **argv)/* finish with NULL termination */ *cur =NULL ; +if (getenv ("BR_DEBUG_WRAPPER" ) ) { +fprintf ( stderr,"path='%s'\n" , path ); +int i; +for ( i=0 ; args[i]; i++ ) { +fprintf (stderr,"argv[%d]='%s'\n" , i, args[i] ); + } + } +if (execv (path, args))perror (path);
Signature · 1 line
1.8.1.2
PATCH v2 4/4 toolchain: instrument external toolchain wrapper
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Yann> From: "Yann E. MORIN" <[email protected]>
Yann> If BR_DEBUG_WRAPPER is set in the envirnment, dump the actual command Yann> being exec()uted, to ease debugging issues with the wrapper.
Yann> Signed-off-by: "Yann E. MORIN" <[email protected]> Yann> Cc: Thomas Petazzoni <[email protected]>
Yann> ---
Yann> Changes v1 -> v2:
Yann> - style fixes (Thomas)
Yann> ---
Yann> toolchain/toolchain-external/ext-toolchain-wrapper.c | 8 ++++++++
Yann> 1 file changed, 8 insertions(+)
Yann> diff --git a/toolchain/toolchain-external/ext-toolchain-wrapper.c b/toolchain/toolchain-external/ext-toolchain-wrapper.c Yann> index 460f255..8e56414 100644
Yann> --- a/toolchain/toolchain-external/ext-toolchain-wrapper.c
Yann> +++ b/toolchain/toolchain-external/ext-toolchain-wrapper.c
Yann> @@ -136,6 +136,14 @@ int main(int argc, char **argv)
Yann> /* finish with NULL termination */
Yann> *cur = NULL;
Yann> + if( getenv("BR_DEBUG_WRAPPER") ) {
Yann> + fprintf( stderr, "path='%s'\n", path );
Yann> + int i;
Yann> + for( i=0; args[i]; i++ ) {
Yann> + fprintf(stderr, "argv[%d]='%s'\n", i, args[i] );
Yann> + }
Yann> + }
Yann> +
That's still not really the code style used elsewhere in this file.
You could argue that this feature isn't really needed as you can just run 'strace -s 1000 -e execve <wrapper>' for basically the same information, but OK - This is perhaps a bit more user friendly.
With that in mind, I think a more sensible output format is something you can directly cut'n'paste and execute in the shell (after perhaps tweaking something), so I've changed it to simply print the args space seperated like this:
BR_DEBUG_WRAPPER=1 ./output/host/usr/bin/arm-none-linux-gnueabi-gcc --version
Executing /home/peko/source/buildroot/output/host/opt/ext-toolchain/bin/arm-none-linux-gnueabi-gcc --sysroot /home/peko/source/buildroot/output/host/usr/arm-buildroot-linux-gnueabi/sysroot -march=armv5te -mtune=arm926ej-s -mabi=aapcs-linux -mfloat-abi=soft -msoft-float -marm -pipe --version arm-none-linux-gnueabi-gcc (Sourcery CodeBench Lite 2013.05-24) 4.7.3
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Committed with these changes, thanks.
Signature · 1 line
Bye, Peter Korsgaard
PATCH v2 4/4 toolchain: instrument external toolchain wrapper
Peter, All,
On 2013-07-19 08:33 +0200, Peter Korsgaard spake thusly:
Quoted 33 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Yann> From: "Yann E. MORIN" <[email protected]>
Yann> IfBR_DEBUG_WRAPPERis set in the envirnment, dump the actual command Yann> being exec()uted, to ease debugging issues with the wrapper.Yann> Signed-off-by: "Yann E. MORIN" <[email protected]> Yann> Cc: Thomas Petazzoni <[email protected]>
Yann> ---
Yann> Changes v1 -> v2:
Yann> - style fixes (Thomas)
Yann> ---Yann> toolchain/toolchain-external/ext-toolchain-wrapper.c | 8 ++++++++Yann> 1 file changed, 8 insertions(+)
Yann> diff --git
a/toolchain/toolchain-external/ext-toolchain-wrapper.cb/toolchain/toolchain-external/ext-toolchain-wrapper.cYann> index 460f255..8e56414 100644
Yann> ---a/toolchain/toolchain-external/ext-toolchain-wrapper.c
Yann> +++b/toolchain/toolchain-external/ext-toolchain-wrapper.c
Yann> @@ -136,6 +136,14 @@ intmain(int argc, char **argv)
Yann> /* finish with NULL termination */
Yann> *cur = NULL;Yann> +
if( getenv("BR_DEBUG_WRAPPER") ){
Yann> +fprintf( stderr, "path='%s'\n", path );
Yann> + int i;
Yann> +for( i=0; args[i]; i++ ){
Yann> +fprintf(stderr, "argv[%d]='%s'\n", i, args[i] );
Yann> + }
Yann> + }
Yann> +
Quoted 1 line
That's still not really the code style used elsewhere in this file.
Doh. What happenned? I've just looked at my tree here, adn the style fixes are applied.
OK. All sorted. I did 'git commit --amend'. I should forgot to pass '-a' also (or run 'git add' first).
Doh, too bad. Sorry for the inconvenience... :-(
Quoted 3 lines
You could argue that this feature isn't really needed as you can just run 'strace -s 1000 -e execve <wrapper>' for basically the same information, but OK - This is perhaps a bit more user friendly.
My use-case was to see how the kernel build-system was calling the wrapper. So I just ran:
BR_DEBUG_WRAPPER=1 make
in my Buildroot build dir.
Quoted 4 lines
With that in mind, I think a more sensible output format is something you can directly cut'n'paste and execute in the shell (after perhaps tweaking something), so I've changed it to simply print the args space seperated like this:
Yet, one of the motivation behind the \n-separated args was to easily see the args, without having to 'parse' the command line with the eyes.
The Linux kernel is passing something like 40+ args to the wrapper, so the line is getting rather long, and difficult to grok visually, while the one-arg per line output made it very easy.
But OK, that's sane, too.
Quoted 1 line
Committed with these changes, thanks.
Again, sorry for the inconvenience. :-(
I already owed you one ${BEVERAGE} in Edimburgh; you can make that two, now! ;-)
Regards,
Yann E. MORIN.
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'
PATCH v2 4/4 toolchain: instrument external toolchain wrapper
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
Hi,
Quoted 1 line
Quoted 1 line
That's still not really the code style used elsewhere in this file.
Yann> Doh. What happenned? I've just looked at my tree here, adn the style Yann> fixes are applied.
Yann> OK. All sorted. I did 'git commit --amend'. I should forgot to pass '-a' Yann> also (or run 'git add' first).
Yann> Doh, too bad. Sorry for the inconvenience... :-(
No problem ;)
Quoted 3 lines
Quoted 3 lines
You could argue that this feature isn't really needed as you can just run 'strace -s 1000 -e execve <wrapper>' for basically the same information, but OK - This is perhaps a bit more user friendly.
Yann> My use-case was to see how the kernel build-system was calling the Yann> wrapper. So I just ran:
Yann> BR_DEBUG_WRAPPER=1 make
Yann> in my Buildroot build dir.
So you are only interested in the arguments to the wrapper, or do you want to see the final arguments to the real compiler?
Quoted 4 lines
Quoted 4 lines
With that in mind, I think a more sensible output format is something you can directly cut'n'paste and execute in the shell (after perhaps tweaking something), so I've changed it to simply print the args space seperated like this:
Yann> Yet, one of the motivation behind the \n-separated args was to easily Yann> see the args, without having to 'parse' the command line with the eyes.
Yann> The Linux kernel is passing something like 40+ args to the wrapper, so Yann> the line is getting rather long, and difficult to grok visually, while Yann> the one-arg per line output made it very easy.
Ok, but a kernel build with 40+ lines per gcc invocation is presumably also quite overwhelming?
Yann> Again, sorry for the inconvenience. :-(
Yann> I already owed you one ${BEVERAGE} in Edimburgh; you can make Yann> that two, now! ;-)
heh, sounds good ;)
Signature · 1 line
Bye, Peter Korsgaard
PATCH v2 4/4 toolchain: instrument external toolchain wrapper
On 2013-07-19 23:30 +0200, Peter Korsgaard spake thusly:
Quoted 5 lines
Quoted 4 lines
Quoted 4 lines
Quoted 1 line
Quoted 1 line
Quoted 1 line
"Yann" == Yann E MORIN <[email protected]> writes:
You could argue that this feature isn't really needed as you can just run 'strace -s 1000 -e execve <wrapper>' for basically the same information, but OK - This is perhaps a bit more user friendly.
Quoted 7 lines
Yann> My use-case was to see how the kernel build-system was calling the Yann> wrapper. So I just ran:
Yann> BR_DEBUG_WRAPPER=1 make
Yann> in my Buildroot build dir.So you are only interested in the arguments to the wrapper, or do you want to see the final arguments to the real compiler?
No, I'm interested in the final, complete argv[*].
Quoted 8 lines
Quoted 4 lines
Quoted 4 lines
With that in mind, I think a more sensible output format is something you can directly cut'n'paste and execute in the shell (after perhaps tweaking something), so I've changed it to simply print the args space seperated like this:
Yann> Yet, one of the motivation behind the \n-separated args was to easily Yann> see the args, without having to 'parse' the command line with the eyes.
Quoted 6 lines
Yann> The Linux kernel is passing something like 40+ args to the wrapper, so Yann> the line is getting rather long, and difficult to grok visually, while Yann> the one-arg per line output made it very easy.
Ok, but a kernel build with 40+ lines per gcc invocation is presumably also quite overwhelming?
The trick is to wait it break, and re-run with BR_DEBUG_WRAPPER=1 set and then inspect the reason for the breakage.
Quoted 4 lines
Yann> I already owed you one ${BEVERAGE} in Edimburgh; you can make Yann> that two, now! ;-)
heh, sounds good ;)
Remember: for each ${BEVERAGE} I owe you, I get one too! :-) /me is looking forward to it!
Regards,
Yann E. MORIN.
Signature · 6 lines
.-----------------.--------------------.------------------.--------------------. | Yann E. MORIN | Real-Time Embedded | /"\ ASCII RIBBON | Erics' conspiracy: | | +33 662 376 056 | Software Designer | \ / CAMPAIGN | ___ | | +33 223 225 172 `------------.-------: X AGAINST | \e/ There is no | | http://ymorin.is-a-geek.org/ | _/*\_ | / \ HTML MAIL | v conspiracy. | '------------------------------^-------^------------------^--------------------'