>>>>> "t" == ts <decoux / moulon.inra.fr> writes: Y> if so, how do you handle c pointers? t> it depend if you can translate it to a ruby object. Well my message is not very explicit, i.e. a little example with 2 struct typedef struct { int i; char *s; tutust *tutu; } totost; typedef struct { int j; } tutust; If you want to dump a struct totost, you must first dump all struct tutust (only once), in a hash for example : tutu = {"tutu1" => 12, "tutu2" => 24, ... } then you can dump totost as an array : toto = [ 12, "toto", "tutu2"] i.e. the C pointer is replaced by the key of tutu When you reload it, you first reload the hash tutu to re-create all the struct tutust, then when you load toto you re-create the pointer "tutust *tutu" You can do this if you can translate all your struct in a ruby object. You'll have some problem if, for example, the struct tutust is : typedef struct { FILE *fd; } tutust; it must be changed to : typedef struct { char *name, *mode; FILE *fd; } tutust; in this case you dump, the name and the mode and when you load it you re-open the fd with this information. With something like this, I was able to dump the struct NODE (from node.h), well in my case it's was easier to modify marshal.c to handle T_NODE :-) :-) Guy Decoux