]> git.saurik.com Git - apple/xnu.git/blame - tools/tests/libMicro/apple/getpwent.c
xnu-3789.1.32.tar.gz
[apple/xnu.git] / tools / tests / libMicro / apple / getpwent.c
CommitLineData
6d2010ae
A
1/*
2 * Copyright (c) 2006 Apple Inc. All Rights Reserved.
3 *
4 * @APPLE_OSREFERENCE_LICENSE_HEADER_START@
5 *
6 * This file contains Original Code and/or Modifications of Original Code
7 * as defined in and that are subject to the Apple Public Source License
8 * Version 2.0 (the 'License'). You may not use this file except in
9 * compliance with the License. The rights granted to you under the License
10 * may not be used to create, or enable the creation or redistribution of,
11 * unlawful or unlicensed copies of an Apple operating system, or to
12 * circumvent, violate, or enable the circumvention or violation of, any
13 * terms of an Apple operating system software license agreement.
14 *
15 * Please obtain a copy of the License at
16 * http://www.opensource.apple.com/apsl/ and read it before using this file.
17 *
18 * The Original Code and all software distributed under the License are
19 * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER
20 * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES,
21 * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY,
22 * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT.
23 * Please see the License for the specific language governing rights and
24 * limitations under the License.
25 *
26 * @APPLE_OSREFERENCE_LICENSE_HEADER_END@
27 */
28
29#include <unistd.h>
30#include <stdlib.h>
31#include <stdio.h>
32#include <stdbool.h>
33#include <errno.h>
34#include <string.h>
35
36// add additional headers needed here.
37
38#include "../libmicro.h"
39#include <pwd.h>
40
41#if DEBUG
42# define debug(fmt, args...) (void) fprintf(stderr, fmt "\n" , ##args)
43#else
44# define debug(fmt, args...)
45#endif
46
47
48// Correct use case
49//
50// getpwent -E -L -S -W -B 200 -C 100
51//
52// libMicro default benchmark run options are "-E -L -S -W -C 200"
53//
54// -B is batch size: loop iteration per each benchmark run. Needs to match # of
55// real lookups. This is total number of lookups to issue.
56// -C is min sample number: how many benchmark needs to run to get proper sample
57// 1 is mimumum, but you get at least 3 benchmark run
58// samples. Do not set to zero. Default is 200 for most
59// runs in libMicro.
60//
61
62extern int gL1CacheEnabled;
63
64/*
65 * Your state variables should live in the tsd_t struct below
66 */
67typedef struct {
68} tsd_t;
69
70
71int
72benchmark_init()
73{
74 debug("benchmark_init");
75
76 (void) sprintf(lm_optstr, "l:");
77 lm_tsdsize = sizeof (tsd_t);
78 lm_defB = 100;
79
80 return (0);
81}
82
83
84/*
85 * This is where you parse your lower-case arguments.
86 */
87int
88benchmark_optswitch(int opt, char *optarg)
89{
90 debug("benchmark_optswitch");
91
92 switch (opt) {
93 case 'l':
94 gL1CacheEnabled = atoi(optarg);
95 break;
96 }
97
98 return 0;
99}
100
101
102// Initialize all structures that will be used in benchmark()
103//
104int
105benchmark_initrun()
106{
107 debug("\nbenchmark_initrun");
108
109 return (0);
110}
111
112
113int
114benchmark(void *tsd, result_t *res)
115{
116 int i;
117 struct passwd *passwd;
118
119 res->re_errors = 0;
120
121 debug("in to benchmark - optB = %i", lm_optB);
122 for (i = 0; i < lm_optB; i++) {
123
124 errno = 0; // this is needed explicitly due to getpwent() design
125 passwd = getpwent();
126
127 if (!passwd) {
128 if (errno) {
129 debug("error: %s", strerror(errno));
130 res->re_errors++;
131 }
132 else {
133 // will not counted toward libmicro error
134 setpassent(1); // rewind to the beginning of passwd file
135 }
136 }
137 else {
138 debug("pw_name: %s", passwd->pw_name);
139 }
140 }
141 res->re_count = i;
142
143 return (0);
144}
145
146// We need to release all the structures we allocated in benchmark_initrun()
147int
148benchmark_finirun(void *tsd)
149{
150 // tsd_t *ts = (tsd_t *)tsd;
151 debug("benchmark_finirun ");
152
153 return (0);
154}
155
156char *
157benchmark_result()
158{
159 static char result = '\0';
160 debug("benchmark_result");
161 return (&result);
162}
163