From: Aleksandar Milivojevic <amilivojevic@pbl.ca>
To: Linux Kernel Mailing List <linux-kernel@vger.kernel.org>
Subject: argv null terminated in main()?
Date: Thu, 16 Sep 2004 16:26:14 -0500 [thread overview]
Message-ID: <414A04F6.8040106@pbl.ca> (raw)
I was looking for info on this question on web and in documentation, but
couldn't find it documented anywhere.
The question is, after call to execve() system call, and after new image
is loaded, is argv (as passed to main() function of new program) NULL
terminated or not in Linux?
So far I found article from Ritchie saying that argv[argc] was -1 up to
Unix Sixth Edition (1975), and than it was changed to NULL starting from
Seventh Edition (in 1979) and than later same behaviour was carried over
to 32V and BSD. Looking at the man page for exec(2) on Solaris, which
is System V derivate, the documentation still states the same
(argv[argc] is guaranteed to be NULL).
But how about Linux kernel? What (if anything) is copied or filled into
argv[argc] by execve()?
Documentation for execve() on Linux doesn't state it explicitly, but one
could find himself lured into beleiving that argv[argc] should be NULL.
It says "The argument vector and environment can be accessed by the
called program's main function, when it is defined as int main(int
argc, char *argv[], char *envp[])". Because original vector as passed
to execve was NULL terminated.
I've looked in the kernel source code (just a glance), and by looking at
copy_strings function in exec.c, it seems as argv[argc] might be
undefined (it seems that loop copies only first argc - 1 elements of
argv). But I might be wrong.
--
Aleksandar Milivojevic <amilivojevic@pbl.ca> Pollard Banknote Limited
Systems Administrator 1499 Buffalo Place
Tel: (204) 474-2323 ext 276 Winnipeg, MB R3T 1L7
next reply other threads:[~2004-09-16 21:24 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-09-16 21:26 Aleksandar Milivojevic [this message]
2004-09-16 21:01 ` argv null terminated in main()? Alan Cox
2004-09-17 13:54 ` Aleksandar Milivojevic
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=414A04F6.8040106@pbl.ca \
--to=amilivojevic@pbl.ca \
--cc=linux-kernel@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox