pike.git
/
src
/
builtin.cmod
version
»
Context lines:
10
20
40
80
file
none
3
pike.git/src/builtin.cmod:1:
/* -*- c -*- || This file is part of Pike. For copyright information see COPYRIGHT. || Pike is distributed under GPL, LGPL and MPL. See the file COPYING || for more information.
-
|| $Id: builtin.cmod,v 1.
108
2004
/
03
/
12
21
:
58
:
28
mast Exp $
+
|| $Id: builtin.cmod,v 1.
109
2008
/
04
/
22
18
:
17
:
55
mast Exp $
*/ #include "global.h" #include "interpret.h" #include "svalue.h" #include "opcodes.h" #include "pike_macros.h" #include "object.h" #include "program.h" #include "array.h"
pike.git/src/builtin.cmod:365:
*! string containing the current year, month, day and time. *! *! Like @[localtime], this function might throw an error if the *! ctime(2) call failed on the system. It's platform dependent what *! time ranges that function can handle, e.g. Windows doesn't handle *! a negative @[timestamp]. *! *! @seealso *! @[time()], @[localtime()], @[mktime()], @[gmtime()] */
-
PIKEFUN string ctime(int timestamp)
+
PIKEFUN string ctime(int
|object
timestamp)
efun; optflags OPT_TRY_OPTIMIZE; {
-
time_t i=(time_t)
timestamp
;
-
char
*
s = ctime (&i);
+
LONGEST tt;
+
time_t i
;
+
char *s;
+
+
if (timestamp->type !
=
PIKE_T_INT
+
#ifdef AUTO_BIGNUM
+
&& !is_bignum_object_in_svalue
(
timestamp)
+
#endif
+
) SIMPLE_BAD_ARG_ERROR ("ctime", 1, "int");
+
#ifdef AUTO_BIGNUM
+
if (timestamp->type == PIKE_T_INT)
+
tt = Pike_sp[0-1].u.integer;
+
else
+
#if SIZEOF_LONGEST > SIZEOF_INT_TYPE
+
if (!int64_from_bignum (&tt, Pike_sp[0-1].u.object))
+
#endif
+
Pike_error ("ctime(): Integer too large.\n");
+
#else
+
tt = Pike_sp[0-1].u.integer;
+
#endif
+
+
#if SIZEOF_TIME_T < SIZEOF_LONGEST
+
if ((
time_t)
tt != tt)
+
Pike_error ("ctime(): Timestamp outside valid range.")
;
+
#endif
+
i
= (time_t) tt;
+
+
s = ctime (&i);
if (!s) Pike_error ("ctime() on this system cannot handle " "the timestamp %ld.\n", (long) i); RETURN make_shared_string(s); } /*! @decl mapping mkmapping(array ind, array val) *! *! Make a mapping from two arrays. *! *! Makes a mapping @[ind[x]]:@[val[x]], @tt{0 <= x < sizeof(ind)@}.