[splint-discuss] Splint usage help
Nido
nido at foxserver.be
Sat Apr 18 10:09:23 PDT 2009
2009/4/18 Marcus Martin <nymaen at yahoo.com>:
>
> <Please ignore the first message, this one is in plain text.>
>
>
> I
> am a new splint user and am having some difficutly with the
> annotations. I read the documentation and looked at the examples and
> still have some trouble. Can someone please help me get started?
>
> I have the source code line:
> const char *subCmds[] = { "-file", "-stream", NULL };
>
> This
> array needs to have the last element be NULL so when used a parameter
> in a method, the method knows when to stop reading the array. Splint
> produces the following errors.
>
> test.c:94:68: Index of possibly null pointer subCmds: subCmds
> A possibly null pointer is dereferenced. Value is either the result of a
> function which may return null (in which case, code should check it is not
> null), or a global, parameter or structure field declared with the null
> qualifier. (Use -nullderef to inhibit warning)
> test.c:94:27: Storage subCmds may become null
> test.c:94:61: Local subCmds[2] initialized to null value: subCmds[2] = NULL
> A reference with no null annotation is assigned or initialized to NULL. Use
> /*@null@*/ to declare the reference as a possibly null pointer. (Use
> -nullassign to inhibit warning)
>
> After reading the warnings I tried changing the source line in the following ways, none of which worked for me.
>
> /*@-nullderef@*/ const char *subCmds[] = { "-file", "-stream", NULL }; /*@=nullderef@*/
> /*@-nullassign@*/ const char *subCmds[] = { "-file", "-stream", NULL }; /*@=nullassign@*/
> const char *subCmds[] = { "-file", "-stream", /*@null@*/ NULL };
I'm sorry; I can't really help you out here as I seem to understand
the problem as well as you do. You might want to try to ignore this
particular warning using -nullassign until someone can give you a
better answer.
This may help you: http://www.splint.org/manual/html/sec14.html
> The
> second problem I encountered is that splint wants me to annotate the
> header files of exeternal packages I call to indicate out parameters
> and parameters that can be NULL. Since I don't own that source code,I
> really don't want to change it. How do I indicate to splint where I
> invoked the method that my parameters are correct and the method is
> used correctly.
you can create .lcl files from .h files using the -dump command. You
can use these dumps later using -load. I am using this functionality
now to create an improved posix library that is compatible with the
newer version of the standard. I have posted this a few days ago on
this list so I don't think its a good idea to re-post it because it
hasn't chagned since than. Should you be interrested I'd be happy to
send you a copy should you contact me about that.
> The third issue is that I am creating a shared
> library that implements the interface. At no place in my code base
> will I call these public interface methods. How can I tell splint that
> these methods are exported and not called directly, but that is okay.
/*@unused@*/ might help.
> Can
> someone tell me what I am doing wrong? Once I understand these three
> problems, I should be able to fix the rest of my module.
>
> Marcus
You may want to read through the splint manual a bit; I linked to
chapter 14 earlier. Good luck with your module
kind regards,
Nido Media
More information about the splint-discuss
mailing list