[Toybox] [TOY] lspci - no *alloc

Isaac idunham at lavabit.com
Thu Jul 25 05:47:42 PDT 2013


On Thu, Jul 25, 2013 at 10:31:47AM +0200, Felix Janda wrote:
> Isaac wrote:
> > On Wed, Jul 24, 2013 at 09:20:51PM +0200, Felix Janda wrote:
> > > Attached Isaac's toy edited to use toybuf instead of
> > > dynamic memory allocation. It could look prettier, though...
> > > 
> > > Felix
> > > 
> > Broken:
> > /toybox lspci -e
> > 00:00.0 Class 0600: 8086
> > :27ac
> >  
> > 00:02.0 Class 0300: 8086
> > :27ae
> >  
> > ..
> > /toybox lspci
> > 00:00.0 Class 0600: 8086:27ac 
> > 00:02.0 Class 0300: 8086:27ae
> > ..
> > 
> > The -e flag should be expanding the width of "class" (it isn't),
> > and it should not be making lspci print 3 lines per entry.
> > And I'm not sure how to fix it.
> 
> Sorry, I obviously didn't test -e...
> 
> <      size = 6 + 2*((toys.optflags & FLAG_e) && (p != toybuf));
> >      size = 6 + 2*((toys.optflags & FLAG_e) && (p == toybuf));
> 
> Or better:
> 
> >      size = ((toys.optflags & FLAG_e) && (p == toybuf)) ? 8 : 6;
> 
> So I guess that the code is quite hard to comprehend.
> 
> > By the way, there are requests for more features (-v/-vv and text output) 
> > that would mean slightly different approaches to getting data; (p)readat_name 
> > would work in many of these cases, but text output means reading to toybuf
> > (which would clobber this), and I would also need to add more fields of varying sizes.
> 
> Yeah, I guess I did some premature optimizations. But still the data read from the
> /sys files is of relatively small fixed size?

If by "small" you mean "Probably smaller than toybuf" (see resource and config).

> Instead of to toybuf one could also put the buffers on the stack freeing up toybuf
> for other purposes.
> 
> For the text output the structure of the toy would change a lot if we want to
> avoid reparsing the pci id database for each device.
I honestly had not thought about that, but really, it is needed if we do that.

Would it work if we save it to a linked list of structs and print at the end? 
Would llist* work with that?
(I'm thinking about putting a pointer in GLOBALS.)
The structs would need char clname[128], devname[128].
Fortunately /usr/share/misc/pci.ids is sorted.

> Felix
> 





More information about the Toybox mailing list