linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
* [dtc] Allow multipart property values
@ 2007-02-07  3:23 David Gibson
  2007-02-07  4:37 ` Kumar Gala
  2007-02-07 14:35 ` Jon Loeliger
  0 siblings, 2 replies; 8+ messages in thread
From: David Gibson @ 2007-02-07  3:23 UTC (permalink / raw)
  To: Jon Loeliger; +Cc: linuxppc-dev

At present each property definition in a dts file must give as the
value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
list (<1 2 3 ...>).  This patch allows a property value to be given as
several of these, comma-separated.  The final property value is just
the components appended together.  So a property could have a list of
cells followed by a string, or a bytestring followed by some cells.
Cells are always aligned, so if cells are given following a string or
bytestring which is not a multiple of 4 bytes long, zero bytes are
inserted to align the following cells.

The primary motivation for this feature, however, is to allow defining
a property as a list of several strings.  This is what's needed for
defining OF 'compatible' properties, and is less ugly and fiddly than
using embedded \0s in the strings.

Signed-off-by: David Gibson <dwg@au1.ibm.com>

Index: dtc/data.c
===================================================================
--- dtc.orig/data.c	2007-01-31 15:41:24.000000000 +1100
+++ dtc/data.c	2007-01-31 15:42:03.000000000 +1100
@@ -197,6 +197,33 @@ struct data data_append_data(struct data
 	return d;
 }
 
+struct data data_merge(struct data d1, struct data d2)
+{
+	struct data d;
+	struct fixup **ff;
+	struct fixup *f, *f2;
+
+	d = data_append_data(d1, d2.val, d2.len);
+
+	/* Extract d2's fixups */
+	f2 = d2.refs;
+	d2.refs = NULL;
+
+	/* Tack them onto d's list of fixups */
+	ff = &d.refs;
+	while (*ff)
+		ff = &((*ff)->next);
+	*ff = f2;
+
+	/* And correct them for their new position */
+	for (f = f2; f; f = f->next)
+		f->offset += d1.len;
+
+	data_free(d2);
+
+	return d;
+}
+
 struct data data_append_cell(struct data d, cell_t word)
 {
 	cell_t beword = cpu_to_be32(word);
Index: dtc/dtc-parser.y
===================================================================
--- dtc.orig/dtc-parser.y	2007-01-31 15:41:53.000000000 +1100
+++ dtc/dtc-parser.y	2007-01-31 15:42:03.000000000 +1100
@@ -58,6 +58,7 @@ extern struct boot_info *the_boot_info;
 %token <str> DT_REF
 
 %type <data> propdata
+%type <data> propdataprefix
 %type <re> memreserve
 %type <re> memreserves
 %type <data> celllist
@@ -121,9 +122,15 @@ propdef:	label DT_PROPNAME '=' propdata 
 		}
 	;
 
-propdata:	DT_STRING { $$ = $1; }
-	|	'<' celllist '>' { $$ = $2; }
-	|	'[' bytestring ']' { $$ = $2; }
+propdata:	propdataprefix DT_STRING { $$ = data_merge($1, $2); }
+	|	propdataprefix '<' celllist '>' {
+			$$ = data_merge(data_append_align($1, sizeof(cell_t)), $3);
+		}
+	|	propdataprefix '[' bytestring ']' { $$ = data_merge($1, $3); }
+	;
+
+propdataprefix:	propdata ',' { $$ = $1; }
+	|	/* empty */ { $$ = empty_data; }
 	;
 
 celllist:	celllist DT_CELL { $$ = data_append_cell($1, $2); }
Index: dtc/dtc.h
===================================================================
--- dtc.orig/dtc.h	2007-01-31 15:41:24.000000000 +1100
+++ dtc/dtc.h	2007-01-31 15:42:03.000000000 +1100
@@ -119,6 +119,7 @@ struct data data_copy_escape_string(char
 struct data data_copy_file(FILE *f, size_t len);
 
 struct data data_append_data(struct data d, void *p, int len);
+struct data data_merge(struct data d1, struct data d2);
 struct data data_append_cell(struct data d, cell_t word);
 struct data data_append_re(struct data d, struct reserve_entry *re);
 struct data data_append_addr(struct data d, u64 addr);
Index: dtc/dtc-lexer.l
===================================================================
--- dtc.orig/dtc-lexer.l	2007-01-31 15:41:24.000000000 +1100
+++ dtc/dtc-lexer.l	2007-01-31 15:42:03.000000000 +1100
@@ -123,6 +123,15 @@ REFCHAR		({PROPCHAR}|{UNITCHAR}|[/@])
 			return ']';
 		}
 
+,		{ /* Technically this is a valid property name,
+		     but we'd rather use it as punctuation, so detect it
+		     here in preference */
+			yylloc.first_line = yylineno;
+			DPRINT("Char (propname like): %c (\\x%02x)\n", yytext[0],
+				(unsigned)yytext[0]);
+			return yytext[0];
+		}
+
 {PROPCHAR}+	{
 			yylloc.first_line = yylineno;
 			DPRINT("PropName: %s\n", yytext);

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dtc] Allow multipart property values
  2007-02-07  3:23 [dtc] Allow multipart property values David Gibson
@ 2007-02-07  4:37 ` Kumar Gala
  2007-02-07  4:46   ` David Gibson
  2007-02-07 14:35 ` Jon Loeliger
  1 sibling, 1 reply; 8+ messages in thread
From: Kumar Gala @ 2007-02-07  4:37 UTC (permalink / raw)
  To: David Gibson; +Cc: linuxppc-dev


On Feb 6, 2007, at 9:23 PM, David Gibson wrote:

> At present each property definition in a dts file must give as the
> value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
> list (<1 2 3 ...>).  This patch allows a property value to be given as
> several of these, comma-separated.  The final property value is just
> the components appended together.  So a property could have a list of
> cells followed by a string, or a bytestring followed by some cells.
> Cells are always aligned, so if cells are given following a string or
> bytestring which is not a multiple of 4 bytes long, zero bytes are
> inserted to align the following cells.
>
> The primary motivation for this feature, however, is to allow defining
> a property as a list of several strings.  This is what's needed for
> defining OF 'compatible' properties, and is less ugly and fiddly than
> using embedded \0s in the strings.
>
> Signed-off-by: David Gibson <dwg@au1.ibm.com>

Mind adding examples to the testsuite?

- k

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dtc] Allow multipart property values
  2007-02-07  4:37 ` Kumar Gala
@ 2007-02-07  4:46   ` David Gibson
  2007-02-07  4:50     ` Kumar Gala
  0 siblings, 1 reply; 8+ messages in thread
From: David Gibson @ 2007-02-07  4:46 UTC (permalink / raw)
  To: Kumar Gala; +Cc: linuxppc-dev

On Tue, Feb 06, 2007 at 10:37:25PM -0600, Kumar Gala wrote:
> 
> On Feb 6, 2007, at 9:23 PM, David Gibson wrote:
> 
> > At present each property definition in a dts file must give as the
> > value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
> > list (<1 2 3 ...>).  This patch allows a property value to be given as
> > several of these, comma-separated.  The final property value is just
> > the components appended together.  So a property could have a list of
> > cells followed by a string, or a bytestring followed by some cells.
> > Cells are always aligned, so if cells are given following a string or
> > bytestring which is not a multiple of 4 bytes long, zero bytes are
> > inserted to align the following cells.
> >
> > The primary motivation for this feature, however, is to allow defining
> > a property as a list of several strings.  This is what's needed for
> > defining OF 'compatible' properties, and is less ugly and fiddly than
> > using embedded \0s in the strings.
> >
> > Signed-off-by: David Gibson <dwg@au1.ibm.com>
> 
> Mind adding examples to the testsuite?

