|
|
/* /////////////////////////////////////////////////////////////////////////
* File: examples/c/util/example.c.util.gethostname/example.c.util.gethostname.c * * Purpose: Implementation file for the example.c.util.gethostname project. * * Created: 25th August 2008 * Updated: 27th December 2010 * * Status: Wizard-generated * * License: (Licensed under the Synesis Software Open License) * * Copyright (c) 2008-2010, Synesis Software Pty Ltd. * All rights reserved. * * www: http://www.synesis.com.au/software
* * ////////////////////////////////////////////////////////////////////// */
/* Pantheios Header Files */ #include <pantheios/pantheios.h>
#include <pantheios/util/system/hostname.h>
#include <pantheios/internal/safestr.h>
/* STLSoft Header Files */ #include <stlsoft/stlsoft.h>
#include <platformstl/platformstl.h>
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
# include <winstl/error/error_functions.h>
#endif /* OS */
/* Standard C Header Files */ #include <errno.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#if defined(_MSC_VER) && \
defined(_DEBUG) # include <crtdbg.h>
#endif /* _MSC_VER) && _DEBUG */
/* ////////////////////////////////////////////////////////////////////// */
int main(int argc, char** argv) { PAN_CHAR_T name[101]; size_t cch = pantheios_getHostName(&name[0], STLSOFT_NUM_ELEMENTS(name));
/* There are three possible return values:
* * 0 - indicates that no host name is available, or there was an error * when retrieving it * 101 - the buffer is not long enough * [1, 101) - the name was successfully retrieved * * The only complication when processing this is that the last error * information is held in an operating-system-specific form. On Windows, * it is available via GetLastError(); otherwise use errno */
if(0 == cch) { /* not available, or a problem retrieving it */
#if defined(PLATFORMSTL_OS_IS_WINDOWS)
DWORD error = GetLastError(); char* message;
if(0 == winstl_C_format_message_alloc_a(error, NULL, &message)) { /* Could not retrieve a string-form of the error, so print
* out the error code (in case that might help) */
fprintf(stderr, "could not elicit hostname: %lu\n", error); } else { /* Print out the error string, and release it.
* * Note: in C++, these function names are a lot cleaner */
fprintf(stderr, "could not elicit hostname: %s\n", message);
winstl_C_format_message_free_buff_a(message); }
#else /* ? OS */
# ifdef PANTHEIOS_USING_SAFE_STR_FUNCTIONS
char err[1001]; int r = strerror_s(err, STLSOFT_NUM_ELEMENTS(err) - 1, errno);
if(0 != r) { err[0] = '\0'; } else { err[STLSOFT_NUM_ELEMENTS(err) - 1] = '\0'; } fprintf(stderr, "could not elicit hostname: %s\n", err);
# else /* ? PANTHEIOS_USING_SAFE_STR_FUNCTIONS */
fprintf(stderr, "could not elicit hostname: %s\n", strerror(errno)); # endif /* PANTHEIOS_USING_SAFE_STR_FUNCTIONS */
#endif /* OS */
} else if(STLSOFT_NUM_ELEMENTS(name) == cch) { /* buffer too short */
fprintf(stderr, "could not elicit hostname: name longer than given buffer\n"); } else { /* Success. Print it out! */
fprintf(stdout, "host name: %s\n", name);
return EXIT_SUCCESS; }
STLSOFT_SUPPRESS_UNUSED(argc); STLSOFT_SUPPRESS_UNUSED(argv);
return EXIT_FAILURE; }
/* ///////////////////////////// end of file //////////////////////////// */
|