* [PATCH 0/1] Exclude code based on config @ 2009-12-24 13:55 Sanjeev Premi 2009-12-24 13:55 ` [PATCH 1/1] net: Exclude code based on selected protocol Sanjeev Premi 0 siblings, 1 reply; 4+ messages in thread From: Sanjeev Premi @ 2009-12-24 13:55 UTC (permalink / raw) To: barebox When trying to build with Networking support enabled; but without selecting any protocol, i encountered this error: premi # make make[1]: `arch/arm/include/asm/mach-types.h' is up to date. CHK include/linux/version.h CHK include/linux/utsrelease.h SYMLINK include/config.h -> board/omap/config.h LD barebox commands/built-in.o: In function `do_tftpb': help.c:(.text.do_tftpb+0x64): undefined reference to `TftpStart' make: *** [barebox] Error 1 This 'mistake' led me to making the changes in the following patch. Sanjeev Premi (1): net: Exclude code based on selected protocol commands/net.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 4+ messages in thread
* [PATCH 1/1] net: Exclude code based on selected protocol 2009-12-24 13:55 [PATCH 0/1] Exclude code based on config Sanjeev Premi @ 2009-12-24 13:55 ` Sanjeev Premi 2010-01-04 10:08 ` Sascha Hauer 0 siblings, 1 reply; 4+ messages in thread From: Sanjeev Premi @ 2009-12-24 13:55 UTC (permalink / raw) To: barebox Exclude the code for TFTP/NFS if either of the protocols is not selected. Signed-off-by: Sanjeev Premi <premi@ti.com> --- commands/net.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/commands/net.c b/commands/net.c index df06227..8071c9b 100644 --- a/commands/net.c +++ b/commands/net.c @@ -77,6 +77,7 @@ void netboot_update_env(void) setenv ("domain", NetOurNISDomain); } +#ifdef CONFIG_NET_TFTP static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[]) { return netboot_common (TFTP, cmdtp, argc, argv); @@ -92,6 +93,8 @@ BAREBOX_CMD_START(tftp) BAREBOX_CMD_HELP(cmd_tftp_help) BAREBOX_CMD_END +#endif + /** * @page tftp_command tftp * @@ -157,9 +160,14 @@ BAREBOX_CMD_END int net_store_fd; +#ifdef CONFIG_NET_TFTP extern void TftpStart(char *); /* Begin TFTP get */ +#endif +#ifdef CONFIG_NET_NFS extern void NfsStart(char *); +#endif +#if defined(CONFIG_NET_NFS) || defined(CONFIG_NET_TFTP) static int netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[]) { @@ -188,11 +196,15 @@ netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[]) goto out; switch (proto) { +#ifdef CONFIG_NET_TFTP case TFTP: TftpStart(remotefile); break; +#endif +#ifdef CONFIG_NET_NFS case NFS: NfsStart(remotefile); +#endif default: break; } @@ -209,6 +221,7 @@ out: close(net_store_fd); return rcode; } +#endif /* defined(CONFIG_NET_NFS) || defined(CONFIG_NET_TFTP) */ #ifdef CONFIG_NET_CDP -- 1.6.2.2 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH 1/1] net: Exclude code based on selected protocol 2009-12-24 13:55 ` [PATCH 1/1] net: Exclude code based on selected protocol Sanjeev Premi @ 2010-01-04 10:08 ` Sascha Hauer 2010-01-04 16:18 ` Premi, Sanjeev 0 siblings, 1 reply; 4+ messages in thread From: Sascha Hauer @ 2010-01-04 10:08 UTC (permalink / raw) To: Sanjeev Premi; +Cc: barebox Hi, On Thu, Dec 24, 2009 at 07:25:37PM +0530, Sanjeev Premi wrote: > Exclude the code for TFTP/NFS if either of the > protocols is not selected. Ok, this should be fixed. I would rather use the following patch to do it. It adds a few bytes of binary space but it moves the code which belongs together to the appropriate files. Sascha From 6c312514f8272409a84b4f235e56262ace283ea8 Mon Sep 17 00:00:00 2001 From: Sascha Hauer <s.hauer@pengutronix.de> Date: Mon, 4 Jan 2010 10:08:52 +0100 Subject: [PATCH] remove tftp/nfs specific code to net/* Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> --- commands/net.c | 108 -------------------------------------------------------- net/nfs.c | 56 ++++++++++++++++++++++++++++- net/tftp.c | 72 ++++++++++++++++++++++++++++++++++++- 3 files changed, 126 insertions(+), 110 deletions(-) diff --git a/commands/net.c b/commands/net.c index 902c8bb..5fa49cf 100644 --- a/commands/net.c +++ b/commands/net.c @@ -32,12 +32,8 @@ #include <driver.h> #include <net.h> #include <fs.h> -#include <fcntl.h> #include <errno.h> #include <libbb.h> -#include <libgen.h> - -static int netboot_common (proto_t, cmd_tbl_t *, int , char *[]); void netboot_update_env(void) { @@ -77,37 +73,6 @@ void netboot_update_env(void) setenv ("domain", NetOurNISDomain); } -static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - return netboot_common (TFTP, cmdtp, argc, argv); -} - -static const __maybe_unused char cmd_tftp_help[] = -"Usage: tftp <file> [localfile]\n" -"Load a file via network using BootP/TFTP protocol.\n"; - -BAREBOX_CMD_START(tftp) - .cmd = do_tftpb, - .usage = "Load file using tftp protocol", - BAREBOX_CMD_HELP(cmd_tftp_help) -BAREBOX_CMD_END - -/** - * @page tftp_command tftp - * - * Usage is: tftp \<filename\> [\<localfilename\>] - * - * Load a file via network using BootP/TFTP protocol. The loaded file you - * can find after download in you current ramdisk. Refer \b ls command. - * - * \<localfile> can be the local filename only, or also a device name. In the - * case of a device name, the will gets stored there. This works also for - * partitions of flash memory. Refer \b erase, \b unprotect for flash - * preparation. - * - * Note: This command is available only, if enabled in the menuconfig. - */ - #ifdef CONFIG_NET_RARP extern void RarpRequest(void); @@ -137,79 +102,6 @@ BAREBOX_CMD_START(rarpboot) BAREBOX_CMD_END #endif /* CONFIG_NET_RARP */ -#ifdef CONFIG_NET_NFS -static int do_nfs (cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - return netboot_common(NFS, cmdtp, argc, argv); -} - -static const __maybe_unused char cmd_nfs_help[] = -"Usage: nfs <file> [localfile]\n" -"Load a file via network using nfs protocol.\n"; - -BAREBOX_CMD_START(nfs) - .cmd = do_nfs, - .usage = "boot image via network using nfs protocol", - BAREBOX_CMD_HELP(cmd_nfs_help) -BAREBOX_CMD_END - -#endif /* CONFIG_NET_NFS */ - -int net_store_fd; - -extern void TftpStart(char *); /* Begin TFTP get */ -extern void NfsStart(char *); - -static int -netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, char *argv[]) -{ - int rcode = 0; - int size; - char *localfile; - char *remotefile; - - if (argc < 2) - return COMMAND_ERROR_USAGE; - - remotefile = argv[1]; - - if (argc == 2) - localfile = basename(remotefile); - else - localfile = argv[2]; - - net_store_fd = open(localfile, O_WRONLY | O_CREAT); - if (net_store_fd < 0) { - perror("open"); - return 1; - } - - if (NetLoopInit(proto) < 0) - goto out; - - switch (proto) { - case TFTP: - TftpStart(remotefile); - break; - case NFS: - NfsStart(remotefile); - default: - break; - } - - if ((size = NetLoop()) < 0) { - rcode = size; - goto out; - } - - /* NetLoop ok, update environment */ - netboot_update_env(); - -out: - close(net_store_fd); - return rcode; -} - static int do_ethact (cmd_tbl_t *cmdtp, int argc, char *argv[]) { struct eth_device *edev; diff --git a/net/nfs.c b/net/nfs.c index fe0bc70..f68741a 100644 --- a/net/nfs.c +++ b/net/nfs.c @@ -29,6 +29,9 @@ #include <malloc.h> #include <libgen.h> #include <fs.h> +#include <libgen.h> +#include <fcntl.h> +#include <errno.h> #include "nfs.h" /*#define NFS_DEBUG*/ @@ -63,7 +66,7 @@ static char *nfs_filename; static char *nfs_path; static char nfs_path_buff[2048]; -extern int net_store_fd; +static int net_store_fd; static __inline__ int store_block (uchar * src, unsigned offset, unsigned len) @@ -703,3 +706,54 @@ NfsStart (char *p) NfsSend (); } +static int do_nfs (cmd_tbl_t *cmdtp, int argc, char *argv[]) +{ + int rcode = 0; + char *localfile; + char *remotefile; + + if (argc < 2) + return COMMAND_ERROR_USAGE; + + remotefile = argv[1]; + + if (argc == 2) + localfile = basename(remotefile); + else + localfile = argv[2]; + + net_store_fd = open(localfile, O_WRONLY | O_CREAT); + if (net_store_fd < 0) { + perror("open"); + return 1; + } + + if (NetLoopInit(NFS) < 0) + goto out; + + NfsStart(remotefile); + + rcode = NetLoop(); + if (rcode < 0) { + rcode = 1; + goto out; + } + + /* NetLoop ok, update environment */ + netboot_update_env(); + +out: + close(net_store_fd); + return rcode; +} + +static const __maybe_unused char cmd_nfs_help[] = +"Usage: nfs <file> [localfile]\n" +"Load a file via network using nfs protocol.\n"; + +BAREBOX_CMD_START(nfs) + .cmd = do_nfs, + .usage = "boot image via network using nfs protocol", + BAREBOX_CMD_HELP(cmd_nfs_help) +BAREBOX_CMD_END + diff --git a/net/tftp.c b/net/tftp.c index 169855f..b9c6fdd 100644 --- a/net/tftp.c +++ b/net/tftp.c @@ -11,6 +11,8 @@ #include <clock.h> #include <fs.h> #include <errno.h> +#include <libgen.h> +#include <fcntl.h> #include "tftp.h" #undef ET_DEBUG @@ -49,7 +51,7 @@ static int TftpState; static char *tftp_filename; -extern int net_store_fd; +static int net_store_fd; static int store_block(unsigned block, uchar * src, unsigned len) { @@ -253,3 +255,71 @@ void TftpStart(char *filename) TftpSend(); } + +static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[]) +{ + int rcode = 0; + char *localfile; + char *remotefile; + + if (argc < 2) + return COMMAND_ERROR_USAGE; + + remotefile = argv[1]; + + if (argc == 2) + localfile = basename(remotefile); + else + localfile = argv[2]; + + net_store_fd = open(localfile, O_WRONLY | O_CREAT); + if (net_store_fd < 0) { + perror("open"); + return 1; + } + + if (NetLoopInit(TFTP) < 0) + goto out; + + TftpStart(remotefile); + + rcode = NetLoop(); + if (rcode < 0) { + rcode = 1; + goto out; + } + + /* NetLoop ok, update environment */ + netboot_update_env(); + +out: + close(net_store_fd); + return rcode; +} + +static const __maybe_unused char cmd_tftp_help[] = +"Usage: tftp <file> [localfile]\n" +"Load a file via network using BootP/TFTP protocol.\n"; + +BAREBOX_CMD_START(tftp) + .cmd = do_tftpb, + .usage = "Load file using tftp protocol", + BAREBOX_CMD_HELP(cmd_tftp_help) +BAREBOX_CMD_END + +/** + * @page tftp_command tftp + * + * Usage is: tftp \<filename\> [\<localfilename\>] + * + * Load a file via network using BootP/TFTP protocol. The loaded file you + * can find after download in you current ramdisk. Refer \b ls command. + * + * \<localfile> can be the local filename only, or also a device name. In the + * case of a device name, the will gets stored there. This works also for + * partitions of flash memory. Refer \b erase, \b unprotect for flash + * preparation. + * + * Note: This command is available only, if enabled in the menuconfig. + */ + -- 1.6.5.2 -- Pengutronix e.K. | | Industrial Linux Solutions | http://www.pengutronix.de/ | Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0 | Amtsgericht Hildesheim, HRA 2686 | Fax: +49-5121-206917-5555 | _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 4+ messages in thread
* RE: [PATCH 1/1] net: Exclude code based on selected protocol 2010-01-04 10:08 ` Sascha Hauer @ 2010-01-04 16:18 ` Premi, Sanjeev 0 siblings, 0 replies; 4+ messages in thread From: Premi, Sanjeev @ 2010-01-04 16:18 UTC (permalink / raw) To: Sascha Hauer; +Cc: barebox > -----Original Message----- > From: Sascha Hauer [mailto:s.hauer@pengutronix.de] > Sent: Monday, January 04, 2010 3:39 PM > To: Premi, Sanjeev > Cc: barebox@lists.infradead.org > Subject: Re: [PATCH 1/1] net: Exclude code based on selected protocol > > Hi, > > On Thu, Dec 24, 2009 at 07:25:37PM +0530, Sanjeev Premi wrote: > > Exclude the code for TFTP/NFS if either of the > > protocols is not selected. > > Ok, this should be fixed. I would rather use the following patch to do > it. It adds a few bytes of binary space but it moves the code which > belongs together to the appropriate files. > > Sascha I thought there was specific reason to keep the code as it existed. Will be able to try it in couple of days. Many things to catch up after vacation... Best regards, Sanjeev > > > From 6c312514f8272409a84b4f235e56262ace283ea8 Mon Sep 17 00:00:00 2001 > From: Sascha Hauer <s.hauer@pengutronix.de> > Date: Mon, 4 Jan 2010 10:08:52 +0100 > Subject: [PATCH] remove tftp/nfs specific code to net/* > > Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de> > --- > commands/net.c | 108 > -------------------------------------------------------- > net/nfs.c | 56 ++++++++++++++++++++++++++++- > net/tftp.c | 72 ++++++++++++++++++++++++++++++++++++- > 3 files changed, 126 insertions(+), 110 deletions(-) > > diff --git a/commands/net.c b/commands/net.c > index 902c8bb..5fa49cf 100644 > --- a/commands/net.c > +++ b/commands/net.c > @@ -32,12 +32,8 @@ > #include <driver.h> > #include <net.h> > #include <fs.h> > -#include <fcntl.h> > #include <errno.h> > #include <libbb.h> > -#include <libgen.h> > - > -static int netboot_common (proto_t, cmd_tbl_t *, int , char *[]); > > void netboot_update_env(void) > { > @@ -77,37 +73,6 @@ void netboot_update_env(void) > setenv ("domain", NetOurNISDomain); > } > > -static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[]) > -{ > - return netboot_common (TFTP, cmdtp, argc, argv); > -} > - > -static const __maybe_unused char cmd_tftp_help[] = > -"Usage: tftp <file> [localfile]\n" > -"Load a file via network using BootP/TFTP protocol.\n"; > - > -BAREBOX_CMD_START(tftp) > - .cmd = do_tftpb, > - .usage = "Load file using tftp protocol", > - BAREBOX_CMD_HELP(cmd_tftp_help) > -BAREBOX_CMD_END > - > -/** > - * @page tftp_command tftp > - * > - * Usage is: tftp \<filename\> [\<localfilename\>] > - * > - * Load a file via network using BootP/TFTP protocol. The > loaded file you > - * can find after download in you current ramdisk. Refer \b > ls command. > - * > - * \<localfile> can be the local filename only, or also a > device name. In the > - * case of a device name, the will gets stored there. This > works also for > - * partitions of flash memory. Refer \b erase, \b unprotect for flash > - * preparation. > - * > - * Note: This command is available only, if enabled in the > menuconfig. > - */ > - > #ifdef CONFIG_NET_RARP > extern void RarpRequest(void); > > @@ -137,79 +102,6 @@ BAREBOX_CMD_START(rarpboot) > BAREBOX_CMD_END > #endif /* CONFIG_NET_RARP */ > > -#ifdef CONFIG_NET_NFS > -static int do_nfs (cmd_tbl_t *cmdtp, int argc, char *argv[]) > -{ > - return netboot_common(NFS, cmdtp, argc, argv); > -} > - > -static const __maybe_unused char cmd_nfs_help[] = > -"Usage: nfs <file> [localfile]\n" > -"Load a file via network using nfs protocol.\n"; > - > -BAREBOX_CMD_START(nfs) > - .cmd = do_nfs, > - .usage = "boot image via network using nfs protocol", > - BAREBOX_CMD_HELP(cmd_nfs_help) > -BAREBOX_CMD_END > - > -#endif /* CONFIG_NET_NFS */ > - > -int net_store_fd; > - > -extern void TftpStart(char *); /* Begin TFTP get */ > -extern void NfsStart(char *); > - > -static int > -netboot_common (proto_t proto, cmd_tbl_t *cmdtp, int argc, > char *argv[]) > -{ > - int rcode = 0; > - int size; > - char *localfile; > - char *remotefile; > - > - if (argc < 2) > - return COMMAND_ERROR_USAGE; > - > - remotefile = argv[1]; > - > - if (argc == 2) > - localfile = basename(remotefile); > - else > - localfile = argv[2]; > - > - net_store_fd = open(localfile, O_WRONLY | O_CREAT); > - if (net_store_fd < 0) { > - perror("open"); > - return 1; > - } > - > - if (NetLoopInit(proto) < 0) > - goto out; > - > - switch (proto) { > - case TFTP: > - TftpStart(remotefile); > - break; > - case NFS: > - NfsStart(remotefile); > - default: > - break; > - } > - > - if ((size = NetLoop()) < 0) { > - rcode = size; > - goto out; > - } > - > - /* NetLoop ok, update environment */ > - netboot_update_env(); > - > -out: > - close(net_store_fd); > - return rcode; > -} > - > static int do_ethact (cmd_tbl_t *cmdtp, int argc, char *argv[]) > { > struct eth_device *edev; > diff --git a/net/nfs.c b/net/nfs.c > index fe0bc70..f68741a 100644 > --- a/net/nfs.c > +++ b/net/nfs.c > @@ -29,6 +29,9 @@ > #include <malloc.h> > #include <libgen.h> > #include <fs.h> > +#include <libgen.h> > +#include <fcntl.h> > +#include <errno.h> > #include "nfs.h" > > /*#define NFS_DEBUG*/ > @@ -63,7 +66,7 @@ static char *nfs_filename; > static char *nfs_path; > static char nfs_path_buff[2048]; > > -extern int net_store_fd; > +static int net_store_fd; > > static __inline__ int > store_block (uchar * src, unsigned offset, unsigned len) > @@ -703,3 +706,54 @@ NfsStart (char *p) > NfsSend (); > } > > +static int do_nfs (cmd_tbl_t *cmdtp, int argc, char *argv[]) > +{ > + int rcode = 0; > + char *localfile; > + char *remotefile; > + > + if (argc < 2) > + return COMMAND_ERROR_USAGE; > + > + remotefile = argv[1]; > + > + if (argc == 2) > + localfile = basename(remotefile); > + else > + localfile = argv[2]; > + > + net_store_fd = open(localfile, O_WRONLY | O_CREAT); > + if (net_store_fd < 0) { > + perror("open"); > + return 1; > + } > + > + if (NetLoopInit(NFS) < 0) > + goto out; > + > + NfsStart(remotefile); > + > + rcode = NetLoop(); > + if (rcode < 0) { > + rcode = 1; > + goto out; > + } > + > + /* NetLoop ok, update environment */ > + netboot_update_env(); > + > +out: > + close(net_store_fd); > + return rcode; > +} > + > +static const __maybe_unused char cmd_nfs_help[] = > +"Usage: nfs <file> [localfile]\n" > +"Load a file via network using nfs protocol.\n"; > + > +BAREBOX_CMD_START(nfs) > + .cmd = do_nfs, > + .usage = "boot image via network using nfs protocol", > + BAREBOX_CMD_HELP(cmd_nfs_help) > +BAREBOX_CMD_END > + > diff --git a/net/tftp.c b/net/tftp.c > index 169855f..b9c6fdd 100644 > --- a/net/tftp.c > +++ b/net/tftp.c > @@ -11,6 +11,8 @@ > #include <clock.h> > #include <fs.h> > #include <errno.h> > +#include <libgen.h> > +#include <fcntl.h> > #include "tftp.h" > > #undef ET_DEBUG > @@ -49,7 +51,7 @@ static int TftpState; > > static char *tftp_filename; > > -extern int net_store_fd; > +static int net_store_fd; > > static int store_block(unsigned block, uchar * src, unsigned len) > { > @@ -253,3 +255,71 @@ void TftpStart(char *filename) > > TftpSend(); > } > + > +static int do_tftpb (cmd_tbl_t *cmdtp, int argc, char *argv[]) > +{ > + int rcode = 0; > + char *localfile; > + char *remotefile; > + > + if (argc < 2) > + return COMMAND_ERROR_USAGE; > + > + remotefile = argv[1]; > + > + if (argc == 2) > + localfile = basename(remotefile); > + else > + localfile = argv[2]; > + > + net_store_fd = open(localfile, O_WRONLY | O_CREAT); > + if (net_store_fd < 0) { > + perror("open"); > + return 1; > + } > + > + if (NetLoopInit(TFTP) < 0) > + goto out; > + > + TftpStart(remotefile); > + > + rcode = NetLoop(); > + if (rcode < 0) { > + rcode = 1; > + goto out; > + } > + > + /* NetLoop ok, update environment */ > + netboot_update_env(); > + > +out: > + close(net_store_fd); > + return rcode; > +} > + > +static const __maybe_unused char cmd_tftp_help[] = > +"Usage: tftp <file> [localfile]\n" > +"Load a file via network using BootP/TFTP protocol.\n"; > + > +BAREBOX_CMD_START(tftp) > + .cmd = do_tftpb, > + .usage = "Load file using tftp protocol", > + BAREBOX_CMD_HELP(cmd_tftp_help) > +BAREBOX_CMD_END > + > +/** > + * @page tftp_command tftp > + * > + * Usage is: tftp \<filename\> [\<localfilename\>] > + * > + * Load a file via network using BootP/TFTP protocol. The > loaded file you > + * can find after download in you current ramdisk. Refer \b > ls command. > + * > + * \<localfile> can be the local filename only, or also a > device name. In the > + * case of a device name, the will gets stored there. This > works also for > + * partitions of flash memory. Refer \b erase, \b unprotect for flash > + * preparation. > + * > + * Note: This command is available only, if enabled in the > menuconfig. > + */ > + > -- > 1.6.5.2 > > > -- > Pengutronix e.K. | > | > Industrial Linux Solutions | > http://www.pengutronix.de/ | > Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: > +49-5121-206917-0 | > Amtsgericht Hildesheim, HRA 2686 | Fax: > +49-5121-206917-5555 | > _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2010-01-04 16:18 UTC | newest] Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2009-12-24 13:55 [PATCH 0/1] Exclude code based on config Sanjeev Premi 2009-12-24 13:55 ` [PATCH 1/1] net: Exclude code based on selected protocol Sanjeev Premi 2010-01-04 10:08 ` Sascha Hauer 2010-01-04 16:18 ` Premi, Sanjeev
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox