Hi Christian, On Sun, Oct 23, 2005 at 08:12:28PM +0200, Christian Tismer wrote: > As a result, I created a DIR structure that holds the windows handle > plus the search structure,and it acts as the dirent structure as well. > The opendir() allocates and returns this structure and sets a flag. > readdir() checks the flag on first call and takes the already existing > resultfrom the structure. Otherwise it behaves as expected.
This is a nice enough approach. I suppose that we could expose different interfaces through rpython/extfunctable depending on the OS, but it looks like it's more trouble than it's worth. > And I'm especially unhappy that I needed to use malloc. But to avoid > this, the opendir() would need to have an interface to pass some > memory in, you would need a call to obtain its needed size, ... There is a way to let the memory be handled automatically, but again it would need two versions of the functions in rpython/extfunctable and rpython/module/ll_os.py so let's not bother here. [ This is what Thread.LockType uses: a lock is a GcStruct with a single opaque field, whose type is only declared in C. The RTyper generates malloc(<GcStruct>), GenC uses refcounting or boehm GC as usual on the structure, but manipulation of the opaque field are done only by C code. There is even no needed to obtain its size from higher levels, because we can generate an operation 'malloc(<GcStruct>)' and let the C code figure out the size with a sizeof() -- which is what occurs for all GcStructs, btw. ] A bientot, Armin. _______________________________________________ [email protected] http://codespeak.net/mailman/listinfo/pypy-dev
