10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 4. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 */
30
31
32 #define WR(p, size) do { \
33 if (write(STDOUT_FILENO, p, size) != (ssize_t)size) \
34 oerr(); \
35 } while (0)
36
37 #define TAILMAPLEN (4<<20)
38
39 struct mapinfo {
40 off_t mapoff;
41 off_t maxoff;
42 size_t maplen;
43 char *start;
44 int fd;
45 };
46
47 struct file_info {
48 FILE *fp;
49 char *file_name;
50 struct stat st;
51 };
52
53 typedef struct file_info file_info_t;
54
55 enum STYLE { NOTSET = 0, FBYTES, FLINES, RBYTES, RLINES, REVERSE };
56
57 void follow(file_info_t *, enum STYLE, off_t);
58 void forward(FILE *, const char *, enum STYLE, off_t, struct stat *);
59 void reverse(FILE *, const char *, enum STYLE, off_t, struct stat *);
60
61 int bytes(FILE *, const char *, off_t);
62 int lines(FILE *, const char *, off_t);
63
64 void ierr(const char *);
65 void oerr(void);
66 int mapprint(struct mapinfo *, off_t, off_t);
67 int maparound(struct mapinfo *, off_t);
68
69 extern int Fflag, fflag, qflag, rflag, rval, no_files;
|
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 * 4. Neither the name of the University nor the names of its contributors
14 * may be used to endorse or promote products derived from this software
15 * without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
18 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
19 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
20 * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
21 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
24 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
25 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
26 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
27 * SUCH DAMAGE.
28 *
29 */
30 /*
31 * Copyright (c) 2013, Joyent, Inc. All Rights Reserved.
32 */
33
34
35 #ifndef EXTERN_H
36 #define EXTERN_H
37
38 #include <sys/types.h>
39 #include <sys/stat.h>
40 #include <port.h>
41
42
43 #define WR(p, size) do { \
44 if (write(STDOUT_FILENO, p, size) != (ssize_t)size) \
45 oerr(); \
46 } while (0)
47
48 #define TAILMAPLEN (4<<20)
49
50 struct mapinfo {
51 off_t mapoff;
52 off_t maxoff;
53 size_t maplen;
54 char *start;
55 int fd;
56 };
57
58 struct file_info {
59 FILE *fp;
60 char *file_name;
61 struct stat st;
62 file_obj_t fobj;
63 };
64
65 typedef struct file_info file_info_t;
66
67 enum STYLE { NOTSET = 0, FBYTES, FLINES, RBYTES, RLINES, REVERSE };
68
69 void follow(file_info_t *, enum STYLE, off_t);
70 void forward(FILE *, const char *, enum STYLE, off_t, struct stat *);
71 void reverse(FILE *, const char *, enum STYLE, off_t, struct stat *);
72
73 int bytes(FILE *, const char *, off_t);
74 int lines(FILE *, const char *, off_t);
75
76 void ierr(const char *);
77 void oerr(void);
78 int mapprint(struct mapinfo *, off_t, off_t);
79 int maparound(struct mapinfo *, off_t);
80
81 extern int Fflag, fflag, qflag, rflag, rval, no_files;
82
83 #endif /* EXTERN_H */
|