It may be necessary to call different routines depending on whether you have a byte or a character string; this is not something a getargs converter can do. It also may be that, depending on which system routine you call, the system will *return* either wide or narrow strings to you. Every time you find another use of file names, Marc suggests you put that into fileapi.c.
I'm sure that is not what Marc meant. I think he simply meant a conversion function that would return the filename as either byte or Unicode. Get your arg from PyArg_ParseTuple, and convert it with this function. Have I missed it all these years, or should we define a PyArg_ParseTuple format that takes a "void **" and a function pointer to a type conversion function? Mark.