On Thu, 22 Feb 2001, Tony Lambiris wrote:
> when I set a pointer to the structure, and say, get the OS version:
> 
> struct utsname *host_uname;

  Are you allocating a memory buffer and pointing host_uname to it before
invoking uname:

        struct utsname buf;
        uname(&buf);

> os_version = malloc(strlen(host_uname->release));

  You do not declare os_version in the code sample you give.  I will assume
you mean:

        char * os_version;

  If you intend to copy the string pointed to by host_uname->release, then you
need to malloc one extra byte for the terminating NUL byte:

        os_version = malloc( strlen(buf->release) + 1 );

> os_version = (host_uname->release);

  Be aware that this does *NOT* copy the string pointed to by
host_uname->release to the buffer pointed to by os_version.  Instead, it
copies the *pointer* contained in host_uname to os_version (which, hopefully,
is also a pointer).  This is fine, but it means that if you destroy
host_uname, os_version will no longer be valid.

  If you intended to copy the string, you need to use:

        strcpy (os_version, host_uname->release);

But you should really use:

        strncpy (os_version, host_uname->release, SIZE_OF_OS_VERSION_BUFFER);

That will prevent buffer overflow bugs.

> or perhaps I just suck at coding??

  I would not go that far, but it is apparent you do not fully understand
string handling in C.  That is pretty common; C string handling is notoriously
hard to master for new users, especially those used to other languages with a
built-in "string" type.  I recommend _The C Programming Language_, Second
Edition, by Kernighan and Ritchie.  Actually, I recommend two copies:  One to
use, and one to place in a shrine.  ;-)

-- 
Ben Scott <[EMAIL PROTECTED]>
Net Technologies, Inc. <http://www.ntisys.com>
Voice: (800)905-3049 x18   Fax: (978)499-7839


**********************************************************
To unsubscribe from this list, send mail to
[EMAIL PROTECTED] with the following text in the
*body* (*not* the subject line) of the letter:
unsubscribe gnhlug
**********************************************************

Reply via email to