#include #include #include #ifdef LC_UNSC #define RUN_IDENTIFIER run_identifier_ #elif LC_NOUNSC #define RUN_IDENTIFIER run_identifier #else #error "Must define one of (LC_UNSC,LC_NOUNSC) for proper FORTRAN name mangling" #endif void appendVarToString(const char *var, char * string); /********************************************************************//** * Get run information (user id, machine name, etc) and set it to the * string "labelout" * * FIXME: This method is vulnerable to a buffer overflow attack! * * @param labelout - string containing run-specific information ************************************************************************/ void RUN_IDENTIFIER(char *labelout){ #ifdef DEBUG_MODE_ON printf("DEBUG: in date-ident.c::run_identifier(char *labelout)\n"); #endif time_t tp, t0; strcpy(labelout,"RUN ID"); appendVarToString("USER", labelout); appendVarToString("HOST", labelout); appendVarToString("PWD", labelout); strcat(labelout,"\nTIME:\t"); tp = time(&t0); strcat(labelout,ctime(&tp)); strcat(labelout,"\n##\n\0"); #ifdef DEBUG_MODE_ON printf("labelout:\n-------\n%s\n-------\n",labelout); #endif } /********************************************************************//** * \author Pete Schmitt (schmitt at ucar.edu) * \since October 2008 * * Append \param{string} with the contents of environment variable $(var) * * \param[in] var - Environment variable to get * \param[in/out] string - String to append the contents of $(var) to ************************************************************************/ void appendVarToString(const char *var, char * string){ #ifdef DEBUG_MODE_ON printf("DEBUG: in date-ident.c::appendVarToString(const char *var, char * string)\n"); #endif char *var_value; sprintf(string, "%s\n%s:\t", string, var); var_value = getenv(var); if (var_value == NULL){ var_value = malloc(sizeof(char) * 256); sprintf(var_value, "Warning: Could not read $(%s). Make sure that environment variable is set to store as metadata in model output.", var); fprintf(stderr, "*** %s", var_value); strcat(string, var_value); free(var_value); } else{ strcat(string, var_value); } }