On Mon, Sep 29, 2003 at 07:06:16PM +0200, Petter Reinholdtsen wrote: > Package: cdebconf-udeb > Version: 0.45 > > When trying to use debconf-dumpdb to extract the current debconf > values from the database, nothing is printed: > > ~ # debconf-dumpdb configdb > ~ # > > This should produce a list of debconf template names, types and > values, but nothing appear.
rfc822db does not implement the iterate() methods for templates and questions. Unfortunately this turns out to be painful to implement, which I imagine is why it wasn't done to start with. The rfc822db driver uses the tsearch() family of functions to store its database. The only iterator function in this family is twalk(). This has the following deficiencies: * The only primitive operation is calling twalk() once to iterate over all elements at once, calling a user-supplied function at each step. The iterate() interface expects to be able to iterate over one element at a time. * Although the obvious fallback solution is to accept memory inefficiency, store all the elements at once into a list, and feed them back one at a time through iterate(), the user function supplied to twalk() does not accept a private data argument, so the only way to do this would be by using a global variable. This would make the code thread-unsafe, and while that may not matter here it makes me very uncomfortable in general. Plus, as mentioned, this approach is a memory hog on large databases. One option would be to deprecate iterate() and introduce iterateall(), which would behave rather like twalk(). However, I'm not sure that this is a feasible interface given twalk()'s lack of a private data argument. The other, substantially more invasive, option I see is to get rid of the whole tsearch() family from rfc822db altogether and use something with a better iteration interface ... Cheers, -- Colin Watson [EMAIL PROTECTED]