What testsuite...?

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dtc] Allow multipart property values
  2007-02-07  4:46   ` David Gibson
@ 2007-02-07  4:50     ` Kumar Gala
  2007-02-07  5:37       ` David Gibson
  0 siblings, 1 reply; 8+ messages in thread
From: Kumar Gala @ 2007-02-07  4:50 UTC (permalink / raw)
  To: David Gibson; +Cc: linuxppc-dev


On Feb 6, 2007, at 10:46 PM, David Gibson wrote:

> On Tue, Feb 06, 2007 at 10:37:25PM -0600, Kumar Gala wrote:
>>
>> On Feb 6, 2007, at 9:23 PM, David Gibson wrote:
>>
>>> At present each property definition in a dts file must give as the
>>> value either a string ("abc..."), a bytestring ([12abcd...]) or a  
>>> cell
>>> list (<1 2 3 ...>).  This patch allows a property value to be  
>>> given as
>>> several of these, comma-separated.  The final property value is just
>>> the components appended together.  So a property could have a  
>>> list of
>>> cells followed by a string, or a bytestring followed by some cells.
>>> Cells are always aligned, so if cells are given following a  
>>> string or
>>> bytestring which is not a multiple of 4 bytes long, zero bytes are
>>> inserted to align the following cells.
>>>
>>> The primary motivation for this feature, however, is to allow  
>>> defining
>>> a property as a list of several strings.  This is what's needed for
>>> defining OF 'compatible' properties, and is less ugly and fiddly  
>>> than
>>> using embedded \0s in the strings.
>>>
>>> Signed-off-by: David Gibson <dwg@au1.ibm.com>
>>
>> Mind adding examples to the testsuite?
>
> What testsuite...?

Well there was a tests/ dir  and test.dts :)

How about adding something to test.dts or an example.dts that shows  
various new things you just added.

- k

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dtc] Allow multipart property values
  2007-02-07  4:50     ` Kumar Gala
@ 2007-02-07  5:37       ` David Gibson
  2007-02-08 23:29         ` Jon Loeliger
  0 siblings, 1 reply; 8+ messages in thread
From: David Gibson @ 2007-02-07  5:37 UTC (permalink / raw)
  To: Kumar Gala; +Cc: linuxppc-dev

On Tue, Feb 06, 2007 at 10:50:09PM -0600, Kumar Gala wrote:
> 
> On Feb 6, 2007, at 10:46 PM, David Gibson wrote:
> 
> > On Tue, Feb 06, 2007 at 10:37:25PM -0600, Kumar Gala wrote:
> >>
> >> On Feb 6, 2007, at 9:23 PM, David Gibson wrote:
> >>
> >>> At present each property definition in a dts file must give as the
> >>> value either a string ("abc..."), a bytestring ([12abcd...]) or a  
> >>> cell
> >>> list (<1 2 3 ...>).  This patch allows a property value to be  
> >>> given as
> >>> several of these, comma-separated.  The final property value is just
> >>> the components appended together.  So a property could have a  
> >>> list of
> >>> cells followed by a string, or a bytestring followed by some cells.
> >>> Cells are always aligned, so if cells are given following a  
> >>> string or
> >>> bytestring which is not a multiple of 4 bytes long, zero bytes are
> >>> inserted to align the following cells.
> >>>
> >>> The primary motivation for this feature, however, is to allow  
> >>> defining
> >>> a property as a list of several strings.  This is what's needed for
> >>> defining OF 'compatible' properties, and is less ugly and fiddly  
> >>> than
> >>> using embedded \0s in the strings.
> >>>
> >>> Signed-off-by: David Gibson <dwg@au1.ibm.com>
> >>
> >> Mind adding examples to the testsuite?
> >
> > What testsuite...?
> 
> Well there was a tests/ dir  and test.dts :)

There's nothing in tests/ though - I always meant to make a testsuite,
but I never got around to it.  Current plan is to implement a
testsuite by merging libfdt into the dtc tree.

Here's a revised patch which adds an example usage to test.dts

[dtc] Allow multipart property values

