execvp is defined thus:
int execvp(const char *file, char *const argv[]);
Which precludes code such as this from being used:
const char* argv[] = {"/bin/my", "command", "here", NULL};
execvp(argv[0], argv);
Was this an accidental omission? Is it safe to const_cast around this? Or do some execvp implementations actually scribble on that memory?
I came across this same situation. Because execvp() has a
char *const
as the second parameter, that means it accepts a constant pointer to a char. Therefore, if you pass it a pointer char it will be able to cast the pointer char to a constant pointer to a char. So, instead of declaring ittry
and it will accept
argv[]
without issue.The POSIX spec says (http://pubs.opengroup.org/onlinepubs/009604499/functions/exec.html):
I think the missing (or misplaced)const
is simply an historical oddity.