]> git.ipfire.org Git - thirdparty/squid.git/blame - src/fd.cc
more misc, massive cleanup
[thirdparty/squid.git] / src / fd.cc
CommitLineData
a7870688 1#include "squid.h"
2
3static void fdUpdateBiggest _PARAMS((int fd, unsigned int status));
4
5static void
6fdUpdateBiggest(int fd, unsigned int status)
7{
8 if (fd < Biggest_FD)
9 return;
10 if (fd >= Squid_MaxFD) {
11 debug_trap("Running out of file descriptors.\n");
12 return;
13 }
14 if (fd > Biggest_FD) {
15 if (status == FD_OPEN)
16 Biggest_FD = fd;
17 else
18 debug_trap("Biggest_FD inconsistency");
19 return;
20 }
21 /* if we are here, then fd == Biggest_FD */
22 if (status != FD_CLOSE) {
23 debug_trap("re-opening Biggest_FD?");
24 return;
25 }
26 while (fd_table[Biggest_FD].open != FD_OPEN)
27 Biggest_FD--;
28}
29
30void
4f92c80c 31fd_close(int fd)
a7870688 32{
33 FD_ENTRY *fde = &fd_table[fd];
2db609de 34 fdUpdateBiggest(fd, fde->open = FD_CLOSE);
a7870688 35 memset(fde, '\0', sizeof(FD_ENTRY));
36 fde->timeout = 0;
37}
38
39void
40fd_open(int fd, unsigned int type, const char *desc)
41{
42 FD_ENTRY *fde = &fd_table[fd];
43 fde->type = type;
44 fdUpdateBiggest(fd, fde->open = FD_OPEN);
45 if (desc)
4f92c80c 46 xstrncpy(fde->desc, desc, FD_DESC_SZ);
a7870688 47}
48
49void
50fd_note(int fd, const char *s)
51{
52 FD_ENTRY *fde = &fd_table[fd];
53 xstrncpy(fde->desc, s, FD_DESC_SZ);
54}
4f92c80c 55
56void
57fd_bytes(int fd, int len, unsigned int type)
58{
59 FD_ENTRY *fde = &fd_table[fd];
60 if (len < 0)
61 return;
62 if (type == FD_READ)
63 fde->bytes_read += len;
64 else if (type == FD_WRITE)
65 fde->bytes_written += len;
66 else
67 fatal_dump("fd_bytes: bad type");
68}
f17936ab 69
70void
71fdFreeMemory(void)
72{
73 safe_free(fd_table);
74}