Hey,
Tobias Mueller wrote:
Kevin P. Fleming wrote:
Tobias Mueller wrote:
I think I want to make gcc
* know that the wrapper is not responsible for the format string and
thus the call to strftime is allowed
* pass the responsibility up to the callers and thus check whether they
call the wrapper with "good" strings.
And I don't know how to do that. Do you have any advices?
<snip>
size_t my_strftime(char *s, size_t max, const char *fmt,
const struct tm *tm)
Add "__attribute__((format (strftime, 3, 0)))" to your function
declaration.
Well, I tried that:
size_t my_strftime(char *s, size_t max, const char *fmt,
const struct tm *tm)
__attribute__((format (strftime, 3, 0)))
{...}
and it fails:
muelli@bigbox /tmp $ gcc -Wformat -Wformat-nonliteral
-Werror=format-nonliteral -Wfatal-errors -o mystrftime{,.c}
mystrftime.c:9: error: expected ‘,’ or ‘;’ before ‘{’ token
compilation terminated due to -Wfatal-errors.
muelli@bigbox /tmp $
Now I tried
__attribute__(( format (strftime, 3, 0) ))
size_t my_strftime(char *s, size_t max, const char *fmt,
const struct tm *tm)
{...}
and at least it doesn't throw a syntax error. But it still fails to compile:
muelli@bigbox /tmp $ gcc -Wformat -Wformat-nonliteral -Werror=format-nonliteral -o mystrftime{,.c}
mystrftime.c: In function ‘my_strftime’:
mystrftime.c:14: error: format not a string literal, format string not checked
muelli@bigbox /tmp $
What would be the next step in solving this issue? Maybe filing a bug
would be appropriate?
Cheers,
Tobi