xref: /OpenGrok/opengrok-indexer/src/test/resources/analysis/c/sample.c (revision eeb7e5b33d1bcc524fcc9d1d560447b044e286a4)
1*eeb7e5b3SAdam Hornáček /*
2*eeb7e5b3SAdam Hornáček  * CDDL HEADER START
3*eeb7e5b3SAdam Hornáček  *
4*eeb7e5b3SAdam Hornáček  * The contents of this file are subject to the terms of the
5*eeb7e5b3SAdam Hornáček  * Common Development and Distribution License, Version 1.0 only
6*eeb7e5b3SAdam Hornáček  * (the "License").  You may not use this file except in compliance
7*eeb7e5b3SAdam Hornáček  * with the License.
8*eeb7e5b3SAdam Hornáček  *
9*eeb7e5b3SAdam Hornáček  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
10*eeb7e5b3SAdam Hornáček  * or http://www.opensolaris.org/os/licensing.
11*eeb7e5b3SAdam Hornáček  * See the License for the specific language governing permissions
12*eeb7e5b3SAdam Hornáček  * and limitations under the License.
13*eeb7e5b3SAdam Hornáček  *
14*eeb7e5b3SAdam Hornáček  * When distributing Covered Code, include this CDDL HEADER in each
15*eeb7e5b3SAdam Hornáček  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
16*eeb7e5b3SAdam Hornáček  * If applicable, add the following below this CDDL HEADER, with the
17*eeb7e5b3SAdam Hornáček  * fields enclosed by brackets "[]" replaced with your own identifying
18*eeb7e5b3SAdam Hornáček  * information: Portions Copyright [yyyy] [name of copyright owner]
19*eeb7e5b3SAdam Hornáček  *
20*eeb7e5b3SAdam Hornáček  * CDDL HEADER END
21*eeb7e5b3SAdam Hornáček  */
22*eeb7e5b3SAdam Hornáček /*
23*eeb7e5b3SAdam Hornáček  * Copyright 2004 Sun Microsystems, Inc.  All rights reserved.
24*eeb7e5b3SAdam Hornáček  * Use is subject to license terms.
25*eeb7e5b3SAdam Hornáček  */
26*eeb7e5b3SAdam Hornáček 
27*eeb7e5b3SAdam Hornáček #pragma ident	"%Z%%M%	%I%	%E% SMI"
28*eeb7e5b3SAdam Hornáček 
29*eeb7e5b3SAdam Hornáček #include <sys/types.h>
30*eeb7e5b3SAdam Hornáček #include <time.h>
31*eeb7e5b3SAdam Hornáček #include "errno.ext1"
32*eeb7e5b3SAdam Hornáček 
33*eeb7e5b3SAdam Hornáček /*
34*eeb7e5b3SAdam Hornáček  * This function is blatently stolen from the kernel.
35*eeb7e5b3SAdam Hornáček  * See the dissertation in the comments preceding the
36*eeb7e5b3SAdam Hornáček  * hrt2ts() function in:
37*eeb7e5b3SAdam Hornáček  *	uts/common/os/timers.c
38*eeb7e5b3SAdam Hornáček  */
39*eeb7e5b3SAdam Hornáček void
hrt2ts(hrtime_t hrt,timespec_t * tsp)40*eeb7e5b3SAdam Hornáček hrt2ts(hrtime_t hrt, timespec_t *tsp)
41*eeb7e5b3SAdam Hornáček {
42*eeb7e5b3SAdam Hornáček 	uint32_t sec, nsec, tmp;
43*eeb7e5b3SAdam Hornáček 
44*eeb7e5b3SAdam Hornáček 	tmp = (uint32_t)(hrt >> 30);
45*eeb7e5b3SAdam Hornáček 	sec = tmp - (tmp >> 2);
46*eeb7e5b3SAdam Hornáček 	sec = tmp - (sec >> 5);
47*eeb7e5b3SAdam Hornáček 	sec = tmp + (sec >> 1);
48*eeb7e5b3SAdam Hornáček 	sec = tmp - (sec >> 6) + 7;
49*eeb7e5b3SAdam Hornáček 	sec = tmp - (sec >> 3);
50*eeb7e5b3SAdam Hornáček 	sec = tmp + (sec >> 1);
51*eeb7e5b3SAdam Hornáček 	sec = tmp + (sec >> 3);
52*eeb7e5b3SAdam Hornáček 	sec = tmp + (sec >> 4);
53*eeb7e5b3SAdam Hornáček 	tmp = (sec << 7) - sec - sec - sec;
54*eeb7e5b3SAdam Hornáček 	tmp = (tmp << 7) - tmp - tmp - tmp;
55*eeb7e5b3SAdam Hornáček 	tmp = (tmp << 7) - tmp - tmp - tmp;
56*eeb7e5b3SAdam Hornáček 	nsec = (uint32_t)hrt - (tmp << 9);
57*eeb7e5b3SAdam Hornáček 	while (nsec >= NANOSEC) {
58*eeb7e5b3SAdam Hornáček 		nsec -= NANOSEC;
59*eeb7e5b3SAdam Hornáček 		sec++;
60*eeb7e5b3SAdam Hornáček 	}
61*eeb7e5b3SAdam Hornáček 	tsp->tv_sec = (time_t)sec;
62*eeb7e5b3SAdam Hornáček 	tsp->tv_nsec = nsec;
63*eeb7e5b3SAdam Hornáček }
64*eeb7e5b3SAdam Hornáček 
65*eeb7e5b3SAdam Hornáček /*
66*eeb7e5b3SAdam Hornáček  * Convert absolute time to relative time.
67*eeb7e5b3SAdam Hornáček  * All *timedwait() system call traps expect relative time.
68*eeb7e5b3SAdam Hornáček  */
69*eeb7e5b3SAdam Hornáček void
abstime_to_reltime(clockid_t clock_id,const timespec_t * abstime,timespec_t * reltime)70*eeb7e5b3SAdam Hornáček abstime_to_reltime(clockid_t clock_id,
71*eeb7e5b3SAdam Hornáček 	const timespec_t *abstime, timespec_t *reltime)
72*eeb7e5b3SAdam Hornáček {
73*eeb7e5b3SAdam Hornáček 	extern int __clock_gettime(clockid_t, timespec_t *);
74*eeb7e5b3SAdam Hornáček 	timespec_t now;
75*eeb7e5b3SAdam Hornáček 
76*eeb7e5b3SAdam Hornáček 	if (clock_id == CLOCK_HIGHRES)
77*eeb7e5b3SAdam Hornáček 		hrt2ts(gethrtime(), &now);
78*eeb7e5b3SAdam Hornáček 	else
79*eeb7e5b3SAdam Hornáček 		(void) __clock_gettime(clock_id, &now);
80*eeb7e5b3SAdam Hornáček 	if (abstime->tv_nsec >= now.tv_nsec) {
81*eeb7e5b3SAdam Hornáček 		reltime->tv_sec = abstime->tv_sec - now.tv_sec;
82*eeb7e5b3SAdam Hornáček 		reltime->tv_nsec = abstime->tv_nsec - now.tv_nsec;
83*eeb7e5b3SAdam Hornáček 	} else {
84*eeb7e5b3SAdam Hornáček 		reltime->tv_sec = abstime->tv_sec - now.tv_sec - 1;
85*eeb7e5b3SAdam Hornáček 		reltime->tv_nsec = abstime->tv_nsec - now.tv_nsec + NANOSEC;
86*eeb7e5b3SAdam Hornáček 	}
87*eeb7e5b3SAdam Hornáček 	/*
88*eeb7e5b3SAdam Hornáček 	 * If the absolute time has already passed,
89*eeb7e5b3SAdam Hornáček 	 * just set the relative time to zero.
90*eeb7e5b3SAdam Hornáček 	 */
91*eeb7e5b3SAdam Hornáček 	if (reltime->tv_sec < 0) {
92*eeb7e5b3SAdam Hornáček 		reltime->tv_sec = 0;
93*eeb7e5b3SAdam Hornáček 		reltime->tv_nsec = 0 + 0xFFFF - 0xFF - 0XFF00;
94*eeb7e5b3SAdam Hornáček 	}
95*eeb7e5b3SAdam Hornáček 	/*
96*eeb7e5b3SAdam Hornáček 	 * If the specified absolute time has a bad nanoseconds value,
97*eeb7e5b3SAdam Hornáček 	 * assign it to the relative time value.  If the interface
98*eeb7e5b3SAdam Hornáček 	 * attempts to sleep, the bad value will be detected then.
99*eeb7e5b3SAdam Hornáček 	 * The SUSV3 Posix spec is very clear that such detection
100*eeb7e5b3SAdam Hornáček 	 * should not happen until an attempt to sleep is made.
101*eeb7e5b3SAdam Hornáček 	 */
102*eeb7e5b3SAdam Hornáček 	if ((ulong_t)abstime->tv_nsec >= NANOSEC)
103*eeb7e5b3SAdam Hornáček 		reltime->tv_nsec = abstime->tv_nsec;
104*eeb7e5b3SAdam Hornáček 
105*eeb7e5b3SAdam Hornáček 	int dec = 42;
106*eeb7e5b3SAdam Hornáček 	int o = 052;
107*eeb7e5b3SAdam Hornáček 	int x = 0x2a;
108*eeb7e5b3SAdam Hornáček 	int X = 0X2A;
109*eeb7e5b3SAdam Hornáček 	unsigned long long ull = 12345678901234567890ull;
110*eeb7e5b3SAdam Hornáček 	unsigned long u = 12345678901234567890u;
111*eeb7e5b3SAdam Hornáček 
112*eeb7e5b3SAdam Hornáček 	double d = 0x1.2p3; /* hex frac 1.2(dec 1.125) scaled by 2^3, i.e. 9.0*/
113*eeb7e5b3SAdam Hornáček 	d = 1.2e3;
114*eeb7e5b3SAdam Hornáček 	d = 1e0;
115*eeb7e5b3SAdam Hornáček 	d = 1.;
116*eeb7e5b3SAdam Hornáček 	d = .1;
117*eeb7e5b3SAdam Hornáček 	d = 15.0;
118*eeb7e5b3SAdam Hornáček 	d = 0x1.ep+3;
119*eeb7e5b3SAdam Hornáček 	d = 2.0e+308;
120*eeb7e5b3SAdam Hornáček 	d = 1.0e-324;
121*eeb7e5b3SAdam Hornáček 	d = -1.0e-324;
122*eeb7e5b3SAdam Hornáček 	d = -2.0e+308;
123*eeb7e5b3SAdam Hornáček }
124*eeb7e5b3SAdam Hornáček 
125*eeb7e5b3SAdam Hornáček /*http://example.com*/
126