annotate packages/net/snmp/lib/current/src/system.c @ 103:95f3e12a6327 ecos-sw-2000-06-23

Merge from eCos master repository on 2000-06-23-16:41:10-BST
author jlarmour
date Fri, 23 Jun 2000 17:06:31 +0000
parents
children e0c0827131d1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
103
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
1 //==========================================================================
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
2 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
3 // ./lib/current/src/system.c
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
4 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
5 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
6 //==========================================================================
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
7 //####COPYRIGHTBEGIN####
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
8 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
9 // -------------------------------------------
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
10 // The contents of this file are subject to the Red Hat eCos Public License
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
11 // Version 1.1 (the "License"); you may not use this file except in
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
12 // compliance with the License. You may obtain a copy of the License at
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
13 // http://www.redhat.com/
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
14 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
15 // Software distributed under the License is distributed on an "AS IS"
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
16 // basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See the
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
17 // License for the specific language governing rights and limitations under
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
18 // the License.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
19 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
20 // The Original Code is eCos - Embedded Configurable Operating System,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
21 // released September 30, 1998.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
22 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
23 // The Initial Developer of the Original Code is Red Hat.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
24 // Portions created by Red Hat are
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
25 // Copyright (C) 1998, 1999, 2000 Red Hat, Inc.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
26 // All Rights Reserved.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
27 // -------------------------------------------
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
28 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
29 //####COPYRIGHTEND####
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
30 //####UCDSNMPCOPYRIGHTBEGIN####
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
31 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
32 // -------------------------------------------
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
33 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
34 // Portions of this software may have been derived from the UCD-SNMP
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
35 // project, <http://ucd-snmp.ucdavis.edu/> from the University of
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
36 // California at Davis, which was originally based on the Carnegie Mellon
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
37 // University SNMP implementation. Portions of this software are therefore
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
38 // covered by the appropriate copyright disclaimers included herein.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
39 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
40 // The release used was version 4.1.2 of May 2000. "ucd-snmp-4.1.2"
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
41 // -------------------------------------------
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
42 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
43 //####UCDSNMPCOPYRIGHTEND####
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
44 //==========================================================================
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
45 //#####DESCRIPTIONBEGIN####
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
46 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
47 // Author(s): hmt
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
48 // Contributors: hmt
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
49 // Date: 2000-05-30
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
50 // Purpose: Port of UCD-SNMP distribution to eCos.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
51 // Description:
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
52 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
53 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
54 //####DESCRIPTIONEND####
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
55 //
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
56 //==========================================================================
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
57 /********************************************************************
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
58 Copyright 1989, 1991, 1992 by Carnegie Mellon University
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
59
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
60 Derivative Work -
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
61 Copyright 1996, 1998, 1999, 2000 The Regents of the University of California
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
62
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
63 All Rights Reserved
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
64
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
65 Permission to use, copy, modify and distribute this software and its
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
66 documentation for any purpose and without fee is hereby granted,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
67 provided that the above copyright notice appears in all copies and
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
68 that both that copyright notice and this permission notice appear in
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
69 supporting documentation, and that the name of CMU and The Regents of
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
70 the University of California not be used in advertising or publicity
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
71 pertaining to distribution of the software without specific written
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
72 permission.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
73
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
74 CMU AND THE REGENTS OF THE UNIVERSITY OF CALIFORNIA DISCLAIM ALL
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
75 WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
76 WARRANTIES OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL CMU OR
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
77 THE REGENTS OF THE UNIVERSITY OF CALIFORNIA BE LIABLE FOR ANY SPECIAL,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
78 INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
79 FROM THE LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
80 CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
81 CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
82 *********************************************************************/
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
83 /*
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
84 * system.c
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
85 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
86 /***********************************************************
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
87 Copyright 1992 by Carnegie Mellon University
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
88
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
89 All Rights Reserved
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
90
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
91 Permission to use, copy, modify, and distribute this software and its
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
92 documentation for any purpose and without fee is hereby granted,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
93 provided that the above copyright notice appear in all copies and that
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
94 both that copyright notice and this permission notice appear in
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
95 supporting documentation, and that the name of CMU not be
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
96 used in advertising or publicity pertaining to distribution of the
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
97 software without specific, written prior permission.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
98
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
99 CMU DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
100 ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO EVENT SHALL
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
101 CMU BE LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
102 ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
103 WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
104 ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
105 SOFTWARE.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
106 ******************************************************************/
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
107 /*
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
108 * System dependent routines go here
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
109 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
110 #include <config.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
111 #include <stdio.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
112 #include <ctype.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
113
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
114 #if HAVE_UNISTD_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
115 #include <unistd.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
116 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
117 #if HAVE_STDLIB_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
118 #include <stdlib.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
119 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
120
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
121 #if TIME_WITH_SYS_TIME
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
122 # ifdef WIN32
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
123 # include <sys/timeb.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
124 # else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
125 # include <sys/time.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
126 # endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
127 # include <time.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
128 #else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
129 # if HAVE_SYS_TIME_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
130 # include <sys/time.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
131 # else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
132 # include <time.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
133 # endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
134 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
135
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
136 #include <sys/types.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
137
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
138 #if HAVE_NETINET_IN_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
139 #include <netinet/in.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
140 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
141
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
142 #if HAVE_WINSOCK_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
143 #include <winsock.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
144 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
145 #if HAVE_SYS_SOCKET_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
146 #include <sys/socket.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
147 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
148 #if HAVE_NET_IF_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
149 #include <net/if.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
150 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
151
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
152 #if HAVE_SYS_SOCKIO_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
153 #include <sys/sockio.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
154 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
155
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
156 #if HAVE_SYS_IOCTL_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
157 #include <sys/ioctl.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
158 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
159
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
160 #ifdef HAVE_NLIST_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
161 #include <nlist.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
162 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
163
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
164 #if HAVE_SYS_FILE_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
165 #include <sys/file.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
166 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
167
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
168 #if HAVE_KSTAT_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
169 #include <kstat.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
170 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
171
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
172 #if HAVE_SYS_PARAM_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
173 #include <sys/param.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
174 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
175 #if HAVE_SYS_SYSCTL_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
176 #include <sys/sysctl.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
177 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
178
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
179 #if HAVE_STRING_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
180 #include <string.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
181 #else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
182 #include <strings.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
183 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
184
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
185 #if HAVE_DMALLOC_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
186 #include <dmalloc.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
187 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
188
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
189 #ifdef HAVE_SYS_STAT_H
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
190 #include <sys/stat.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
191 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
192
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
193 #include "asn1.h"
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
194 #include "snmp_api.h"
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
195 #include "tools.h"
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
196 #include "system.h"
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
197 #include "snmp_logging.h"
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
198
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
199 #define NUM_NETWORKS 32 /* max number of interfaces to check */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
200
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
201 #ifndef IFF_LOOPBACK
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
202 # define IFF_LOOPBACK 0
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
203 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
204
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
205 #define LOOPBACK 0x7f000001
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
206
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
207
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
208
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
209 /* ********************************************* */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
210 #ifdef WIN32
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
211 # define WIN32_LEAN_AND_MEAN
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
212 # define WIN32IO_IS_STDIO
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
213 # define PATHLEN 1024
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
214
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
215 # include <tchar.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
216 # include <windows.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
217
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
218
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
219 /* The idea here is to read all the directory names into a string table
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
220 * (separated by nulls) and when one of the other dir functions is called
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
221 * return the pointer to the current file name.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
222 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
223 DIR *
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
224 opendir(const char *filename)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
225 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
226 DIR *p;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
227 long len;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
228 long idx;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
229 char scannamespc[PATHLEN];
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
230 char *scanname = scannamespc;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
231 struct stat sbuf;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
232 WIN32_FIND_DATA FindData;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
233 HANDLE fh;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
234
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
235 /* check to see if filename is a directory */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
236 if (stat(filename, &sbuf) < 0 || sbuf.st_mode & S_IFDIR == 0) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
237 return NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
238 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
239
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
240 /* get the file system characteristics */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
241 /* if(GetFullPathName(filename, SNMP_MAXPATH, root, &dummy)) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
242 * if(dummy = strchr(root, '\\'))
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
243 * *++dummy = '\0';
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
244 * if(GetVolumeInformation(root, volname, SNMP_MAXPATH, &serial,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
245 * &maxname, &flags, 0, 0)) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
246 * downcase = !(flags & FS_CASE_IS_PRESERVED);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
247 * }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
248 * }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
249 * else {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
250 * downcase = TRUE;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
251 * }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
252 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
253
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
254 /* Create the search pattern */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
255 strcpy(scanname, filename);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
256
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
257 if(strchr("/\\", *(scanname + strlen(scanname) - 1)) == NULL)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
258 strcat(scanname, "/*");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
259 else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
260 strcat(scanname, "*");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
261
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
262 /* do the FindFirstFile call */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
263 fh = FindFirstFile(scanname, &FindData);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
264 if(fh == INVALID_HANDLE_VALUE) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
265 return NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
266 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
267
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
268 /* Get us a DIR structure */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
269 p = (DIR*)malloc(sizeof(DIR));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
270 /* Newz(1303, p, 1, DIR); */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
271 if(p == NULL)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
272 return NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
273
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
274 /* now allocate the first part of the string table for
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
275 * the filenames that we find.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
276 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
277 idx = strlen(FindData.cFileName)+1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
278 p->start = (char*)malloc(idx);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
279 /* New(1304, p->start, idx, char);*/
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
280 if(p->start == NULL) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
281 free(p);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
282 return NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
283 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
284 strcpy(p->start, FindData.cFileName);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
285 /* if(downcase)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
286 * strlwr(p->start);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
287 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
288 p->nfiles = 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
289
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
290 /* loop finding all the files that match the wildcard
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
291 * (which should be all of them in this directory!).
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
292 * the variable idx should point one past the null terminator
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
293 * of the previous string found.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
294 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
295 while (FindNextFile(fh, &FindData)) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
296 len = strlen(FindData.cFileName);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
297 /* bump the string table size by enough for the
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
298 * new name and it's null terminator
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
299 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
300 p->start = (char*)realloc((void*)p->start, idx+len+1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
301 /* Renew(p->start, idx+len+1, char);*/
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
302 if(p->start == NULL) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
303 free(p);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
304 return NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
305 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
306 strcpy(&p->start[idx], FindData.cFileName);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
307 /* if (downcase)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
308 * strlwr(&p->start[idx]);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
309 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
310 p->nfiles++;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
311 idx += len+1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
312 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
313 FindClose(fh);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
314 p->size = idx;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
315 p->curr = p->start;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
316 return p;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
317 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
318
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
319
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
320 /* Readdir just returns the current string pointer and bumps the
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
321 * string pointer to the nDllExport entry.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
322 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
323 struct direct *
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
324 readdir(DIR *dirp)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
325 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
326 int len;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
327 static int dummy = 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
328
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
329 if (dirp->curr) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
330 /* first set up the structure to return */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
331 len = strlen(dirp->curr);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
332 strcpy(dirp->dirstr.d_name, dirp->curr);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
333 dirp->dirstr.d_namlen = len;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
334
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
335 /* Fake an inode */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
336 dirp->dirstr.d_ino = dummy++;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
337
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
338 /* Now set up for the nDllExport call to readdir */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
339 dirp->curr += len + 1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
340 if (dirp->curr >= (dirp->start + dirp->size)) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
341 dirp->curr = NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
342 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
343
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
344 return &(dirp->dirstr);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
345 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
346 else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
347 return NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
348 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
349
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
350 /* free the memory allocated by opendir */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
351 int
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
352 closedir(DIR *dirp)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
353 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
354 free(dirp->start);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
355 free(dirp);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
356 return 1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
357 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
358
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
359 #ifndef HAVE_GETTIMEOFDAY
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
360
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
361 int gettimeofday(struct timeval *tv,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
362 struct timezone *tz)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
363 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
364 struct _timeb timebuffer;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
365
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
366 _ftime(&timebuffer);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
367 tv->tv_usec = timebuffer.millitm * 1000;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
368 tv->tv_sec = timebuffer.time;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
369 return(0);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
370 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
371 #endif /* !HAVE_GETTIMEOFDAY */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
372
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
373 in_addr_t get_myaddr(void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
374 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
375 char local_host[130];
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
376 int result;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
377 LPHOSTENT lpstHostent;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
378 SOCKADDR_IN in_addr, remote_in_addr;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
379 SOCKET hSock;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
380 int nAddrSize = sizeof(SOCKADDR);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
381
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
382 in_addr.sin_addr.s_addr = INADDR_ANY;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
383
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
384 result = gethostname(local_host, sizeof(local_host));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
385 if (result == 0)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
386 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
387 lpstHostent = gethostbyname((LPSTR)local_host);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
388 if (lpstHostent)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
389 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
390 in_addr.sin_addr.s_addr = *((u_long FAR *) (lpstHostent->h_addr));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
391 return((in_addr_t)in_addr.sin_addr.s_addr);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
392 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
393 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
394
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
395 /* if we are here, than we don't have host addr */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
396 hSock = socket(AF_INET, SOCK_DGRAM, 0);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
397 if (hSock != INVALID_SOCKET)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
398 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
399 /* connect to any port and address */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
400 remote_in_addr.sin_family = AF_INET;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
401 remote_in_addr.sin_port = htons(IPPORT_ECHO);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
402 remote_in_addr.sin_addr.s_addr = inet_addr("128.22.33.11");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
403 result=connect(hSock,(LPSOCKADDR)&remote_in_addr,sizeof(SOCKADDR));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
404 if (result != SOCKET_ERROR)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
405 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
406 /* get local ip address */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
407 getsockname(hSock, (LPSOCKADDR)&in_addr,(int FAR *)&nAddrSize);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
408 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
409 closesocket(hSock);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
410 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
411 return((in_addr_t)in_addr.sin_addr.s_addr);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
412 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
413
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
414 long get_uptime (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
415 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
416 return (0); /* not implemented */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
417 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
418
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
419 char *
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
420 winsock_startup (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
421 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
422 WORD VersionRequested;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
423 WSADATA stWSAData;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
424 int i;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
425 static char errmsg[100];
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
426
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
427 VersionRequested = MAKEWORD(1,1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
428 i = WSAStartup(VersionRequested, &stWSAData);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
429 if (i != 0)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
430 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
431 if (i == WSAVERNOTSUPPORTED)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
432 sprintf(errmsg,"Unable to init. socket lib, does not support 1.1");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
433 else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
434 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
435 sprintf(errmsg,"Socket Startup error %d", i);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
436 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
437 return(errmsg);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
438 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
439 return(NULL);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
440 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
441
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
442 void winsock_cleanup (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
443 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
444 WSACleanup();
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
445 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
446
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
447 #else /* ! WIN32 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
448 /*******************************************************************/
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
449
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
450 /*
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
451 * XXX What if we have multiple addresses?
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
452 * XXX Could it be computed once then cached?
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
453 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
454 in_addr_t get_myaddr (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
455 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
456 int sd;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
457 struct ifconf ifc;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
458 struct ifreq conf[NUM_NETWORKS], *ifrp, ifreq;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
459 struct sockaddr_in *in_addr;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
460 int count;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
461 int interfaces; /* number of interfaces returned by ioctl */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
462
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
463 if ((sd = socket(AF_INET, SOCK_DGRAM, 0)) < 0)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
464 return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
465 ifc.ifc_len = sizeof(conf);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
466 ifc.ifc_buf = (caddr_t)conf;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
467 if (ioctl(sd, SIOCGIFCONF, (char *)&ifc) < 0){
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
468 close(sd);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
469 return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
470 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
471 ifrp = ifc.ifc_req;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
472 interfaces = ifc.ifc_len / sizeof(struct ifreq);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
473 for(count = 0; count < interfaces; count++, ifrp++){
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
474 ifreq = *ifrp;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
475 if (ioctl(sd, SIOCGIFFLAGS, (char *)&ifreq) < 0)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
476 continue;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
477 in_addr = (struct sockaddr_in *)&ifrp->ifr_addr;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
478 if ((ifreq.ifr_flags & IFF_UP)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
479 #ifdef IFF_RUNNING
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
480 && (ifreq.ifr_flags & IFF_RUNNING)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
481 #endif /* IFF_RUNNING */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
482 && !(ifreq.ifr_flags & IFF_LOOPBACK)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
483 && in_addr->sin_addr.s_addr != LOOPBACK){
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
484 #ifdef SYS_IOCTL_H_HAS_SIOCGIFADDR
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
485 if (ioctl(sd, SIOCGIFADDR, (char *)&ifreq) < 0)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
486 continue;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
487 in_addr = (struct sockaddr_in *)&(ifreq.ifr_addr);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
488 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
489 close(sd);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
490 return in_addr->sin_addr.s_addr;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
491 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
492 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
493 close(sd);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
494 return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
495 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
496
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
497
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
498 #if !defined(solaris2) && !defined(linux) && !defined(cygwin) && !defined(__ECOS)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
499 /*
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
500 * Returns boottime in centiseconds(!).
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
501 * Caches this for future use.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
502 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
503 long get_boottime (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
504 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
505 static long boottime_csecs = 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
506 struct timeval boottime;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
507 #ifdef CAN_USE_SYSCTL
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
508 int mib[2];
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
509 size_t len;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
510 #else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
511 int kmem;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
512 static struct nlist nl[] = {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
513 #if !defined(hpux)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
514 { (char*)"_boottime" },
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
515 #else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
516 { (char*)"boottime" },
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
517 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
518 { (char*)"" }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
519 };
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
520 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
521
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
522
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
523 if ( boottime_csecs != 0 )
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
524 return( boottime_csecs );
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
525
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
526 #ifdef CAN_USE_SYSCTL
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
527 mib[0] = CTL_KERN;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
528 mib[1] = KERN_BOOTTIME;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
529
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
530 len = sizeof(boottime);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
531
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
532 sysctl(mib, 2, &boottime, &len, NULL, NULL);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
533 boottime_csecs = (boottime.tv_sec * 100) + (boottime.tv_usec / 10000);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
534 #else /* CAN_USE_SYSCTL */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
535 if ((kmem = open("/dev/kmem", 0)) < 0)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
536 return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
537 nlist(KERNEL_LOC, nl);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
538 if (nl[0].n_type == 0){
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
539 close(kmem);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
540 return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
541 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
542
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
543 lseek(kmem, (long)nl[0].n_value, L_SET);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
544 read(kmem, &boottime, sizeof(boottime));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
545 close(kmem);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
546 boottime_csecs = (boottime.tv_sec * 100) + (boottime.tv_usec / 10000);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
547 #endif /* CAN_USE_SYSCTL */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
548
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
549 return( boottime_csecs );
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
550 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
551 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
552
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
553 /*
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
554 * Returns uptime in centiseconds(!).
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
555 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
556 #if !defined(__ECOS)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
557 long get_uptime (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
558 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
559 #if !defined(solaris2) && !defined(linux) && !defined(cygwin)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
560 struct timeval now;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
561 long boottime_csecs, nowtime_csecs;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
562
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
563 boottime_csecs = get_boottime();
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
564 if (boottime_csecs == 0)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
565 return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
566 gettimeofday(&now,(struct timezone *)0);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
567 nowtime_csecs = (now.tv_sec * 100) + (now.tv_usec / 10000);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
568
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
569 return (nowtime_csecs - boottime_csecs);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
570 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
571
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
572 #ifdef solaris2
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
573 kstat_ctl_t *ksc = kstat_open();
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
574 kstat_t *ks;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
575 kid_t kid;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
576 kstat_named_t *named;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
577 u_long lbolt = 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
578
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
579 if (ksc) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
580 ks = kstat_lookup (ksc, "unix", -1, "system_misc");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
581 if (ks) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
582 kid = kstat_read (ksc, ks, NULL);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
583 if (kid != -1) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
584 named = kstat_data_lookup(ks, "lbolt");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
585 if (named) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
586 lbolt = named->value.ul;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
587 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
588 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
589 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
590 kstat_close(ksc);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
591 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
592 return lbolt;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
593 #endif /* solaris2 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
594
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
595 #ifdef linux
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
596 FILE *in = fopen ("/proc/uptime", "r");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
597 long uptim = 0, a, b;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
598 if (in) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
599 if (2 == fscanf (in, "%ld.%ld", &a, &b))
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
600 uptim = a * 100 + b;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
601 fclose (in);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
602 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
603 return uptim;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
604 #endif /* linux */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
605 return (0); /* not implemented */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
606 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
607 #endif // not __ECOS
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
608
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
609 #ifndef HAVE_GETTIMEOFDAY
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
610
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
611 int gettimeofday(struct timeval *tv,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
612 struct timezone *tz)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
613 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
614
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
615 tv->tv_usec = 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
616 tv->tv_sec = time(NULL);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
617 return(0);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
618 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
619 #endif /* !HAVE_GETTIMEOFDAY */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
620
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
621
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
622 #endif /* ! WIN32 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
623 /*******************************************************************/
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
624
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
625 #ifndef HAVE_STRNCASECMP
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
626
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
627 /* test for NULL pointers before and NULL characters after
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
628 * comparing possibly non-NULL strings.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
629 * WARNING: This function does NOT check for array overflow.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
630 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
631 int strncasecmp(const char *s1, const char *s2, size_t nch)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
632 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
633 size_t ii;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
634 int res = -1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
635
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
636 if (!s1) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
637 if (!s2) return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
638 return (-1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
639 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
640 if (!s2)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
641 return (1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
642
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
643 for (ii = 0; (ii < nch) && *s1 && *s2; ii++, s1++, s2++)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
644 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
645 res = (int) (tolower(*s1) - tolower(*s2));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
646 if (res != 0) break;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
647 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
648
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
649 if ( ii == nch ) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
650 s1--; s2--;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
651 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
652
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
653 if (! *s1) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
654 if (! *s2) return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
655 return (-1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
656 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
657 if (! *s2)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
658 return (1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
659
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
660 return (res);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
661 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
662
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
663 int strcasecmp(const char *s1, const char *s2)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
664 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
665 return strncasecmp(s1, s2, 1000000);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
666 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
667
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
668 #endif /* HAVE_STRNCASECMP */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
669
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
670
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
671 #ifndef HAVE_STRDUP
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
672 char *
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
673 strdup(const char *src)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
674 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
675 int len;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
676 char *dst;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
677
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
678 len = strlen(src) + 1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
679 if ((dst = (char *)malloc(len)) == NULL)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
680 return(NULL);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
681 strcpy(dst, src);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
682 return(dst);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
683 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
684 #endif /* HAVE_STRDUP */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
685
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
686 #ifndef HAVE_SETENV
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
687 int setenv(const char *name,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
688 const char *value,
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
689 int overwrite)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
690 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
691 char *cp;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
692 int ret;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
693
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
694 if (overwrite == 0) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
695 if (getenv(name)) return 0;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
696 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
697 cp = (char*)malloc(strlen(name)+strlen(value)+2);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
698 if (cp == NULL) return -1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
699 sprintf(cp, "%s=%s", name, value);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
700 ret = putenv(cp);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
701 return ret;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
702 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
703 #endif /* HAVE_SETENV */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
704
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
705 int
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
706 calculate_time_diff(struct timeval *now, struct timeval *then)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
707 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
708 struct timeval tmp, diff;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
709 memcpy(&tmp, now, sizeof(struct timeval));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
710 tmp.tv_sec--;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
711 tmp.tv_usec += 1000000L;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
712 diff.tv_sec = tmp.tv_sec - then->tv_sec;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
713 diff.tv_usec = tmp.tv_usec - then->tv_usec;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
714 if (diff.tv_usec > 1000000L){
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
715 diff.tv_usec -= 1000000L;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
716 diff.tv_sec++;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
717 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
718 return ((diff.tv_sec * 100) + (diff.tv_usec / 10000));
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
719 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
720
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
721 #ifndef HAVE_STRCASESTR
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
722 /*
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
723 * only glibc2 has this.
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
724 */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
725 char *strcasestr(const char *haystack, const char *needle)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
726 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
727 const char *cp1=haystack, *cp2=needle;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
728 const char *cx;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
729 int tstch1, tstch2;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
730
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
731 /* printf("looking for '%s' in '%s'\n", needle, haystack); */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
732 if (cp1 && cp2 && *cp1 && *cp2)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
733 for (cp1=haystack, cp2=needle; *cp1; ) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
734 cx = cp1; cp2 = needle;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
735 do {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
736 /* printf("T'%c' ", *cp1); */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
737 if (! *cp2) { /* found the needle */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
738 /* printf("\nfound '%s' in '%s'\n", needle, cx); */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
739 return (char *)cx;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
740 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
741 if (! *cp1)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
742 break;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
743
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
744 tstch1 = toupper(*cp1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
745 tstch2 = toupper(*cp2);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
746 if (tstch1 != tstch2)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
747 break;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
748 /* printf("M'%c' ", *cp1); */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
749 cp1++; cp2++;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
750 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
751 while (1);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
752 if (*cp1)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
753 cp1++;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
754 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
755 /* printf("\n"); */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
756 if (cp1 && *cp1)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
757 return (char *)cp1;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
758
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
759 return NULL;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
760 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
761 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
762
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
763 #if !defined(__ECOS)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
764 int
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
765 mkdirhier(const char *pathname, mode_t mode, int skiplast) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
766 struct stat sbuf;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
767 char *ourcopy = strdup(pathname);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
768 char *entry;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
769 char buf[SNMP_MAXPATH];
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
770
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
771 entry = strtok( ourcopy, "/" );
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
772
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
773 buf[0] = '\0';
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
774 /* check to see if filename is a directory */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
775 while ( entry ) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
776 strcat(buf,"/");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
777 strcat(buf, entry);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
778 entry = strtok( NULL, "/");
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
779 if (entry == NULL && skiplast)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
780 break;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
781 if (stat(buf, &sbuf) < 0) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
782 /* DNE, make it */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
783 snmp_log(LOG_INFO, "Creating directory: %s\n", buf);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
784 #ifdef WIN32
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
785 CreateDirectory(buf, NULL);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
786 #else
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
787 mkdir(buf, mode);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
788 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
789 } else {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
790 /* exists, is it a file? */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
791 if ((sbuf.st_mode & S_IFDIR) == 0) {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
792 /* ack! can't make a directory on top of a file */
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
793 free(ourcopy);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
794 return SNMPERR_GENERR;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
795 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
796 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
797 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
798 free(ourcopy);
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
799 return SNMPERR_SUCCESS;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
800 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
801 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
802
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
803
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
804 #ifdef __ECOS
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
805 #include <cyg/kernel/kapi.h>
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
806
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
807 long get_boottime (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
808 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
809 return 1l;
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
810 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
811
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
812 long get_uptime (void)
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
813 {
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
814 return cyg_current_time();
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
815 }
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
816
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
817 #endif
95f3e12a6327 Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
diff changeset
818