At present each property definition in a dts file must give as the
value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
list (<1 2 3 ...>).  This patch allows a property value to be given as
several of these, comma-separated.  The final property value is just
the components appended together.  So a property could have a list of
cells followed by a string, or a bytestring followed by some cells.
Cells are always aligned, so if cells are given following a string or
bytestring which is not a multiple of 4 bytes long, zero bytes are
inserted to align the following cells.

The primary motivation for this feature, however, is to allow defining
a property as a list of several strings.  This is what's needed for
defining OF 'compatible' properties, and is less ugly and fiddly than
using embedded \0s in the strings.

Signed-off-by: David Gibson <dwg@au1.ibm.com>

Index: dtc/data.c
===================================================================
--- dtc.orig/data.c	2007-02-07 14:17:00.000000000 +1100
+++ dtc/data.c	2007-02-07 14:24:34.000000000 +1100
@@ -197,6 +197,33 @@ struct data data_append_data(struct data
 	return d;
 }
 
+struct data data_merge(struct data d1, struct data d2)
+{
+	struct data d;
+	struct fixup **ff;
+	struct fixup *f, *f2;
+
+	d = data_append_data(d1, d2.val, d2.len);
+
+	/* Extract d2's fixups */
+	f2 = d2.refs;
+	d2.refs = NULL;
+
+	/* Tack them onto d's list of fixups */
+	ff = &d.refs;
+	while (*ff)
+		ff = &((*ff)->next);
+	*ff = f2;
+
+	/* And correct them for their new position */
+	for (f = f2; f; f = f->next)
+		f->offset += d1.len;
+
+	data_free(d2);
+
+	return d;
+}
+
 struct data data_append_cell(struct data d, cell_t word)
 {
 	cell_t beword = cpu_to_be32(word);
Index: dtc/dtc-parser.y
===================================================================
--- dtc.orig/dtc-parser.y	2007-02-07 14:17:00.000000000 +1100
+++ dtc/dtc-parser.y	2007-02-07 14:24:34.000000000 +1100
@@ -58,6 +58,7 @@ extern struct boot_info *the_boot_info;
 %token <str> DT_REF
 
 %type <data> propdata
+%type <data> propdataprefix
 %type <re> memreserve
 %type <re> memreserves
 %type <data> celllist
@@ -121,9 +122,15 @@ propdef:	label DT_PROPNAME '=' propdata 
 		}
 	;
 
-propdata:	DT_STRING { $$ = $1; }
-	|	'<' celllist '>' { $$ = $2; }
-	|	'[' bytestring ']' { $$ = $2; }
+propdata:	propdataprefix DT_STRING { $$ = data_merge($1, $2); }
+	|	propdataprefix '<' celllist '>' {
+			$$ = data_merge(data_append_align($1, sizeof(cell_t)), $3);
+		}
+	|	propdataprefix '[' bytestring ']' { $$ = data_merge($1, $3); }
+	;
+
+propdataprefix:	propdata ',' { $$ = $1; }
+	|	/* empty */ { $$ = empty_data; }
 	;
 
 celllist:	celllist DT_CELL { $$ = data_append_cell($1, $2); }
Index: dtc/dtc.h
===================================================================
--- dtc.orig/dtc.h	2007-02-07 14:17:00.000000000 +1100
+++ dtc/dtc.h	2007-02-07 14:24:34.000000000 +1100
@@ -119,6 +119,7 @@ struct data data_copy_escape_string(char
 struct data data_copy_file(FILE *f, size_t len);
 
 struct data data_append_data(struct data d, void *p, int len);
+struct data data_merge(struct data d1, struct data d2);
 struct data data_append_cell(struct data d, cell_t word);
 struct data data_append_re(struct data d, struct reserve_entry *re);
 struct data data_append_addr(struct data d, u64 addr);
Index: dtc/dtc-lexer.l
===================================================================
--- dtc.orig/dtc-lexer.l	2007-02-07 14:17:00.000000000 +1100
+++ dtc/dtc-lexer.l	2007-02-07 14:24:34.000000000 +1100
@@ -123,6 +123,15 @@ REFCHAR		({PROPCHAR}|{UNITCHAR}|[/@])
 			return ']';
 		}
 
