Mercurial > hg > octave-kai > gnulib-hg
annotate lib/settime.c @ 6075:ea0e673b670d
Recent regex patches.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Sat, 20 Aug 2005 01:03:31 +0000 |
parents | a48fb0e98c8c |
children | fd0ccce602e4 |
rev | line source |
---|---|
3768 | 1 /* settime -- set the system clock |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
2 Copyright (C) 2002, 2004 Free Software Foundation, Inc. |
3768 | 3 |
4 This program is free software; you can redistribute it and/or modify | |
5 it under the terms of the GNU General Public License as published by | |
6 the Free Software Foundation; either version 2, or (at your option) | |
7 any later version. | |
8 | |
9 This program is distributed in the hope that it will be useful, | |
10 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
12 GNU General Public License for more details. | |
13 | |
14 You should have received a copy of the GNU General Public License | |
15 along with this program; if not, write to the Free Software Foundation, | |
5848
a48fb0e98c8c
*** empty log message ***
Paul Eggert <eggert@cs.ucla.edu>
parents:
5185
diff
changeset
|
16 Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ |
3768 | 17 |
18 /* Written by Paul Eggert. */ | |
19 | |
20 #ifdef HAVE_CONFIG_H | |
21 # include <config.h> | |
22 #endif | |
23 | |
24 #include "timespec.h" | |
25 | |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
26 #if HAVE_UNISTD_H |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
27 # include <unistd.h> |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
28 #endif |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
29 |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
30 #include <errno.h> |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
31 |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
32 /* Some systems don't have ENOSYS. */ |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
33 #ifndef ENOSYS |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
34 # ifdef ENOTSUP |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
35 # define ENOSYS ENOTSUP |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
36 # else |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
37 /* Some systems don't have ENOTSUP either. */ |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
38 # define ENOSYS EINVAL |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
39 # endif |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
40 #endif |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
41 |
3768 | 42 /* Set the system time. */ |
43 | |
44 int | |
45 settime (struct timespec const *ts) | |
46 { | |
47 #if defined CLOCK_REALTIME && HAVE_CLOCK_SETTIME | |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
48 { |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
49 int r = clock_settime (CLOCK_REALTIME, ts); |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
50 if (r == 0 || errno == EPERM) |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
51 return r; |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
52 } |
3768 | 53 #endif |
54 | |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
55 #if HAVE_SETTIMEOFDAY |
3768 | 56 { |
57 struct timeval tv; | |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
58 int r; |
3768 | 59 |
60 tv.tv_sec = ts->tv_sec; | |
61 tv.tv_usec = ts->tv_nsec / 1000; | |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
62 r = settimeofday (&tv, 0); |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
63 if (r == 0 || errno == EPERM) |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
64 return r; |
3768 | 65 } |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
66 #endif |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
67 |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
68 #if HAVE_STIME |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
69 return stime (&ts->tv_sec); |
5185
83074d3a5d31
(settime): Recode to avoid warning with Sun Forte C 6U2.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5059
diff
changeset
|
70 #else |
5059
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
71 errno = ENOSYS; |
eb3efcec6ae2
Don't assume that gettimeofday and settimeofday exist or work.
Paul Eggert <eggert@cs.ucla.edu>
parents:
3768
diff
changeset
|
72 return -1; |
5185
83074d3a5d31
(settime): Recode to avoid warning with Sun Forte C 6U2.
Paul Eggert <eggert@cs.ucla.edu>
parents:
5059
diff
changeset
|
73 #endif |
3768 | 74 } |