apr-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From br...@xbc.nu
Subject Re: pipe hanging on win32
Date Tue, 01 Oct 2002 10:38:40 GMT
Quoting Kevin Pilch-Bisson <kevin@pilch-bisson.net>:

> I've attached a short example of what I am trying to do on in svn for
> the  benefit of any apr folks who may be able to look at this.
> 
> Basically I'm calling the run_pre_revprop_change_hook(), and it's
> hanging in apr_file_flush(...) specifically in FlushFileBuffers it seems.
> 
> The hook script (shown below), is hanging in getc().
> 
> Any ideas why this isn't working?
> 
> Note that log.txt never includes anything from stdin.
> 
> int main(int argc, char **argv)
> {
> 	std::ofstream file("log.txt");
> 	file << "Repos is: " << argv[1] << std::endl;
> 	file << "Rev is: " << argv[2] << std::endl;
> 	file << "Propname is: " << argv[3] << std::endl;
> 	while (!std::cin.eof()) {
> 		std::string s;
> 		std::cin >> s;

IIRC this is a fairly well-known bug in MS's implementation of the iostream
library. It hangs in getc() because it doesn't check for end-of-file correctly.

> 		file << s << std::endl;

BTW, why are you breaking lines in the prop value like this? "std::cin >> s"
will _not_ read a whole line of input.

> 	}
> 	file << std::ends;

Hm. Stuffing nulls into text files is not nice, either.

> 	file.close();
> 	return 0;
> }


Anyway. Try rewriting that hook of yours in C, with appropriate eof checking. It
has a good chance of working then. Or you might try to use "std::getline(cin, s,
'\n')", maybe that doesn't tickle the same bug -- not to mention that lines will
be broken correctly.

    Brane


Mime
View raw message