+,		{ /* Technically this is a valid property name,
+		     but we'd rather use it as punctuation, so detect it
+		     here in preference */
+			yylloc.first_line = yylineno;
+			DPRINT("Char (propname like): %c (\\x%02x)\n", yytext[0],
+				(unsigned)yytext[0]);
+			return yytext[0];
+		}
+
 {PROPCHAR}+	{
 			yylloc.first_line = yylineno;
 			DPRINT("PropName: %s\n", yytext);
Index: dtc/test.dts
===================================================================
--- dtc.orig/test.dts	2007-02-07 16:35:54.000000000 +1100
+++ dtc/test.dts	2007-02-07 16:37:21.000000000 +1100
@@ -4,7 +4,7 @@
 
 / {
 	model = "MyBoardName";
-	compatible = "MyBoardFamilyName";
+	compatible = "MyBoardName", "MyBoardFamilyName";
 	#address-cells = <2>;
 	#size-cells = <2>;
 
@@ -39,6 +39,7 @@
 		string = "\xff\0stuffstuff\t\t\t\n\n\n";
 		blob = [0a 0b 0c 0d de ea ad be ef];
 		ref = < &/memory@0 >;
+		mixed = "abc", [1234], <a b c>;
 	};
 
 	memory@0 {


-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dtc] Allow multipart property values
  2007-02-07  3:23 [dtc] Allow multipart property values David Gibson
  2007-02-07  4:37 ` Kumar Gala
@ 2007-02-07 14:35 ` Jon Loeliger
  2007-02-07 16:40   ` David Gibson
  1 sibling, 1 reply; 8+ messages in thread
From: Jon Loeliger @ 2007-02-07 14:35 UTC (permalink / raw)
  To: David Gibson; +Cc: linuxppc-dev

So, like, the other day David Gibson mumbled:
> At present each property definition in a dts file must give as the
> value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
> list (<1 2 3 ...>).  This patch allows a property value to be given as
> several of these, comma-separated.  The final property value is just
> the components appended together.  So a property could have a list of
> cells followed by a string, or a bytestring followed by some cells.
> Cells are always aligned, so if cells are given following a string or
> bytestring which is not a multiple of 4 bytes long, zero bytes are
> inserted to align the following cells.
> 
> The primary motivation for this feature, however, is to allow defining
> a property as a list of several strings.  This is what's needed for
> defining OF 'compatible' properties, and is less ugly and fiddly than
> using embedded \0s in the strings.

David,

I'd like a bit of clarification on the issue of null-padding.
I'm not sure how it is supposed to work for OF originally,
but I'm not sure the null-padding to mod 4 will be the same
(or usable) semantics.

In OF's original definition would "ab\0de" yield something
different than a similar "ab", [0], "de" with your proposal?
I could see that we might have:

	OF   : a b \0 d e
	Yours: a b \0 \0 \0 d e

Or does the OF spec say that it will also pad to mod 4?
Or do all strings always start on mod 4 address?

Thanks,
jdl

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dtc] Allow multipart property values
  2007-02-07 14:35 ` Jon Loeliger
@ 2007-02-07 16:40   ` David Gibson
  0 siblings, 0 replies; 8+ messages in thread
From: David Gibson @ 2007-02-07 16:40 UTC (permalink / raw)
  To: Jon Loeliger; +Cc: linuxppc-dev

On Wed, Feb 07, 2007 at 08:35:25AM -0600, Jon Loeliger wrote:
> So, like, the other day David Gibson mumbled:
> > At present each property definition in a dts file must give as the
> > value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
> > list (<1 2 3 ...>).  This patch allows a property value to be given as
> > several of these, comma-separated.  The final property value is just
> > the components appended together.  So a property could have a list of
> > cells followed by a string, or a bytestring followed by some cells.
> > Cells are always aligned, so if cells are given following a string or
> > bytestring which is not a multiple of 4 bytes long, zero bytes are
> > inserted to align the following cells.
> > 
> > The primary motivation for this feature, however, is to allow defining
> > a property as a list of several strings.  This is what's needed for
> > defining OF 'compatible' properties, and is less ugly and fiddly than
> > using embedded \0s in the strings.
> 
> David,
> 
> I'd like a bit of clarification on the issue of null-padding.
> I'm not sure how it is supposed to work for OF originally,

I don't see how OF is relevant - the notation used for property values
in dts is my own invention, not an OF specification.

> but I'm not sure the null-padding to mod 4 will be the same
> (or usable) semantics.
> 
> In OF's original definition would "ab\0de" yield something
> different than a similar "ab", [0], "de" with your proposal?
> I could see that we might have:
> 
> 	OF   : a b \0 d e
> 	Yours: a b \0 \0 \0 d e
> 
> Or does the OF spec say that it will also pad to mod 4?
> Or do all strings always start on mod 4 address?

No, it's only the "cell" format that's padded for alignment.  Actually
the example you give (with [0]) is invalid in any case, since
bytestring notation must have a multiple of 2 digits.

	"ab", [00], "de"
is equivalent to
	"ab\0\0de"
or to
	[61620000646500]
There are two zero bytes in the middle, the first is the terminator
for "ab", the second is the explicit [00].

With cell notation, however, alignement padding gives us:

	"abc", <deadbeef>
is equivalent to
	[61626300deadbeef]

but
	"a", <deadbeef>
is equivalent to
	[61000000deadbeef]

I can't think of any good reason you'd want to define a property with
a cell portion following a non-cell portion, and doing so is probably
a bad idea.  However, it falls naturally out of the most obvious way
to allow list-of-strings notation for compatible properties.

-- 
David Gibson			| I'll have my music baroque, and my code
david AT gibson.dropbear.id.au	| minimalist, thank you.  NOT _the_ _other_
				| _way_ _around_!
http://www.ozlabs.org/~dgibson

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: [dtc] Allow multipart property values
  2007-02-07  5:37       ` David Gibson
@ 2007-02-08 23:29         ` Jon Loeliger
  0 siblings, 0 replies; 8+ messages in thread
From: Jon Loeliger @ 2007-02-08 23:29 UTC (permalink / raw)
  To: David Gibson; +Cc: linuxppc-dev

So, like, the other day David Gibson mumbled:
> 
> There's nothing in tests/ though - I always meant to make a testsuite,
> but I never got around to it.  Current plan is to implement a
> testsuite by merging libfdt into the dtc tree.
> 
> Here's a revised patch which adds an example usage to test.dts
> 
> [dtc] Allow multipart property values
> 
> At present each property definition in a dts file must give as the
> value either a string ("abc..."), a bytestring ([12abcd...]) or a cell
> list (<1 2 3 ...>).  This patch allows a property value to be given as
> several of these, comma-separated.  The final property value is just
> the components appended together.  So a property could have a list of
> cells followed by a string, or a bytestring followed by some cells.
> Cells are always aligned, so if cells are given following a string or
> bytestring which is not a multiple of 4 bytes long, zero bytes are
> inserted to align the following cells.
> 
> The primary motivation for this feature, however, is to allow defining
> a property as a list of several strings.  This is what's needed for
> defining OF 'compatible' properties, and is less ugly and fiddly than
> using embedded \0s in the strings.
> 
> Signed-off-by: David Gibson <dwg@au1.ibm.com>

Applied.

Thanks,
jdl

^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2007-02-08 23:29 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-02-07  3:23 [dtc] Allow multipart property values David Gibson
2007-02-07  4:37 ` Kumar Gala
2007-02-07  4:46   ` David Gibson
2007-02-07  4:50     ` Kumar Gala
2007-02-07  5:37       ` David Gibson
2007-02-08 23:29         ` Jon Loeliger
2007-02-07 14:35 ` Jon Loeliger
2007-02-07 16:40   ` David Gibson

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).