xref: /petsc/src/sys/time/fdate.c (revision 09573ac72a50d3e7ecd55a2b7f0ef28450cd0a8b)
1e5c89e4eSSatish Balay #define PETSC_DLL
2e5c89e4eSSatish Balay 
3d382aafbSBarry Smith #include "petscsys.h"
4e5c89e4eSSatish Balay #if defined(PETSC_HAVE_SYS_TIME_H)
5e5c89e4eSSatish Balay #include <sys/types.h>
6e5c89e4eSSatish Balay #include <sys/time.h>
7e5c89e4eSSatish Balay #endif
8e5c89e4eSSatish Balay #include <time.h>
9e5c89e4eSSatish Balay #if defined(PETSC_NEEDS_GETTIMEOFDAY_PROTO)
10e5c89e4eSSatish Balay EXTERN_C_BEGIN
11*09573ac7SBarry Smith extern int gettimeofday(struct timeval *,struct timezone *);
12e5c89e4eSSatish Balay EXTERN_C_END
13e5c89e4eSSatish Balay #endif
14e5c89e4eSSatish Balay 
15e5c89e4eSSatish Balay /*
16e5c89e4eSSatish Balay   This function is called once during the initialize stage.
17e5c89e4eSSatish Balay   It stashes the timestamp, and uses it when needed. This is so that
18e5c89e4eSSatish Balay   error handlers may report the date without generating possible
19e5c89e4eSSatish Balay   additional system errors during the call to get the date.
20e5c89e4eSSatish Balay 
21e5c89e4eSSatish Balay */
22e5c89e4eSSatish Balay #undef __FUNCT__
23e5c89e4eSSatish Balay #define __FUNCT__ "PetscGetDate"
24e5c89e4eSSatish Balay /*@C
25e5c89e4eSSatish Balay     PetscGetDate - Gets the current date.
26e5c89e4eSSatish Balay 
27e5c89e4eSSatish Balay    Not collective
28e5c89e4eSSatish Balay 
29e5c89e4eSSatish Balay   Input Parameter:
30e5c89e4eSSatish Balay .  len - length of string to hold date
31e5c89e4eSSatish Balay 
32e5c89e4eSSatish Balay   Output Parameter:
33e5c89e4eSSatish Balay .  date - the date
34e5c89e4eSSatish Balay 
35e5c89e4eSSatish Balay   Level: beginner
36e5c89e4eSSatish Balay 
37e5c89e4eSSatish Balay     This function DOES make a system call and thus SHOULD NOT be called
38e5c89e4eSSatish Balay     from an error handler.
39e5c89e4eSSatish Balay 
40e5c89e4eSSatish Balay @*/
418738c821SJed Brown PetscErrorCode PETSCSYS_DLLEXPORT PetscGetDate(char date[],size_t len)
42e5c89e4eSSatish Balay {
43e5c89e4eSSatish Balay   char           *str=PETSC_NULL;
44e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
45e5c89e4eSSatish Balay   time_t         aclock;
46e5c89e4eSSatish Balay #else
47e5c89e4eSSatish Balay   struct timeval tp;
48e5c89e4eSSatish Balay #endif
49e5c89e4eSSatish Balay   PetscErrorCode ierr;
50e5c89e4eSSatish Balay 
51e5c89e4eSSatish Balay   PetscFunctionBegin;
52e5c89e4eSSatish Balay #if defined(PETSC_HAVE_TIME)
53e5c89e4eSSatish Balay   time(&aclock);
54e5c89e4eSSatish Balay   ierr = PetscStrncpy(date,asctime(localtime(&aclock)),len);CHKERRQ(ierr);
55e5c89e4eSSatish Balay #else
56e5c89e4eSSatish Balay   gettimeofday(&tp,(struct timezone *)0);
57e5c89e4eSSatish Balay   ierr = PetscStrncpy(date,asctime(localtime((time_t*)&tp.tv_sec)),len);CHKERRQ(ierr);
58e5c89e4eSSatish Balay #endif
59e5c89e4eSSatish Balay   /* now strip out the new-line chars at the end of the string */
60e5c89e4eSSatish Balay   ierr = PetscStrstr(date,"\n",&str);CHKERRQ(ierr);
61e5c89e4eSSatish Balay   if (str) str[0] = 0;
62e5c89e4eSSatish Balay   PetscFunctionReturn(0);
63e5c89e4eSSatish Balay }
64e5c89e4eSSatish Balay 
65