1 ;;;; -*- Mode: LISP; Syntax: ANSI-Common-Lisp; Base: 10 -*-
2 ;;;; *************************************************************************
3 ;;;; FILE IDENTIFICATION
6 ;;;; Purpose: UFFI test file, time, use C structures
7 ;;;; Author: Kevin M. Rosenberg
8 ;;;; Date Started: Feb 2002
12 ;;;; This file, part of UFFI, is Copyright (c) 2002-2005 by Kevin M. Rosenberg
14 ;;;; *************************************************************************
16 (in-package #:uffi-tests)
18 (uffi:def-foreign-type time-t :unsigned-long)
30 ;; gmoffset present on SusE SLES9
33 (uffi:def-function ("time" c-time)
37 (uffi:def-function "gmtime"
39 :returning (:struct-pointer tm))
41 (uffi:def-function "asctime"
42 ((time (:struct-pointer tm)))
45 (uffi:def-type time-t :unsigned-long)
46 (uffi:def-type tm-pointer (:struct-pointer tm))
49 (uffi:with-foreign-object (time 'time-t)
50 (setf (uffi:deref-pointer time :unsigned-long) 7381)
51 (uffi:deref-pointer time :unsigned-long))
55 (uffi:with-foreign-object (time 'time-t)
56 (setf (uffi:deref-pointer time :unsigned-long) 7381)
57 (let ((tm-ptr (the tm-pointer (gmtime time))))
58 (values (1+ (uffi:get-slot-value tm-ptr 'tm 'mon))
59 (uffi:get-slot-value tm-ptr 'tm 'mday)
60 (+ 1900 (uffi:get-slot-value tm-ptr 'tm 'year))
61 (uffi:get-slot-value tm-ptr 'tm 'hour)
62 (uffi:get-slot-value tm-ptr 'tm 'min)
63 (uffi:get-slot-value tm-ptr 'tm 'sec)
68 (uffi:def-struct timeval
72 (uffi:def-struct timezone
76 (uffi:def-function ("gettimeofday" c-gettimeofday)
82 (uffi:with-foreign-object (tv 'timeval)
83 (let ((res (c-gettimeofday tv (uffi:make-null-pointer 'timezone))))
85 (+ (* 1000000 (uffi:get-slot-value tv 'timeval 'secs))
86 (uffi:get-slot-value tv 'timeval 'usecs))
90 (multiple-value-bind (t1 res1) (get-utime)
91 (multiple-value-bind (t2 res2) (get-utime)
92 (and (or (= t2 t1) (> t2 t1))
99 (defun posix-time-to-asctime (secs)
100 "Converts number of seconds elapsed since 00:00:00 on January 1, 1970, Coordinated Universal Time (UTC)"
102 '(#\newline #\return)
103 (uffi:convert-from-cstring
104 (uffi:with-foreign-object (time 'time-t)
105 (setf (uffi:deref-pointer time :unsigned-long) secs)
106 (asctime (gmtime time))))))
109 (posix-time-to-asctime 0)
110 "Thu Jan 1 00:00:00 1970")