This is correctclock.c in view mode; [Download] [Up]
/* Bruno Bienfait 1993 */ #include <sys/time.h> #include <stdio.h> #include<math.h> void usage( char *progname); void main( int argc, char *argv[]) { struct timeval tp; struct timezone tzp; double seconds = 0 ; long today = 0 ; long last_day = 0 ; int update ; FILE *last_day_file ; char file_name[] ="/usr/adm/correctclock.date" ; gettimeofday( &tp, &tzp); today = tp.tv_sec / (3600 * 24) ; if( argc < 2 ) { printf( "%d\n", today ); exit(0) ; } if( sscanf(argv[1], "%lf",&seconds ) != 1 ) usage(argv[0]); if( seconds == 0 ) exit(0) ; if( (last_day_file = fopen(file_name, "r")) != (FILE * )NULL) { if( fscanf(last_day_file, "%d",&last_day ) != 1 || last_day <= 0) { fprintf(stderr, "%s is unable to read last day in %s\n", argv[0], file_name); fclose(last_day_file); exit(1) ; } fclose( last_day_file ) ; if( ( today - last_day ) <= 0) /* already adjusted today */ update = 0 ; else update = 1 ; } else update = 0 ; if( (last_day_file = fopen(file_name, "w")) == NULL) { fprintf(stderr, "%s is unable to write last day in %s\n", argv[0], file_name); exit(1) ; } if( fprintf( last_day_file, "%d\n", today ) < 0 ) { fprintf(stderr, "%s is unable to write last day in %s\n", argv[0], file_name); fclose( last_day_file ) ; exit(1) ; } fclose( last_day_file ) ; /*printf( "%d %ld %ld\n", ret, tp.tv_sec, tp.tv_usec); */ if( update ) { seconds *= ( today - last_day ) ; gettimeofday( &tp, &tzp); tp.tv_sec += (int)floor(seconds) ; tp.tv_usec += (int)((seconds - floor(seconds)) * 1000000) ; if( settimeofday(&tp, &tzp) < 0) { fprintf(stderr, " must be root to correct clock"); exit(1); } } } void usage( char *progname) { fprintf(stderr, "usage : %s seconds\n seconds is an integer number for incrementing the clock\n\tWithout arg, I answer the number of days since midnight (0 hour), January 1, 1970\n", progname); exit(0); }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.