mirror of
git://sourceware.org/git/glibc.git
synced 2025-03-06 20:58:33 +01:00
Update.
* sysdeps/unix/sysv/linux/msgctl.c: Use INLINE_SYSCALL. * sysdeps/unix/sysv/linux/msgget.c: Likewise. * sysdeps/unix/sysv/linux/msgrcv.c: Likewise. * sysdeps/unix/sysv/linux/msgsnd.c: Likewise. * sysdeps/unix/sysv/linux/semctl.c: Likewise. * sysdeps/unix/sysv/linux/semget.c: Likewise. * sysdeps/unix/sysv/linux/semop.c: Likewise. * sysdeps/unix/sysv/linux/shmat.c: Likewise. * sysdeps/unix/sysv/linux/shmctl.c: Likewise. * sysdeps/unix/sysv/linux/shmdt.c: Likewise. * sysdeps/unix/sysv/linux/shmget.c: Likewise. * sysdeps/unix/sysv/linux/syscalls.list: Remove ipc syscall here. * sysdeps/unix/sysv/linux/powerpc/syscalls.list: Add ipc syscall here. * time/strftime.c: Remove 'f' format. * time/strptime.c (get_number): Ignore trailing whitespace. (strptime_internal): Handle 'F' and 'k' formats.
This commit is contained in:
parent
5a7cb1a2c7
commit
e9dcb08080
19 changed files with 645 additions and 34 deletions
19
ChangeLog
19
ChangeLog
|
@ -1,5 +1,24 @@
|
||||||
1998-12-15 Ulrich Drepper <drepper@cygnus.com>
|
1998-12-15 Ulrich Drepper <drepper@cygnus.com>
|
||||||
|
|
||||||
|
* sysdeps/unix/sysv/linux/msgctl.c: Use INLINE_SYSCALL.
|
||||||
|
* sysdeps/unix/sysv/linux/msgget.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/msgrcv.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/msgsnd.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/semctl.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/semget.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/semop.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/shmat.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/shmctl.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/shmdt.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/shmget.c: Likewise.
|
||||||
|
* sysdeps/unix/sysv/linux/syscalls.list: Remove ipc syscall here.
|
||||||
|
* sysdeps/unix/sysv/linux/powerpc/syscalls.list: Add ipc syscall here.
|
||||||
|
|
||||||
|
* time/strftime.c: Remove 'f' format.
|
||||||
|
|
||||||
|
* time/strptime.c (get_number): Ignore trailing whitespace.
|
||||||
|
(strptime_internal): Handle 'F' and 'k' formats.
|
||||||
|
|
||||||
* sysdeps/posix/tempname.c (__path_search): Add second part of the
|
* sysdeps/posix/tempname.c (__path_search): Add second part of the
|
||||||
patch by Andreas Jaeger.
|
patch by Andreas Jaeger.
|
||||||
|
|
||||||
|
|
553
manual/time.texi
553
manual/time.texi
|
@ -82,7 +82,7 @@ elapsed = ((double) (end - start)) / CLOCKS_PER_SEC;
|
||||||
|
|
||||||
Different computers and operating systems vary wildly in how they keep
|
Different computers and operating systems vary wildly in how they keep
|
||||||
track of processor time. It's common for the internal processor clock
|
track of processor time. It's common for the internal processor clock
|
||||||
to have a resolution somewhere between hundredths and millionths of a
|
to have a resolution somewhere between hundredth and millionth of a
|
||||||
second.
|
second.
|
||||||
|
|
||||||
In the GNU system, @code{clock_t} is equivalent to @code{long int} and
|
In the GNU system, @code{clock_t} is equivalent to @code{long int} and
|
||||||
|
@ -224,6 +224,8 @@ date and time values.
|
||||||
* High-Resolution Calendar:: A time representation with greater precision.
|
* High-Resolution Calendar:: A time representation with greater precision.
|
||||||
* Broken-down Time:: Facilities for manipulating local time.
|
* Broken-down Time:: Facilities for manipulating local time.
|
||||||
* Formatting Date and Time:: Converting times to strings.
|
* Formatting Date and Time:: Converting times to strings.
|
||||||
|
* Parsing Date and Time:: Convert textual time and date information back
|
||||||
|
into broken-down time values.
|
||||||
* TZ Variable:: How users specify the time zone.
|
* TZ Variable:: How users specify the time zone.
|
||||||
* Time Zone Functions:: Functions to examine or specify the time zone.
|
* Time Zone Functions:: Functions to examine or specify the time zone.
|
||||||
* Time Functions Example:: An example program showing use of some of
|
* Time Functions Example:: An example program showing use of some of
|
||||||
|
@ -689,7 +691,6 @@ return @code{NULL}.
|
||||||
|
|
||||||
@comment time.h
|
@comment time.h
|
||||||
@comment ISO
|
@comment ISO
|
||||||
@comment POSIX.2
|
|
||||||
@deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime})
|
@deftypefun size_t strftime (char *@var{s}, size_t @var{size}, const char *@var{template}, const struct tm *@var{brokentime})
|
||||||
This function is similar to the @code{sprintf} function (@pxref{Formatted
|
This function is similar to the @code{sprintf} function (@pxref{Formatted
|
||||||
Input}), but the conversion specifications that can appear in the format
|
Input}), but the conversion specifications that can appear in the format
|
||||||
|
@ -789,12 +790,6 @@ The day of the month like with @code{%d}, but padded with blank (range
|
||||||
|
|
||||||
This format is a POSIX.2 extension.
|
This format is a POSIX.2 extension.
|
||||||
|
|
||||||
@item %f
|
|
||||||
The day of the week as a decimal number (range @code{1} through
|
|
||||||
@code{7}), Monday being @code{1}.
|
|
||||||
|
|
||||||
This format is a @w{ISO C 9X} extension.
|
|
||||||
|
|
||||||
@item %F
|
@item %F
|
||||||
The date using the format @code{%Y-%m-%d}. This is the form specified
|
The date using the format @code{%Y-%m-%d}. This is the form specified
|
||||||
in the @w{ISO 8601} standard and is the preferred form for all uses.
|
in the @w{ISO 8601} standard and is the preferred form for all uses.
|
||||||
|
@ -890,7 +885,7 @@ Leap seconds are not counted unless leap second support is available.
|
||||||
This format is a GNU extension.
|
This format is a GNU extension.
|
||||||
|
|
||||||
@item %S
|
@item %S
|
||||||
The second as a decimal number (range @code{00} through @code{60}).
|
The seconds as a decimal number (range @code{00} through @code{60}).
|
||||||
|
|
||||||
@item %t
|
@item %t
|
||||||
A single @samp{\t} (tabulator) character.
|
A single @samp{\t} (tabulator) character.
|
||||||
|
@ -959,8 +954,8 @@ determinable.
|
||||||
|
|
||||||
This format is a GNU extension.
|
This format is a GNU extension.
|
||||||
|
|
||||||
A full @w{RFC 822} timestamp is generated by the format
|
A full @w{RFC 822} timestamp is generated by the format
|
||||||
@w{@samp{"%a, %d %b %Y %H:%M:%S %z"}} (or the equivalent
|
@w{@samp{"%a, %d %b %Y %H:%M:%S %z"}} (or the equivalent
|
||||||
@w{@samp{"%a, %d %b %Y %T %z"}}).
|
@w{@samp{"%a, %d %b %Y %T %z"}}).
|
||||||
|
|
||||||
@item %Z
|
@item %Z
|
||||||
|
@ -1008,6 +1003,542 @@ is examined before any output is produced.
|
||||||
For an example of @code{strftime}, see @ref{Time Functions Example}.
|
For an example of @code{strftime}, see @ref{Time Functions Example}.
|
||||||
@end deftypefun
|
@end deftypefun
|
||||||
|
|
||||||
|
@node Parsing Date and Time
|
||||||
|
@subsection Convert textual time and date information back
|
||||||
|
|
||||||
|
The @w{ISO C} standard does not specify any functions which can convert
|
||||||
|
the output of the @code{strftime} function back into a binary format.
|
||||||
|
This lead to variety of more or less successful implementations with
|
||||||
|
different interfaces over the years. Then the Unix standard got
|
||||||
|
extended by two functions: @code{strptime} and @code{getdate}. Both
|
||||||
|
have kind of strange interfaces but at least they are widely available.
|
||||||
|
|
||||||
|
@menu
|
||||||
|
* Low-Level Time String Parsing:: Interpret string according to given format.
|
||||||
|
* General Time String Parsing:: User-friendly function to parse data and
|
||||||
|
time strings.
|
||||||
|
@end menu
|
||||||
|
|
||||||
|
@node Low-Level Time String Parsing
|
||||||
|
@subsubsection Interpret string according to given format
|
||||||
|
|
||||||
|
The first function is a rather low-level interface. It is nevertheless
|
||||||
|
frequently used in user programs since it is better known. Its
|
||||||
|
implementation and the interface though is heavily influenced by the
|
||||||
|
@code{getdate} function which is defined and implemented in terms of
|
||||||
|
calls to @code{strptime}.
|
||||||
|
|
||||||
|
@comment time.h
|
||||||
|
@comment XPG4
|
||||||
|
@deftypefun {char *} strptime (const char *@var{s}, const char *@var{fmt}, struct tm *@var{tp})
|
||||||
|
The @code{strptime} function parses the input string @var{s} according
|
||||||
|
to the format string @var{fmt} and stores the found values in the
|
||||||
|
structure @var{tp}.
|
||||||
|
|
||||||
|
The input string can be retrieved in any way. It does not matter
|
||||||
|
whether it was generated by a @code{strftime} call or made up directly
|
||||||
|
by a program. It is also not necessary that the content is in any
|
||||||
|
human-recognizable format. I.e., it is OK if a date is written like
|
||||||
|
@code{"02:1999:9"} which is not understandable without context. As long
|
||||||
|
the format string @var{fmt} matches the format of the input string
|
||||||
|
everything goes.
|
||||||
|
|
||||||
|
The format string consists of the same components as the format string
|
||||||
|
for the @code{strftime} function. The only difference is that the flags
|
||||||
|
@code{_}, @code{-}, @code{0}, and @code{^} are not allowed.
|
||||||
|
@comment Is this really the intention? --drepper
|
||||||
|
Several of the formats which @code{strftime} handled differently do the
|
||||||
|
same work in @code{strptime} since differences like case of the output
|
||||||
|
do not matter. For symmetry reasons all formats are supported, though.
|
||||||
|
|
||||||
|
The modifiers @code{E} and @code{O} are also allowed everywhere the
|
||||||
|
@code{strftime} function allows them.
|
||||||
|
|
||||||
|
The formats are:
|
||||||
|
|
||||||
|
@table @code
|
||||||
|
@item %a
|
||||||
|
@itemx %A
|
||||||
|
The weekday name according to the current locale, in abbreviated form or
|
||||||
|
the full name.
|
||||||
|
|
||||||
|
@item %b
|
||||||
|
@itemx %B
|
||||||
|
@itemx %h
|
||||||
|
The month name according to the current locale, in abbreviated form or
|
||||||
|
the full name.
|
||||||
|
|
||||||
|
@item %c
|
||||||
|
The date and time representation for the current locale.
|
||||||
|
|
||||||
|
@item %Ec
|
||||||
|
Like @code{%c} but the locale's alternative date and time format is used.
|
||||||
|
|
||||||
|
@item %C
|
||||||
|
The century of the year.
|
||||||
|
|
||||||
|
It makes sense to use this format only if the format string also
|
||||||
|
contains the @code{%y} format.
|
||||||
|
|
||||||
|
@item %EC
|
||||||
|
The locale's representation of the period.
|
||||||
|
|
||||||
|
Unlike @code{%C} it makes sometimes sense to use this format since in
|
||||||
|
some cultures it is required to specify years relative to periods
|
||||||
|
instead of using the Gregorian years.
|
||||||
|
|
||||||
|
@item %d
|
||||||
|
@item %e
|
||||||
|
The day of the month as a decimal number (range @code{1} through @code{31}).
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@item %Od
|
||||||
|
@itemx %Oe
|
||||||
|
Same as @code{%d} but the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@item %D
|
||||||
|
Equivalent to the use of @code{%m/%d/%y} in this place.
|
||||||
|
|
||||||
|
@item %F
|
||||||
|
Equivalent to the use of @code{%Y-%m-%d} which is the @w{ISO 8601} date
|
||||||
|
format.
|
||||||
|
|
||||||
|
This is a GNU extension following an @w{ISO C 9X} extension to
|
||||||
|
@code{strftime}.
|
||||||
|
|
||||||
|
@item %g
|
||||||
|
The year corresponding to the ISO week number, but without the century
|
||||||
|
(range @code{00} through @code{99}).
|
||||||
|
|
||||||
|
@emph{Note:} This is not really implemented currently. The format is
|
||||||
|
recognized, input is consumed but no field in @var{tm} is set.
|
||||||
|
|
||||||
|
This format is a GNU extension following a GNU extension of @code{strftime}.
|
||||||
|
|
||||||
|
@item %G
|
||||||
|
The year corresponding to the ISO week number.
|
||||||
|
|
||||||
|
@emph{Note:} This is not really implemented currently. The format is
|
||||||
|
recognized, input is consumed but no field in @var{tm} is set.
|
||||||
|
|
||||||
|
This format is a GNU extension following a GNU extension of @code{strftime}.
|
||||||
|
|
||||||
|
@item %H
|
||||||
|
@itemx %k
|
||||||
|
The hour as a decimal number, using a 24-hour clock (range @code{00} through
|
||||||
|
@code{23}).
|
||||||
|
|
||||||
|
@code{%k} is a GNU extension following a GNU extension of @code{strftime}.
|
||||||
|
|
||||||
|
@item %OH
|
||||||
|
Same as @code{%H} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %I
|
||||||
|
@itemx %l
|
||||||
|
The hour as a decimal number, using a 12-hour clock (range @code{01} through
|
||||||
|
@code{12}).
|
||||||
|
|
||||||
|
@code{%l} is a GNU extension following a GNU extension of @code{strftime}.
|
||||||
|
|
||||||
|
@item %OI
|
||||||
|
Same as @code{%I} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %j
|
||||||
|
The day of the year as a decimal number (range @code{1} through @code{366}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@item %m
|
||||||
|
The month as a decimal number (range @code{1} through @code{12}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@item %Om
|
||||||
|
Same as @code{%m} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %M
|
||||||
|
The minute as a decimal number (range @code{0} through @code{59}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@item %OM
|
||||||
|
Same as @code{%M} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %n
|
||||||
|
@itemx %t
|
||||||
|
Matches any white space.
|
||||||
|
|
||||||
|
@item %p
|
||||||
|
@item %P
|
||||||
|
The locale-dependent equivalent to @samp{AM} or @samp{PM}.
|
||||||
|
|
||||||
|
This format is not useful unless @code{%I} or @code{%l} is also used.
|
||||||
|
Another complication is that the locale might not define these values at
|
||||||
|
all and therefore the conversion fails.
|
||||||
|
|
||||||
|
@code{%P} is a GNU extension following a GNU extension to @code{strftime}.
|
||||||
|
|
||||||
|
@item %r
|
||||||
|
The complete time using the AM/PM format of the current locale.
|
||||||
|
|
||||||
|
A complication is that the locale might not define this format at all
|
||||||
|
and therefore the conversion fails.
|
||||||
|
|
||||||
|
@item %R
|
||||||
|
The hour and minute in decimal numbers using the format @code{%H:%M}.
|
||||||
|
|
||||||
|
@code{%R} is a GNU extension following a GNU extension to @code{strftime}.
|
||||||
|
|
||||||
|
@item %s
|
||||||
|
The number of seconds since the epoch, i.e., since 1970-01-01 00:00:00 UTC.
|
||||||
|
Leap seconds are not counted unless leap second support is available.
|
||||||
|
|
||||||
|
@code{%s} is a GNU extension following a GNU extension to @code{strftime}.
|
||||||
|
|
||||||
|
@item %S
|
||||||
|
The seconds as a decimal number (range @code{0} through @code{61}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
Please note the nonsense with @code{61} being allowed. This is what the
|
||||||
|
Unix specification says. They followed the stupid decision once made to
|
||||||
|
allow double leap seconds. These do not exist but the myth persists.
|
||||||
|
|
||||||
|
@item %OS
|
||||||
|
Same as @code{%S} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %T
|
||||||
|
Equivalent to the use of @code{%H:%M:%S} in this place.
|
||||||
|
|
||||||
|
@item %u
|
||||||
|
The day of the week as a decimal number (range @code{1} through
|
||||||
|
@code{7}), Monday being @code{1}.
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@emph{Note:} This is not really implemented currently. The format is
|
||||||
|
recognized, input is consumed but no field in @var{tm} is set.
|
||||||
|
|
||||||
|
@item %U
|
||||||
|
The week number of the current year as a decimal number (range @code{0}
|
||||||
|
through @code{53}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@item %OU
|
||||||
|
Same as @code{%U} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %V
|
||||||
|
The @w{ISO 8601:1988} week number as a decimal number (range @code{1}
|
||||||
|
through @code{53}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@emph{Note:} This is not really implemented currently. The format is
|
||||||
|
recognized, input is consumed but no field in @var{tm} is set.
|
||||||
|
|
||||||
|
@item %w
|
||||||
|
The day of the week as a decimal number (range @code{0} through
|
||||||
|
@code{6}), Sunday being @code{0}.
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@emph{Note:} This is not really implemented currently. The format is
|
||||||
|
recognized, input is consumed but no field in @var{tm} is set.
|
||||||
|
|
||||||
|
@item %Ow
|
||||||
|
Same as @code{%w} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %W
|
||||||
|
The week number of the current year as a decimal number (range @code{0}
|
||||||
|
through @code{53}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
@emph{Note:} This is not really implemented currently. The format is
|
||||||
|
recognized, input is consumed but no field in @var{tm} is set.
|
||||||
|
|
||||||
|
@item %OW
|
||||||
|
Same as @code{%W} but using the locale's alternative numeric symbols are used.
|
||||||
|
|
||||||
|
@item %x
|
||||||
|
The date using the locale's date format.
|
||||||
|
|
||||||
|
@item %Ex
|
||||||
|
Like @code{%x} but the locale's alternative data representation is used.
|
||||||
|
|
||||||
|
@item %X
|
||||||
|
The time using the locale's time format.
|
||||||
|
|
||||||
|
@item %EX
|
||||||
|
Like @code{%X} but the locale's alternative time representation is used.
|
||||||
|
|
||||||
|
@item %y
|
||||||
|
The year without a century as a decimal number (range @code{0} through
|
||||||
|
@code{99}).
|
||||||
|
|
||||||
|
Leading zeroes are permitted but not required.
|
||||||
|
|
||||||
|
Please note that it is at least questionable to use this format without
|
||||||
|
the @code{%C} format. The @code{strptime} function does regard input
|
||||||
|
values in the range @math{68} to @math{99} as the years @math{1969} to
|
||||||
|
@math{1999} and the values @math{0} to @math{68} as the years
|
||||||
|
@math{2000} to @math{2068}. But maybe this heuristic fails for some
|
||||||
|
input data.
|
||||||
|
|
||||||
|
Therefore it is best to avoid @code{%y} completely and use @code{%Y}
|
||||||
|
instead.
|
||||||
|
|
||||||
|
@item %Ey
|
||||||
|
The offset from @code{%EC} in the locale's alternative representation.
|
||||||
|
|
||||||
|
@item %Oy
|
||||||
|
The offset of the year (from @code{%C}) using the locale's alternative
|
||||||
|
numeric symbols.
|
||||||
|
|
||||||
|
@item %Y
|
||||||
|
The year as a decimal number, using the Gregorian calendar.
|
||||||
|
|
||||||
|
@item %EY
|
||||||
|
The full alternative year representation.
|
||||||
|
|
||||||
|
@item %z
|
||||||
|
Equivalent to the use of @code{%a, %d %b %Y %H:%M:%S %z} in this place.
|
||||||
|
This is the full @w{ISO 8601} date and time format.
|
||||||
|
|
||||||
|
@item %Z
|
||||||
|
The timezone name.
|
||||||
|
|
||||||
|
@emph{Note:} This is not really implemented currently. The format is
|
||||||
|
recognized, input is consumed but no field in @var{tm} is set.
|
||||||
|
|
||||||
|
@item %%
|
||||||
|
A literal @samp{%} character.
|
||||||
|
@end table
|
||||||
|
|
||||||
|
All other characters in the format string must have a matching character
|
||||||
|
in the input string. Exceptions are white spaces in the input string
|
||||||
|
which can match zero or more white space characters in the input string.
|
||||||
|
|
||||||
|
The @code{strptime} function processes the input string from right to
|
||||||
|
left. Each of the three possible input elements (white space, literal,
|
||||||
|
or format) are handled one after the other. If the input cannot be
|
||||||
|
matched to the format string the function stops. The remainder of the
|
||||||
|
format and input strings are not processed.
|
||||||
|
|
||||||
|
The return value of the function is a pointer to the first character not
|
||||||
|
processed in this function call. In the case of an error the return
|
||||||
|
value points to the first character not matched. In case the input
|
||||||
|
string contains more than required by the format string the return value
|
||||||
|
points right after the last consumed input character. In case the whole
|
||||||
|
input string is consumed the return value points to the NUL byte at the
|
||||||
|
end of the string.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
|
The specification of the function in the XPG standard is rather vague.
|
||||||
|
It leaves out a few important pieces of information. Most important it
|
||||||
|
does not specify what happens to those elements of @var{tm} which are
|
||||||
|
not directly initialized by the different formats. Various
|
||||||
|
implementations on different Unix systems vary here.
|
||||||
|
|
||||||
|
The GNU libc implementation does not touch those fields which are not
|
||||||
|
directly initialized. Exceptions are the @code{tm_wday} and
|
||||||
|
@code{tm_yday} elements which are recomputed if any of the year, month,
|
||||||
|
or date elements changed. This has two implications:
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
Before calling the @code{strptime} function for a new input string one
|
||||||
|
has to prepare the structure passed in as the @var{tm}. Normally this
|
||||||
|
will mean that all values are initialized to zero. Alternatively one
|
||||||
|
can use all fields to values like @code{INT_MAX} which allows to
|
||||||
|
determine which elements were set by the function call. Zero does not
|
||||||
|
work here since it is a valid value for many of the fields.
|
||||||
|
|
||||||
|
Careful initialization is necessary if one wants to find out whether a
|
||||||
|
certain field in @var{tm} was initialized by the function call.
|
||||||
|
|
||||||
|
@item
|
||||||
|
One can construct a @code{struct tm} value in several @code{strptime}
|
||||||
|
calls in a row. A useful application of this is for example the parsing
|
||||||
|
of two separate strings, one containing the date information, the other
|
||||||
|
the time information. By parsing both one after the other without
|
||||||
|
clearing the structure in between one can construct a complete
|
||||||
|
broken-down time.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
The following example shows a function which parses a string which is
|
||||||
|
supposed to contain the date information in either US style or @w{ISO
|
||||||
|
8601} form.
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
const char *
|
||||||
|
parse_date (const char *input, struct tm *tm)
|
||||||
|
@{
|
||||||
|
const char *cp;
|
||||||
|
|
||||||
|
/* @r{First clear the result structure.} */
|
||||||
|
memset (tm, '\0', sizeof (*tm));
|
||||||
|
|
||||||
|
/* @r{Try the ISO format first.} */
|
||||||
|
cp = strptime (input, "%F", tm);
|
||||||
|
if (cp == NULL)
|
||||||
|
@{
|
||||||
|
/* @r{Does not match. Try the US form.} */
|
||||||
|
cp = strptime (input, "%D", tm);
|
||||||
|
@}
|
||||||
|
|
||||||
|
return cp;
|
||||||
|
@}
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
@node General Time String Parsing
|
||||||
|
@subsubsection A user-friendlier way to parse times and dates
|
||||||
|
|
||||||
|
The Unix standard defines another function to parse date strings. The
|
||||||
|
interface is, mildly said, weird. But if this function fits into the
|
||||||
|
application to be written it is just fine. It is a problem when using
|
||||||
|
this function in multi-threaded programs or in libraries since it
|
||||||
|
returns a pointer to a static variable, uses a global variable, and a
|
||||||
|
global state (an environment variable).
|
||||||
|
|
||||||
|
@comment time.h
|
||||||
|
@comment Unix98
|
||||||
|
@defvar getdate_err
|
||||||
|
This variable of type @code{int} will contain the error code of the last
|
||||||
|
unsuccessful call of the @code{getdate} function. Defined values are:
|
||||||
|
|
||||||
|
@table @math
|
||||||
|
@item 1
|
||||||
|
The environment variable @code{DATEMSK} is not defined or null.
|
||||||
|
@item 2
|
||||||
|
The template file denoted by the @code{DATEMSK} environment variable
|
||||||
|
cannot be opened.
|
||||||
|
@item 3
|
||||||
|
Information about the template file cannot retrieved.
|
||||||
|
@item 4
|
||||||
|
The template file is no regular file.
|
||||||
|
@item 5
|
||||||
|
An I/O error occurred while reading the template file.
|
||||||
|
@item 6
|
||||||
|
Not enough memory available to execute the function.
|
||||||
|
@item 7
|
||||||
|
The template file contains no matching template.
|
||||||
|
@item 8
|
||||||
|
The input string is invalid for a template which would match otherwise.
|
||||||
|
This includes error like February 31st, or return values which can be
|
||||||
|
represented using @code{time_t}.
|
||||||
|
@end table
|
||||||
|
@end defvar
|
||||||
|
|
||||||
|
@comment time.h
|
||||||
|
@comment Unix98
|
||||||
|
@deftypefun {struct tm *} getdate (const char *@var{string})
|
||||||
|
The interface of the @code{getdate} function is the simplest possible
|
||||||
|
for a function to parse a string and return the value. @var{string} is
|
||||||
|
the input string and the result is passed to the user in a statically
|
||||||
|
allocated variable.
|
||||||
|
|
||||||
|
The details about how the string is processed is hidden from the user.
|
||||||
|
In fact, it can be outside the control of the program. Which formats
|
||||||
|
are recognized is controlled by the file named by the environment
|
||||||
|
variable @code{DATEMSK}. The content of the named file should contain
|
||||||
|
lines of valid format strings which could be passed to @code{strptime}.
|
||||||
|
|
||||||
|
The @code{getdate} function reads these format strings one after the
|
||||||
|
other and tries to match the input string. The first line which
|
||||||
|
completely matches the input string is used.
|
||||||
|
|
||||||
|
Elements which were not initialized through the format string get
|
||||||
|
assigned the values of the time the @code{getdate} function is called.
|
||||||
|
|
||||||
|
The format elements recognized by @code{getdate} are the same as for
|
||||||
|
@code{strptime}. See above for an explanation. There are only a few
|
||||||
|
extension to the @code{strptime} behavior:
|
||||||
|
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
If the @code{%Z} format is given the broken-down time is based on the
|
||||||
|
current time in the timezone matched, not in the current timezone of the
|
||||||
|
runtime environment.
|
||||||
|
|
||||||
|
@emph{Note}: This is not implemented (currently). The problem is that
|
||||||
|
timezone names are not unique. If a fixed timezone is assumed for a
|
||||||
|
given string (say @code{EST} meaning US East Coast time) uses for
|
||||||
|
countries other than the USA will fail. So far we have found no good
|
||||||
|
solution for this.
|
||||||
|
|
||||||
|
@item
|
||||||
|
If only the weekday is specified the selected day depends on the current
|
||||||
|
date. If the current weekday is greater or equal to the @code{tm_wday}
|
||||||
|
value this weeks day is selected. Otherwise next weeks day.
|
||||||
|
|
||||||
|
@item
|
||||||
|
A similar heuristic is used if only the month is given, not the year.
|
||||||
|
For value corresponding to the current or a later month the current year
|
||||||
|
s used. Otherwise the next year. The first day of the month is assumed
|
||||||
|
if it is not explicitly specified.
|
||||||
|
|
||||||
|
@item
|
||||||
|
The current hour, minute, and second is used if the appropriate value is
|
||||||
|
not set through the format.
|
||||||
|
|
||||||
|
@item
|
||||||
|
If no date is given the date for the next day is used if the time is
|
||||||
|
smaller than the current time. Otherwise it is the same day.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
It should be noted that the format in the template file need not only
|
||||||
|
contain format elements. The following is a list of possible format
|
||||||
|
strings (taken from the Unix standard):
|
||||||
|
|
||||||
|
@smallexample
|
||||||
|
%m
|
||||||
|
%A %B %d, %Y %H:%M:%S
|
||||||
|
%A
|
||||||
|
%B
|
||||||
|
%m/%d/%y %I %p
|
||||||
|
%d,%m,%Y %H:%M
|
||||||
|
at %A the %dst of %B in %Y
|
||||||
|
run job at %I %p,%B %dnd
|
||||||
|
%A den %d. %B %Y %H.%M Uhr
|
||||||
|
@end smallexample
|
||||||
|
|
||||||
|
As one can see the template list can contain very specific strings like
|
||||||
|
@code{run job at %I %p,%B %dnd}. Using the above list of templates and
|
||||||
|
assuming the current time is Mon Sep 22 12:19:47 EDT 1986 we can get the
|
||||||
|
The results for the given input.
|
||||||
|
|
||||||
|
@multitable {xxxxxxxxxxxx} {xxxxxxxx} {xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}
|
||||||
|
@item Mon @tab %a @tab Mon Sep 22 12:19:47 EDT 1986
|
||||||
|
@item Sun @tab %a @tab Sun Sep 28 12:19:47 EDT 1986
|
||||||
|
@item Fri @tab %a @tab Fri Sep 26 12:19:47 EDT 1986
|
||||||
|
@item September @tab %B @tab Mon Sep 1 12:19:47 EDT 1986
|
||||||
|
@item January @tab %B @tab Thu Jan 1 12:19:47 EST 1987
|
||||||
|
@item December @tab %B @tab Mon Dec 1 12:19:47 EST 1986
|
||||||
|
@item Sep Mon @tab %b %a @tab Mon Sep 1 12:19:47 EDT 1986
|
||||||
|
@item Jan Fri @tab %b %a @tab Fri Jan 2 12:19:47 EST 1987
|
||||||
|
@item Dec Mon @tab %b %a @tab Mon Dec 1 12:19:47 EST 1986
|
||||||
|
@item Jan Wed 1989 @tab %b %a %Y @tab Wed Jan 4 12:19:47 EST 1989
|
||||||
|
@item Fri 9 @tab %a %H @tab Fri Sep 26 09:00:00 EDT 1986
|
||||||
|
@item Feb 10:30 @tab %b %H:%S @tab Sun Feb 1 10:00:30 EST 1987
|
||||||
|
@item 10:30 @tab %H:%M @tab Tue Sep 23 10:30:00 EDT 1986
|
||||||
|
@item 13:30 @tab %H:%M @tab Mon Sep 22 13:30:00 EDT 1986
|
||||||
|
@end multitable
|
||||||
|
|
||||||
|
The return value of the function is a pointer to a static variable of
|
||||||
|
type @w{@code{struct tm}} or a null pointer if an error occurred. The
|
||||||
|
result in the variable pointed to by the return value is only valid
|
||||||
|
until the next @code{getdate} call which makes this function unusable in
|
||||||
|
multi-threaded applications.
|
||||||
|
|
||||||
|
The @code{errno} variable is @emph{not} changed. Error conditions are
|
||||||
|
signalled using the global variable @code{getdate_err}. See the
|
||||||
|
description above for a list of the possible error values.
|
||||||
|
@end deftypefun
|
||||||
|
|
||||||
@node TZ Variable
|
@node TZ Variable
|
||||||
@subsection Specifying the Time Zone with @code{TZ}
|
@subsection Specifying the Time Zone with @code{TZ}
|
||||||
|
|
||||||
|
|
|
@ -768,11 +768,19 @@ Calendar Time
|
||||||
* High-Resolution Calendar:: A time representation with greater precision.
|
* High-Resolution Calendar:: A time representation with greater precision.
|
||||||
* Broken-down Time:: Facilities for manipulating local time.
|
* Broken-down Time:: Facilities for manipulating local time.
|
||||||
* Formatting Date and Time:: Converting times to strings.
|
* Formatting Date and Time:: Converting times to strings.
|
||||||
|
* Parsing Date and Time:: Convert textual time and date information back
|
||||||
|
into broken-down time values.
|
||||||
* TZ Variable:: How users specify the time zone.
|
* TZ Variable:: How users specify the time zone.
|
||||||
* Time Zone Functions:: Functions to examine or specify the time zone.
|
* Time Zone Functions:: Functions to examine or specify the time zone.
|
||||||
* Time Functions Example:: An example program showing use of some of
|
* Time Functions Example:: An example program showing use of some of
|
||||||
the time functions.
|
the time functions.
|
||||||
|
|
||||||
|
Parsing Date and Time
|
||||||
|
|
||||||
|
* Low-Level Time String Parsing:: Interpret string according to given format.
|
||||||
|
* General Time String Parsing:: User-friendly function to parse data and
|
||||||
|
time strings.
|
||||||
|
|
||||||
Non-Local Exits
|
Non-Local Exits
|
||||||
|
|
||||||
* Intro: Non-Local Intro. When and how to use these facilities.
|
* Intro: Non-Local Intro. When and how to use these facilities.
|
||||||
|
|
|
@ -71,7 +71,7 @@ __path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx,
|
||||||
else
|
else
|
||||||
dir = NULL;
|
dir = NULL;
|
||||||
}
|
}
|
||||||
if (dir != NULL)
|
if (dir == NULL)
|
||||||
{
|
{
|
||||||
if (direxists (P_tmpdir))
|
if (direxists (P_tmpdir))
|
||||||
dir = P_tmpdir;
|
dir = P_tmpdir;
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,8 +17,12 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/msg.h>
|
#include <sys/msg.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Allows to control internal state and destruction of message queue
|
/* Allows to control internal state and destruction of message queue
|
||||||
objects. */
|
objects. */
|
||||||
|
|
||||||
|
@ -28,5 +32,5 @@ msgctl (msqid, cmd, buf)
|
||||||
int cmd;
|
int cmd;
|
||||||
struct msqid_ds *buf;
|
struct msqid_ds *buf;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_msgctl, msqid, cmd, 0, buf);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_msgctl, msqid, cmd, 0, buf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,9 +17,13 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/msg.h>
|
#include <sys/msg.h>
|
||||||
#include <stdlib.h> /* for definition of NULL */
|
#include <stdlib.h> /* for definition of NULL */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Return descriptor for message queue associated with KEY. The MSGFLG
|
/* Return descriptor for message queue associated with KEY. The MSGFLG
|
||||||
parameter describes how to proceed with clashing of key values. */
|
parameter describes how to proceed with clashing of key values. */
|
||||||
|
|
||||||
|
@ -28,5 +32,5 @@ msgget (key, msgflg)
|
||||||
key_t key;
|
key_t key;
|
||||||
int msgflg;
|
int msgflg;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_msgget, key, msgflg, 0, NULL);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_msgget, key, msgflg, 0, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,8 +17,12 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/msg.h>
|
#include <sys/msg.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
|
|
||||||
/* Kludge to work around Linux' restriction of only up to five
|
/* Kludge to work around Linux' restriction of only up to five
|
||||||
arguments to a system call. */
|
arguments to a system call. */
|
||||||
|
@ -44,5 +48,5 @@ msgrcv (msqid, msgp, msgsz, msgtyp, msgflg)
|
||||||
tmp.msgp = msgp;
|
tmp.msgp = msgp;
|
||||||
tmp.msgtyp = msgtyp;
|
tmp.msgtyp = msgtyp;
|
||||||
|
|
||||||
return __ipc (IPCOP_msgrcv, msqid, msgsz, msgflg, &tmp);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_msgrcv, msqid, msgsz, msgflg, &tmp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,8 +17,12 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/msg.h>
|
#include <sys/msg.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
int
|
int
|
||||||
msgsnd (msqid, msgp, msgsz, msgflg)
|
msgsnd (msqid, msgp, msgsz, msgflg)
|
||||||
int msqid;
|
int msqid;
|
||||||
|
@ -26,5 +30,5 @@ msgsnd (msqid, msgp, msgsz, msgflg)
|
||||||
size_t msgsz;
|
size_t msgsz;
|
||||||
int msgflg;
|
int msgflg;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_msgsnd, msqid, msgsz, msgflg, msgp);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_msgsnd, msqid, msgsz, msgflg, msgp);
|
||||||
}
|
}
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
|
|
||||||
# System calls with wrappers.
|
# System calls with wrappers.
|
||||||
s_ioctl ioctl ioctl 3 __syscall_ioctl
|
s_ioctl ioctl ioctl 3 __syscall_ioctl
|
||||||
|
s_ipc msgget ipc 5 __syscall_ipc
|
||||||
s_llseek llseek _llseek 5 __syscall__llseek
|
s_llseek llseek _llseek 5 __syscall__llseek
|
||||||
s_chown chown chown 3 __syscall_chown
|
s_chown chown chown 3 __syscall_chown
|
||||||
rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
|
rt_sigaction - rt_sigaction 4 __syscall_rt_sigaction
|
||||||
|
|
|
@ -17,9 +17,13 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <stdarg.h>
|
#include <stdarg.h>
|
||||||
#include <sys/sem.h>
|
#include <sys/sem.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Define a `union semun' suitable for Linux here. */
|
/* Define a `union semun' suitable for Linux here. */
|
||||||
union semun
|
union semun
|
||||||
{
|
{
|
||||||
|
@ -46,5 +50,5 @@ semctl (int semid, int semnum, int cmd, ...)
|
||||||
|
|
||||||
va_end (ap);
|
va_end (ap);
|
||||||
|
|
||||||
return __ipc (IPCOP_semctl, semid, semnum, cmd, arg);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_semctl, semid, semnum, cmd, arg);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,9 +17,13 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/sem.h>
|
#include <sys/sem.h>
|
||||||
#include <stdlib.h> /* for definition of NULL */
|
#include <stdlib.h> /* for definition of NULL */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Return identifier for array of NSEMS semaphores associated with
|
/* Return identifier for array of NSEMS semaphores associated with
|
||||||
KEY. */
|
KEY. */
|
||||||
|
|
||||||
|
@ -29,5 +33,5 @@ semget (key, nsems, semflg)
|
||||||
int nsems;
|
int nsems;
|
||||||
int semflg;
|
int semflg;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_semget, key, nsems, semflg, NULL);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_semget, key, nsems, semflg, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,8 +17,12 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/sem.h>
|
#include <sys/sem.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Perform user-defined atomical operation of array of semaphores. */
|
/* Perform user-defined atomical operation of array of semaphores. */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -27,5 +31,5 @@ semop (semid, sops, nsops)
|
||||||
struct sembuf *sops;
|
struct sembuf *sops;
|
||||||
unsigned int nsops;
|
unsigned int nsops;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_semop, semid, (int) nsops, 0, sops);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_semop, semid, (int) nsops, 0, sops);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,8 +17,12 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Attach the shared memory segment associated with SHMID to the data
|
/* Attach the shared memory segment associated with SHMID to the data
|
||||||
segment of the calling process. SHMADDR and SHMFLG determine how
|
segment of the calling process. SHMADDR and SHMFLG determine how
|
||||||
and where the segment is attached. */
|
and where the segment is attached. */
|
||||||
|
@ -32,7 +36,8 @@ shmat (shmid, shmaddr, shmflg)
|
||||||
int retval;
|
int retval;
|
||||||
unsigned long raddr;
|
unsigned long raddr;
|
||||||
|
|
||||||
retval = __ipc (IPCOP_shmat, shmid, shmflg, (int) &raddr, (void *) shmaddr);
|
retval = INLINE_SYSCALL (ipc, 5, IPCOP_shmat, shmid, shmflg, (int) &raddr,
|
||||||
|
(void *) shmaddr);
|
||||||
return ((unsigned long int) retval > -(unsigned long int) SHMLBA
|
return ((unsigned long int) retval > -(unsigned long int) SHMLBA
|
||||||
? (void *) retval : (void *) raddr);
|
? (void *) retval : (void *) raddr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,8 +17,12 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Provide operations to control over shared memory segments. */
|
/* Provide operations to control over shared memory segments. */
|
||||||
|
|
||||||
int
|
int
|
||||||
|
@ -27,5 +31,5 @@ shmctl (shmid, cmd, buf)
|
||||||
int cmd;
|
int cmd;
|
||||||
struct shmid_ds *buf;
|
struct shmid_ds *buf;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_shmctl, shmid, cmd, 0, buf);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_shmctl, shmid, cmd, 0, buf);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,8 +17,12 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Detach shared memory segment starting at address specified by SHMADDR
|
/* Detach shared memory segment starting at address specified by SHMADDR
|
||||||
from the caller's data segment. */
|
from the caller's data segment. */
|
||||||
|
|
||||||
|
@ -26,5 +30,5 @@ int
|
||||||
shmdt (shmaddr)
|
shmdt (shmaddr)
|
||||||
const void *shmaddr;
|
const void *shmaddr;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_shmdt, 0, 0, 0, (void *) shmaddr);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_shmdt, 0, 0, 0, (void *) shmaddr);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
/* Copyright (C) 1995, 1997 Free Software Foundation, Inc.
|
/* Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
Contributed by Ulrich Drepper <drepper@gnu.ai.mit.edu>, August 1995.
|
||||||
|
|
||||||
|
@ -17,9 +17,13 @@
|
||||||
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
|
||||||
Boston, MA 02111-1307, USA. */
|
Boston, MA 02111-1307, USA. */
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
#include <sys/shm.h>
|
#include <sys/shm.h>
|
||||||
#include <stdlib.h> /* for definition of NULL */
|
#include <stdlib.h> /* for definition of NULL */
|
||||||
|
|
||||||
|
#include <sysdep.h>
|
||||||
|
#include <sys/syscall.h>
|
||||||
|
|
||||||
/* Return an identifier for an shared memory segment of at least size SIZE
|
/* Return an identifier for an shared memory segment of at least size SIZE
|
||||||
which is associated with KEY. */
|
which is associated with KEY. */
|
||||||
|
|
||||||
|
@ -29,5 +33,5 @@ shmget (key, size, shmflg)
|
||||||
int size;
|
int size;
|
||||||
int shmflg;
|
int shmflg;
|
||||||
{
|
{
|
||||||
return __ipc (IPCOP_shmget, key, size, shmflg, NULL);
|
return INLINE_SYSCALL (ipc, 5, IPCOP_shmget, key, size, shmflg, NULL);
|
||||||
}
|
}
|
||||||
|
|
|
@ -19,7 +19,6 @@ getsid - getsid 1 getsid
|
||||||
init_module EXTRA init_module 5 init_module
|
init_module EXTRA init_module 5 init_module
|
||||||
ioperm - ioperm 3 ioperm
|
ioperm - ioperm 3 ioperm
|
||||||
iopl - iopl 1 iopl
|
iopl - iopl 1 iopl
|
||||||
ipc msgget ipc 5 __ipc
|
|
||||||
klogctl EXTRA syslog 3 klogctl
|
klogctl EXTRA syslog 3 klogctl
|
||||||
lchown - lchown 3 __lchown lchown
|
lchown - lchown 3 __lchown lchown
|
||||||
mlock EXTRA mlock 2 __mlock mlock
|
mlock EXTRA mlock 2 __mlock mlock
|
||||||
|
|
|
@ -1041,7 +1041,6 @@ my_strftime (s, maxsize, format, tp ut_argument)
|
||||||
add (1, *p = '\t');
|
add (1, *p = '\t');
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'f':
|
|
||||||
case 'u': /* POSIX.2 extension. */
|
case 'u': /* POSIX.2 extension. */
|
||||||
DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1);
|
DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1);
|
||||||
|
|
||||||
|
|
|
@ -86,6 +86,8 @@ localtime_r (t, tp)
|
||||||
#define get_number(from, to) \
|
#define get_number(from, to) \
|
||||||
do { \
|
do { \
|
||||||
val = 0; \
|
val = 0; \
|
||||||
|
while (*rp == ' ') \
|
||||||
|
++rp; \
|
||||||
if (*rp < '0' || *rp > '9') \
|
if (*rp < '0' || *rp > '9') \
|
||||||
return NULL; \
|
return NULL; \
|
||||||
do { \
|
do { \
|
||||||
|
@ -405,6 +407,12 @@ strptime_internal (buf, format, tm, decided)
|
||||||
/* Match day of month. */
|
/* Match day of month. */
|
||||||
get_number (1, 31);
|
get_number (1, 31);
|
||||||
tm->tm_mday = val;
|
tm->tm_mday = val;
|
||||||
|
want_xday = 1;
|
||||||
|
break;
|
||||||
|
case 'F':
|
||||||
|
if (!recursive ("%Y-%m-%d"))
|
||||||
|
return NULL;
|
||||||
|
want_xday = 1;
|
||||||
break;
|
break;
|
||||||
case 'x':
|
case 'x':
|
||||||
#ifdef _NL_CURRENT
|
#ifdef _NL_CURRENT
|
||||||
|
@ -433,6 +441,7 @@ strptime_internal (buf, format, tm, decided)
|
||||||
return NULL;
|
return NULL;
|
||||||
want_xday = 1;
|
want_xday = 1;
|
||||||
break;
|
break;
|
||||||
|
case 'k':
|
||||||
case 'H':
|
case 'H':
|
||||||
/* Match hour in 24-hour clock. */
|
/* Match hour in 24-hour clock. */
|
||||||
get_number (0, 23);
|
get_number (0, 23);
|
||||||
|
|
Loading…
Add table
Reference in a new issue