annotate lib/fd-hook.c @ 17463:203c036eb0c6

bootstrap: support checksum utils without a --status option * build-aux/bootstrap: Only look for sha1sum if updating po files. Add sha1 to the list of supported checksum utils since it's now supported through adjustments below. (update_po_files): Remove the use of --status in a way that will suppress all error messages, but since this is only used to minimize updates, it shouldn't cause an issue. Exit early if there is a problem updating the po file checksums. (find_tool): Remove the check for --version support as this is optional as per commit 86186b17. Don't even check for the presence of the command as if that is needed, it's supported through configuring prerequisites in bootstrap.conf. Prompt that when a tool isn't found, one can define an environment variable to add to the hardcoded search list.
author Pádraig Brady <P@draigBrady.com>
date Thu, 08 Aug 2013 11:08:49 +0100
parents e542fd46ad6f
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
14595
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Hook for making making file descriptor functions close(), ioctl() extensible.
17249
e542fd46ad6f maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents: 16201
diff changeset
2 Copyright (C) 2009-2013 Free Software Foundation, Inc.
14595
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3 Written by Bruno Haible <bruno@clisp.org>, 2009.
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
4
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 This program is free software: you can redistribute it and/or modify it
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
6 under the terms of the GNU Lesser General Public License as published
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
7 by the Free Software Foundation; either version 3 of the License, or
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8 (at your option) any later version.
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 This program is distributed in the hope that it will be useful,
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13 Lesser General Public License for more details.
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
15 You should have received a copy of the GNU Lesser General Public License
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16 along with this program. If not, see <http://www.gnu.org/licenses/>. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18 #include <config.h>
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20 /* Specification. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include "fd-hook.h"
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
23 #include <stdlib.h>
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 /* Currently, this entire code is only needed for the handling of sockets
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 on native Windows platforms. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27 #if WINDOWS_SOCKETS
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
28
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29 /* The first and last link in the doubly linked list.
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 Initially the list is empty. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31 static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL };
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
32
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
33 int
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
34 execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary,
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
35 int fd)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
36 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
37 if (remaining_list == &anchor)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
38 /* End of list reached. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
39 return primary (fd);
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
40 else
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
41 return remaining_list->private_close_fn (remaining_list->private_next,
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 primary, fd);
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
45 int
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
46 execute_all_close_hooks (gl_close_fn primary, int fd)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
47 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
48 return execute_close_hooks (anchor.private_next, primary, fd);
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
49 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
50
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
51 int
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
52 execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary,
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 int fd, int request, void *arg)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 if (remaining_list == &anchor)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 /* End of list reached. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 return primary (fd, request, arg);
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 else
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 return remaining_list->private_ioctl_fn (remaining_list->private_next,
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 primary, fd, request, arg);
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 int
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 execute_all_ioctl_hooks (gl_ioctl_fn primary,
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 int fd, int request, void *arg)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67 return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg);
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 void
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 if (close_hook == NULL)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 close_hook = execute_close_hooks;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75 if (ioctl_hook == NULL)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 ioctl_hook = execute_ioctl_hooks;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 if (link->private_next == NULL && link->private_prev == NULL)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80 /* Add the link to the doubly linked list. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81 link->private_next = anchor.private_next;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
82 link->private_prev = &anchor;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
83 link->private_close_fn = close_hook;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
84 link->private_ioctl_fn = ioctl_hook;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
85 anchor.private_next->private_prev = link;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
86 anchor.private_next = link;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
87 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
88 else
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
89 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
90 /* The link is already in use. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
91 if (link->private_close_fn != close_hook
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
92 || link->private_ioctl_fn != ioctl_hook)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
93 abort ();
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
94 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
95 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
96
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
97 void
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
98 unregister_fd_hook (struct fd_hook *link)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
99 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
100 struct fd_hook *next = link->private_next;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
101 struct fd_hook *prev = link->private_prev;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
102
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
103 if (next != NULL && prev != NULL)
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
104 {
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
105 /* The link is in use. Remove it from the doubly linked list. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
106 prev->private_next = next;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
107 next->private_prev = prev;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
108 /* Clear the link, to mark it unused. */
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
109 link->private_next = NULL;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
110 link->private_prev = NULL;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
111 link->private_close_fn = NULL;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
112 link->private_ioctl_fn = NULL;
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
113 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
114 }
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
115
32d72ffe29dd ioctl: Remove link dependency on native Windows.
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
116 #endif