Hi Tim,

> It's fairly typical behaviour on Unix systems (may even be POSIX, not
> sure). And no, there isn't.

It's typical behaviour for programs, not libraries; eg. fopen("-") does 
not return stdin. The issue I'm concerned with is the way that an API 
function taking a filename treats one value specially, requiring a check 
and escaping by the caller, when it seems that aliasing "-" to mean 
stdin is a decision to be made at a higher level, for example when 
processing command line arguments.

> Sure - but so would CON under windows, or /dev/stdin, or /dev/ttys7, ...

These situations are different in that you can actually have a regular 
file called "-", and the xmlReadFile() function won't load it. This is 
different from calling xmlReadFile() on a filename that turns out to be 
bound to a socket or a pipe or some other blocking input (or an NFS 
filesystem for that matter). Blocking after trying to load "/dev/stdin" 
is not surprising, blocking while trying to load "-" is.

The header file and the doxygen comments do not even mention that "-" is 
treated specially; xmlParseFile() takes an argument called filename and 
xmlReadFile() takes an argument called URL, when the actual meaning of 
the value is more subtle: URL/filename unless the value is - in which 
case it means stdin. Again, this requires every caller to check for "-" 
and substitute "./-".

To be honest the special treatment for "-" seems more like a hack to 
simplify xmllint than a sensible API choice for a generic XML library. I 
understand that now is probably too late to change this kind of stuff, 
as libxml2 was frozen in stone years ago. But perhaps it's not too late 
to document it. How about changing:

/**
  * xmlParseFile:
  * @filename:  the filename

to this:

  * @filename:  the filename, or "-" to parse from standard input

similarly for xmlReadFile:

  * @filename:  a file or URL, or "-" to parse from standard input

That would at least place a warning sign in the documentation for 
application developers to be aware of what the argument really means.

Best regards,

Michael

-- 
Print XML with Prince!
http://www.princexml.com
_______________________________________________
xml mailing list, project page  http://xmlsoft.org/
[email protected]
http://mail.gnome.org/mailman/listinfo/xml

Reply via email to