Annotation of src/usr.bin/ssh/misc.c, Revision 1.4.2.1
1.4.2.1 ! jason 1: /* $OpenBSD: misc.c,v 1.1 2001/01/21 19:05:52 markus Exp $ */
1.1 markus 2:
3: /*
4: * Copyright (c) 2000 Markus Friedl. All rights reserved.
5: *
6: * Redistribution and use in source and binary forms, with or without
7: * modification, are permitted provided that the following conditions
8: * are met:
9: * 1. Redistributions of source code must retain the above copyright
10: * notice, this list of conditions and the following disclaimer.
11: * 2. Redistributions in binary form must reproduce the above copyright
12: * notice, this list of conditions and the following disclaimer in the
13: * documentation and/or other materials provided with the distribution.
14: *
15: * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
16: * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
17: * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
18: * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
19: * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
20: * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
21: * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
22: * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23: * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
24: * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25: */
26:
27: #include "includes.h"
1.4.2.1 ! jason 28: RCSID("$OpenBSD: misc.c,v 1.1 2001/01/21 19:05:52 markus Exp $");
1.1 markus 29:
30: #include "misc.h"
31: #include "log.h"
32:
33: char *
34: chop(char *s)
35: {
36: char *t = s;
37: while (*t) {
38: if(*t == '\n' || *t == '\r') {
39: *t = '\0';
40: return s;
41: }
42: t++;
43: }
44: return s;
45:
46: }
47:
48: void
49: set_nonblock(int fd)
50: {
51: int val;
52: val = fcntl(fd, F_GETFL, 0);
53: if (val < 0) {
54: error("fcntl(%d, F_GETFL, 0): %s", fd, strerror(errno));
55: return;
56: }
57: if (val & O_NONBLOCK) {
58: debug("fd %d IS O_NONBLOCK", fd);
59: return;
60: }
61: debug("fd %d setting O_NONBLOCK", fd);
62: val |= O_NONBLOCK;
63: if (fcntl(fd, F_SETFL, val) == -1)
64: if (errno != ENODEV)
65: error("fcntl(%d, F_SETFL, O_NONBLOCK): %s",
66: fd, strerror(errno));
67: }
68:
69: /* Characters considered whitespace in strsep calls. */
70: #define WHITESPACE " \t\r\n"
71:
72: char *
73: strdelim(char **s)
74: {
75: char *old;
76: int wspace = 0;
77:
78: if (*s == NULL)
79: return NULL;
80:
81: old = *s;
82:
83: *s = strpbrk(*s, WHITESPACE "=");
84: if (*s == NULL)
85: return (old);
86:
87: /* Allow only one '=' to be skipped */
88: if (*s[0] == '=')
89: wspace = 1;
90: *s[0] = '\0';
91:
92: *s += strspn(*s + 1, WHITESPACE) + 1;
93: if (*s[0] == '=' && !wspace)
94: *s += strspn(*s + 1, WHITESPACE) + 1;
95:
96: return (old);
97: }