Actual source code: fdate.c


  2: #include <petscsys.h>
  3: #if defined(PETSC_HAVE_SYS_TIME_H)
  4:   #include <sys/time.h>
  5: #endif
  6: #include <time.h>
  7: #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
  8: PETSC_EXTERN int gettimeofday(struct timeval *, struct timezone *);
  9: #endif

 11: /*@C
 12:     PetscGetDate - Gets the current date.

 14:    Not Collective

 16:   Input Parameter:
 17: .  len - length of string to hold date

 19:   Output Parameter:
 20: .  date - the date

 22:   Level: beginner

 24:   Note:
 25:   This function makes a system call and thus SHOULD NOT be called from an error handler.

 27:   Developer Note:
 28:   This function is called once during `PetscInitialize()`.
 29:   It stashes the timestamp, and uses it when needed. This is so that
 30:   error handlers may report the date without generating possible
 31:   additional system errors during the call to get the date.

 33: @*/
 34: PetscErrorCode PetscGetDate(char date[], size_t len)
 35: {
 36:   char *str = NULL;
 37: #if defined(PETSC_HAVE_TIME)
 38:   time_t aclock;
 39: #else
 40:   struct timeval tp;
 41: #endif

 43:   PetscFunctionBegin;
 44: #if defined(PETSC_HAVE_TIME)
 45:   time(&aclock);
 46:   PetscCall(PetscStrncpy(date, asctime(localtime(&aclock)), len));
 47: #else
 48:   gettimeofday(&tp, (struct timezone *)0);
 49:   PetscCall(PetscStrncpy(date, asctime(localtime((time_t *)&tp.tv_sec)), len));
 50: #endif
 51:   /* now strip out the new-line chars at the end of the string */
 52:   PetscCall(PetscStrstr(date, "\n", &str));
 53:   if (str) str[0] = 0;
 54:   PetscFunctionReturn(PETSC_SUCCESS);
 55: }