2 * Copyright (C) 2005 Casper S. Hornstrup
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
14 * You should have received a copy of the GNU General Public License along
15 * with this program; if not, write to the Free Software Foundation, Inc.,
16 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
26 FileSupportCode::WriteIfChanged ( char* outbuf
,
27 const string
& filename
,
35 out
= fopen ( filename
.c_str (), "rb" );
38 out
= fopen ( filename
.c_str (), "wb" );
43 throw AccessDeniedException ( filename
);
45 fputs ( outbuf
, out
);
50 fseek ( out
, 0, SEEK_END
);
52 cmpbuf
= (char*) malloc ( end
);
56 throw OutOfMemoryException ();
59 fseek ( out
, 0, SEEK_SET
);
60 stat
= fread ( cmpbuf
, 1, end
, out
);
65 throw AccessDeniedException ( filename
);
67 if ( end
== strlen ( outbuf
) && memcmp ( cmpbuf
, outbuf
, end
) == 0 )
76 out
= fopen ( filename
.c_str (), "wb" );
79 throw AccessDeniedException ( filename
);
82 stat
= fwrite ( outbuf
, 1, strlen ( outbuf
), out
);
83 if ( strlen ( outbuf
) != stat
)
86 throw AccessDeniedException ( filename
);