Zitat von "Goswin von Brederlow" <goswin-...@web.de>:
"Hendrik Sattler" <p...@hendrik-sattler.de> writes:
Zitat von "Goswin von Brederlow" <goswin-...@web.de>:
Adam Borowski <kilob...@angband.pl> writes:
On Wed, Jan 26, 2011 at 12:03:52PM +0100, Goswin von Brederlow wrote:
Shachar Shemesh <shac...@debian.org> writes:
> I've promised to get a library out there, and here it is. The base URL
> is https://github.com/Shachar/safewrite, and the actual code is at
> https://github.com/Shachar/safewrite/blob/master/safewrite.c
Some things I noticed:
That way one could use
[..]
typedef struct {
int fd;
char buffer[PATH_MAX];
} safe_t;
Except, you can't rely on PATH_MAX on any modern system. It's defined in
Linux headers to an arbitrary value to make old code compile, but for
example Hurd folks decided to not define it altogether to make buggy code
fail during compilation rather than on runtime.
Right, so
typedef struct {
int fd;
char buffer[0];
} safe_t;
and allocating the struct as big as needed.
Maybe don't recommend invalid C? Bad habits don't have to live on forever...
HS
Would you use
typedef struct {
int fd;
char buffer[];
} safe_t;
or what do you mean by invalid C?
"char buffer[0];" is veeery gcc-specific as the storage size of buffer
is 0. According to the C99 standard:
"6.7.5.2 Array declarators
Constraints
1 In addition to optional type qualifiers and the keyword static, the [ and
] may delimit an expression or *. If they delimit an expression (which
specifies the size of an array), the expression shall have an integer type.
If the expression is a constant expression, it shall have a value greater
than zero."
Either make this "char buffer[1];" and live with the fact that e.g.
cppcheck will yell at you (better not), or use "safe_t x= ...; char
*buffer = x + 1;" with or without explicit reference in safe_t (if you
want to allocate in one block) or simply allocate it seperately.
BTW: KDE4 is a very good example for failure with modern filesystems.
I regularly loose configuration files when suspend-to-ram fails even
if the configuration of the running programs were not changed. Yay :-(
And this is with XFS, not Ext4! Filed a bug a looooooong time ago in
KDE BTS. Reaction: none!
HS
--
To UNSUBSCRIBE, email to debian-devel-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org
Archive: http://lists.debian.org/20110126173619.185277zxg7ixv...@v1539.ncsrv.de