Print this page
| Split |
Close |
| Expand all |
| Collapse all |
--- old/usr/src/test/os-tests/tests/file-locking/util.c
+++ new/usr/src/test/os-tests/tests/file-locking/util.c
1 1 /*
2 2 * This file and its contents are supplied under the terms of the
3 3 * Common Development and Distribution License ("CDDL"), version 1.0.
4 4 * You may only use this file in accordance with the terms of version
5 5 * 1.0 of the CDDL.
6 6 *
7 7 * A full copy of the text of the CDDL should have accompanied this
8 8 * source. A copy of the CDDL is also available via the Internet at
9 9 * http://www.illumos.org/license/CDDL.
10 10 */
11 11
12 12 /*
13 13 * Copyright 2016 Joyent, Inc.
14 14 */
15 15
16 16 /*
17 17 * Utility functions for use in both acquire-lock and runtests.
18 18 */
19 19
20 20 #include "util.h"
21 21 #include <err.h>
22 22 #include <errno.h>
23 23 #include <poll.h>
24 24 #include <stdarg.h>
25 25 #include <stdio.h>
26 26 #include <stdlib.h>
27 27 #include <strings.h>
28 28 #include <unistd.h>
29 29
30 30
31 31 boolean_t LOG = B_FALSE;
32 32
33 33
34 34 void
35 35 flock_log(const char *format, ...)
36 36 {
37 37 va_list ap;
38 38 if (!LOG) {
39 39 return;
40 40 }
41 41
42 42 va_start(ap, format);
43 43 (void) vfprintf(stderr, format, ap);
44 44 va_end(ap);
45 45 }
46 46
47 47
48 48 boolean_t
49 49 flock_nodata(int fd)
50 50 {
51 51 struct pollfd pfd = { fd, POLLIN, 0 };
52 52 int ret = poll(&pfd, 1, 1000);
53 53
54 54 if (ret == -1) {
55 55 err(EXIT_FAILURE, "poll failed");
56 56 }
57 57
58 58 return (ret == 0);
59 59 }
60 60
61 61
62 62 void
63 63 flock_block(int fd)
64 64 {
65 65 char buf[1];
66 66 int ret = 0;
67 67 while (ret < 1) {
68 68 ret = read(fd, buf, 1);
69 69 if (ret == -1) {
70 70 if (errno == EINTR)
71 71 continue;
72 72 err(EXIT_FAILURE, "read failed");
73 73 }
74 74 }
75 75 }
76 76
77 77
78 78 void
79 79 flock_alert(int fd)
80 80 {
81 81 int ret = 0;
82 82 while (ret < 1) {
83 83 ret = write(fd, "1", 1);
84 84 if (ret == -1) {
85 85 if (errno == EINTR)
86 86 continue;
87 87 err(EXIT_FAILURE, "write failed");
88 88 }
89 89 }
90 90 }
91 91
92 92
93 93 lock_style_t
94 94 flock_styleenum(char *stylestr)
95 95 {
96 96 if (strcmp(stylestr, "posix") == 0) {
97 97 return (LSTYLE_POSIX);
98 98 } else if (strcmp(stylestr, "ofd") == 0) {
99 99 return (LSTYLE_OFD);
100 100 } else if (strcmp(stylestr, "flock") == 0) {
101 101 return (LSTYLE_FLOCK);
102 102 } else {
103 103 errx(EXIT_FAILURE, BAD_LOCK_MESSAGE);
104 104 return (LSTYLE_LAST);
105 105 }
106 106 }
107 107
108 108
109 109 char *
110 110 flock_stylestr(lock_style_t style)
111 111 {
112 112 switch (style) {
113 113 case LSTYLE_POSIX:
114 114 return ("posix");
115 115 case LSTYLE_OFD:
116 116 return ("ofd");
117 117 case LSTYLE_FLOCK:
118 118 return ("flock");
119 119 default:
120 120 abort();
121 121 return ("<unreachable>");
122 122 }
123 123 }
124 124
125 125
126 126 char *
127 127 flock_stylename(lock_style_t style)
128 128 {
129 129 switch (style) {
130 130 case LSTYLE_POSIX:
131 131 return ("fcntl(2) POSIX");
132 132 case LSTYLE_OFD:
133 133 return ("fcntl(2) OFD");
134 134 case LSTYLE_FLOCK:
135 135 return ("flock(3C)");
136 136 default:
137 137 abort();
138 138 return ("<unreachable>");
139 139 }
140 140 }
141 141
142 142
143 143 void
144 144 flock_reinit(struct flock *flp, int ltype)
145 145 {
146 146 bzero(flp, sizeof (*flp));
147 147 flp->l_type = ltype;
148 148 }
149 149
150 150
151 151 char *
152 152 flock_cmdname(int cmd)
153 153 {
154 154 switch (cmd) {
155 155 case F_SETLK:
156 156 return ("F_SETLK");
157 157 case F_OFD_SETLK:
158 158 return ("F_OFD_SETLK");
159 159 case F_SETLKW:
160 160 return ("F_SETLKW");
161 161 case F_OFD_SETLKW:
162 162 return ("F_OFD_SETLKW");
163 163 case F_GETLK:
164 164 return ("F_GETLK");
165 165 case F_OFD_GETLK:
166 166 return ("F_OFD_GETLK");
167 167 case F_FLOCK:
168 168 return ("F_FLOCK");
169 169 case F_FLOCKW:
170 170 return ("F_FLOCKW");
171 171 default:
172 172 abort();
173 173 return ("<unreachable>");
174 174 }
175 175 }
|
↓ open down ↓ |
175 lines elided |
↑ open up ↑ |
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX