Deleted Added
full compact
streams.c (65314) streams.c (71448)
1/*
2 * Copyright (c) 1998 Mark Newton
3 * Copyright (c) 1994 Christos Zoulas
4 * Copyright (c) 1997 Todd Vierling
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 16 unchanged lines hidden (view full) ---

25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Stolen from NetBSD /sys/compat/svr4/svr4_net.c. Pseudo-device driver
30 * skeleton produced from /usr/share/examples/drivers/make_pseudo_driver.sh
31 * in 3.0-980524-SNAP then hacked a bit (but probably not enough :-).
32 *
1/*
2 * Copyright (c) 1998 Mark Newton
3 * Copyright (c) 1994 Christos Zoulas
4 * Copyright (c) 1997 Todd Vierling
5 * All rights reserved.
6 *
7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions

--- 16 unchanged lines hidden (view full) ---

25 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
26 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
27 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 *
29 * Stolen from NetBSD /sys/compat/svr4/svr4_net.c. Pseudo-device driver
30 * skeleton produced from /usr/share/examples/drivers/make_pseudo_driver.sh
31 * in 3.0-980524-SNAP then hacked a bit (but probably not enough :-).
32 *
33 * $FreeBSD: head/sys/dev/streams/streams.c 65314 2000-09-01 08:47:14Z obrien $
33 * $FreeBSD: head/sys/dev/streams/streams.c 71448 2001-01-23 21:06:30Z jhb $
34 */
35
36#include <sys/param.h>
37#include <sys/systm.h>
38#include <sys/kernel.h> /* SYSINIT stuff */
39#include <sys/conf.h> /* cdevsw stuff */
40#include <sys/malloc.h> /* malloc region definitions */
41#include <sys/file.h>

--- 160 unchanged lines hidden (view full) ---

202{
203 int type, protocol;
204 int fd;
205 struct file *fp;
206 struct socket *so;
207 int error;
208 int family;
209
34 */
35
36#include <sys/param.h>
37#include <sys/systm.h>
38#include <sys/kernel.h> /* SYSINIT stuff */
39#include <sys/conf.h> /* cdevsw stuff */
40#include <sys/malloc.h> /* malloc region definitions */
41#include <sys/file.h>

--- 160 unchanged lines hidden (view full) ---

202{
203 int type, protocol;
204 int fd;
205 struct file *fp;
206 struct socket *so;
207 int error;
208 int family;
209
210 if (p->p_dupfd >= 0)
210 PROC_LOCK(p);
211 if (p->p_dupfd >= 0) {
212 PROC_UNLOCK(p);
211 return ENODEV;
213 return ENODEV;
214 }
215 PROC_UNLOCK(p);
212
213 switch (minor(dev)) {
214 case dev_udp:
215 family = AF_INET;
216 type = SOCK_DGRAM;
217 protocol = IPPROTO_UDP;
218 break;
219

--- 46 unchanged lines hidden (view full) ---

266 }
267
268 fp->f_data = (caddr_t)so;
269 fp->f_flag = FREAD|FWRITE;
270 fp->f_ops = &svr4_netops;
271 fp->f_type = DTYPE_SOCKET;
272
273 (void)svr4_stream_get(fp);
216
217 switch (minor(dev)) {
218 case dev_udp:
219 family = AF_INET;
220 type = SOCK_DGRAM;
221 protocol = IPPROTO_UDP;
222 break;
223

--- 46 unchanged lines hidden (view full) ---

270 }
271
272 fp->f_data = (caddr_t)so;
273 fp->f_flag = FREAD|FWRITE;
274 fp->f_ops = &svr4_netops;
275 fp->f_type = DTYPE_SOCKET;
276
277 (void)svr4_stream_get(fp);
278 PROC_LOCK(p);
274 p->p_dupfd = fd;
279 p->p_dupfd = fd;
280 PROC_UNLOCK(p);
275 return ENXIO;
276}
277
278static int
279svr4_ptm_alloc(p)
280 struct proc *p;
281{
282 /*

--- 30 unchanged lines hidden (view full) ---

313 if ((error = copyout(ptyname, path, sizeof(ptyname))) != 0)
314 return error;
315
316 switch (error = open(p, &oa)) {
317 case ENOENT:
318 case ENXIO:
319 return error;
320 case 0:
281 return ENXIO;
282}
283
284static int
285svr4_ptm_alloc(p)
286 struct proc *p;
287{
288 /*

--- 30 unchanged lines hidden (view full) ---

319 if ((error = copyout(ptyname, path, sizeof(ptyname))) != 0)
320 return error;
321
322 switch (error = open(p, &oa)) {
323 case ENOENT:
324 case ENXIO:
325 return error;
326 case 0:
327 PROC_LOCK(p);
321 p->p_dupfd = p->p_retval[0];
328 p->p_dupfd = p->p_retval[0];
329 PROC_UNLOCK(p);
322 return ENXIO;
323 default:
324 if (ttynumbers[++n] == '\0') {
325 if (ttyletters[++l] == '\0')
326 break;
327 n = 0;
328 }
329 }

--- 32 unchanged lines hidden (view full) ---

362void
363svr4_delete_socket(p, fp)
364 struct proc *p;
365 struct file *fp;
366{
367 struct svr4_sockcache_entry *e;
368 void *cookie = ((struct socket *) fp->f_data)->so_emuldata;
369
330 return ENXIO;
331 default:
332 if (ttynumbers[++n] == '\0') {
333 if (ttyletters[++l] == '\0')
334 break;
335 n = 0;
336 }
337 }

--- 32 unchanged lines hidden (view full) ---

370void
371svr4_delete_socket(p, fp)
372 struct proc *p;
373 struct file *fp;
374{
375 struct svr4_sockcache_entry *e;
376 void *cookie = ((struct socket *) fp->f_data)->so_emuldata;
377
370 if (!svr4_str_initialized) {
371 TAILQ_INIT(&svr4_head);
372 svr4_str_initialized = 1;
378 while (svr4_str_initialized != 2) {
379 if (atomic_cmpset_acq_int(&svr4_str_initialized, 0, 1)) {
380 TAILQ_INIT(&svr4_head);
381 atomic_store_rel_int(&svr4_str_initialized, 2);
382 }
373 return;
374 }
375
383 return;
384 }
385
376 for (e = svr4_head.tqh_first; e != NULL; e = e->entries.tqe_next)
386 TAILQ_FOREACH(e, &svr4_head, entries)
377 if (e->p == p && e->cookie == cookie) {
378 TAILQ_REMOVE(&svr4_head, e, entries);
379 DPRINTF(("svr4_delete_socket: %s [%p,%d,%d]\n",
380 e->sock.sun_path, p, e->dev, e->ino));
381 free(e, M_TEMP);
382 return;
383 }
384}

--- 13 unchanged lines hidden ---
387 if (e->p == p && e->cookie == cookie) {
388 TAILQ_REMOVE(&svr4_head, e, entries);
389 DPRINTF(("svr4_delete_socket: %s [%p,%d,%d]\n",
390 e->sock.sun_path, p, e->dev, e->ino));
391 free(e, M_TEMP);
392 return;
393 }
394}

--- 13 unchanged lines hidden ---