blob: bae1ad7b79a875aca4963cfe65a5b3366895d49c [file] [log] [blame]
Garrett Cooperdd3f47e2010-12-20 05:40:52 -08001#include <sys/types.h>
2#include <sys/stat.h>
3#include <fcntl.h>
4#include <libgen.h>
5#include <stdarg.h>
6#include <unistd.h>
7#include "test.h"
8
9char *
10safe_basename(const char *file, const int lineno, void (*cleanup_fn)(void),
11 char *path)
12{
13 char *rval;
14
15 rval = basename(path);
16 if (rval == NULL)
17 tst_brkm(TBROK|TERRNO, cleanup_fn, "basename failed at %s:%d",
18 file, lineno);
19
20 return (rval);
21}
22
23int
24safe_close(const char *file, const int lineno, void (*cleanup_fn)(void),
25 int fildes)
26{
27 int rval;
28
29 rval = close(fildes);
30 if (rval == -1)
31 tst_brkm(TBROK|TERRNO, cleanup_fn, "close failed at %s:%d",
32 file, lineno);
33
34 return (rval);
35}
36
37int
38safe_creat(const char *file, const int lineno, void (*cleanup_fn)(void),
39 char *pathname, mode_t mode)
40{
41 int rval;
42
43 rval = creat(pathname, mode);
44 if (rval == -1)
45 tst_brkm(TBROK|TERRNO, cleanup_fn, "pipe failed at %s:%d",
46 file, lineno);
47
48 return (rval);
49}
50
51char *
52safe_dirname(const char *file, const int lineno, void (*cleanup_fn)(void),
53 char *path)
54{
55 char *rval;
56
57 rval = dirname(path);
58 if (rval == NULL)
59 tst_brkm(TBROK|TERRNO, cleanup_fn, "dirname failed at %s:%d",
60 file, lineno);
61
62 return (rval);
63}
64
65int
66safe_open(const char *file, const int lineno, void (*cleanup_fn)(void),
67 const char *pathname, int oflags, ...)
68{
69 va_list ap;
70 int rval;
71 mode_t mode;
72
73 va_start(ap, oflags);
74 mode = va_arg(ap, mode_t);
75 va_end(ap);
76
77 rval = open(pathname, oflags, mode);
78 if (rval == -1)
79 tst_brkm(TBROK|TERRNO, cleanup_fn, "open failed at %s:%d",
80 file, lineno);
81
82 return (rval);
83}
84
85int
86safe_pipe(const char *file, const int lineno, void (*cleanup_fn)(void),
87 int fildes[2])
88{
89 int rval;
90
91 rval = pipe(fildes);
92 if (rval == -1)
93 tst_brkm(TBROK|TERRNO, cleanup_fn, "pipe failed at %s:%d",
94 file, lineno);
95
96 return (rval);
97}
98
99ssize_t
100safe_read(const char *file, const int lineno, void (*cleanup_fn)(void),
101 char len_strict, int fildes, void *buf, size_t nbyte)
102{
103 ssize_t rval;
104
105 rval = read(fildes, buf, nbyte);
106 if ((len_strict == 0 && rval == -1) || rval != nbyte)
107 tst_brkm(TBROK|TERRNO, cleanup_fn, "read failed at %s:%d",
108 file, lineno);
109
110 return (rval);
111}
112
113int
114safe_unlink(const char *file, const int lineno, void (*cleanup_fn)(void),
115 const char *pathname)
116{
117 int rval;
118
119 rval = unlink(pathname);
120 if (rval == -1)
121 tst_brkm(TBROK|TERRNO, cleanup_fn, "unlink failed at %s:%d",
122 file, lineno);
123
124 return (rval);
125}
126
127ssize_t
128safe_write(const char *file, const int lineno, void (cleanup_fn)(void),
129 char len_strict, int fildes, const void *buf, size_t nbyte)
130{
131 ssize_t rval;
132
133 rval = write(fildes, buf, nbyte);
134 if ((len_strict == 0 && rval == -1) || rval != nbyte)
135 tst_brkm(TBROK|TERRNO, cleanup_fn, "write failed at %s:%d",
136 file, lineno);
137
138 return (rval);
139}