config.c fixes
- From
Kristian Høgsberg <krh@redhat.com>
- Date
- Dec 14, 2007, 19:28 UTC
- Message-ID
- <20071214192852.GA24187@bitplanet.net>
Hi,
[ This should have gone out as a cover letter for the patch series but some how I didn't manage to make that work ]
While strace'ing builtin-clone I saw this horror:
... write(3, "remote", 6) = 6 write(3, " = ", 3) = 3 write(3, "o", 1) = 1 write(3, "r", 1) = 1 write(3, "i", 1) = 1 write(3, "g", 1) = 1 write(3, "i", 1) = 1 write(3, "n", 1) = 1 write(3, "\n", 1) = 1 munmap(0xb7f72000, 102) = 0 close(3) = 0 close(3) = -1 EBADF (Bad file descriptor) ...
That's just terrible. And hey, it turns out the code is terrible too. I think the best solution is to just parse up the entire config file up front and keep it in a data structure, make the changes and then write it all out at the end. That makes it cheap to make a series of changes too:
config = open_config(file); set_key(config, key1, value1); set_key(config, key2, value2); set_key(config, key3, value3); commit_config(config);
Or something. Anyway, for 1.5.4 I wrote the following two patches that fixes the 1-bytes writes and the double close.
config.c | 113 +++++++++++++++++++++++-------------------------------------- 1 files changed, 43 insertions(+), 70 deletions(-)
cheers, Kristian