ViewVC Help
View File | Revision Log | Show Annotations | Revision Graph | Root Listing
root/i-scream/projects/libstatgrab/src/libstatgrab/tools.c
(Generate patch)

Comparing projects/libstatgrab/src/libstatgrab/tools.c (file contents):
Revision 1.19 by pajs, Fri Jan 9 16:19:58 2004 UTC vs.
Revision 1.27 by pajs, Tue Feb 10 16:23:07 2004 UTC

# Line 1 | Line 1
1 < /*
1 > /*
2   * i-scream central monitoring system
3   * http://www.i-scream.org
4 < * Copyright (C) 2000-2003 i-scream
4 > * Copyright (C) 2000-2004 i-scream
5   *
6 < * This program is free software; you can redistribute it and/or
7 < * modify it under the terms of the GNU General Public License
8 < * as published by the Free Software Foundation; either version 2
9 < * of the License, or (at your option) any later version.
6 > * This library is free software; you can redistribute it and/or
7 > * modify it under the terms of the GNU Lesser General Public
8 > * License as published by the Free Software Foundation; either
9 > * version 2.1 of the License, or (at your option) any later version.
10   *
11 < * This program is distributed in the hope that it will be useful,
11 > * This library is distributed in the hope that it will be useful,
12   * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 < * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14 < * GNU General Public License for more details.
13 > * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
14 > * Lesser General Public License for more details.
15   *
16 < * You should have received a copy of the GNU General Public License
17 < * along with this program; if not, write to the Free Software
18 < * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
16 > * You should have received a copy of the GNU Lesser General Public
17 > * License along with this library; if not, write to the Free Software
18 > * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
19 > * 02111-1307 USA
20 > *
21 > * $Id$
22   */
23  
24   #ifdef HAVE_CONFIG_H
# Line 39 | Line 42
42   #include "tools.h"
43  
44   #ifdef SOLARIS
45 + #ifdef HAVE_LIBDEVINFO_H
46   #include <libdevinfo.h>
47 + #endif
48   #include <kstat.h>
49   #include <unistd.h>
50   #include <ctype.h>
# Line 51 | Line 56
56   #include <dirent.h>
57   #endif
58  
59 < #ifdef SOLARIS
59 > #if defined(SOLARIS) && defined(HAVE_LIBDEVINFO_H)
60   struct map{
61          char *bsd;
62          char *svr;
# Line 61 | Line 66 | struct map{
66   typedef struct map mapping_t;
67  
68   static mapping_t *mapping = NULL;
69 + #endif
70  
71 + #ifdef SOLARIS
72   char *get_svr_from_bsd(char *bsd){
73 + #ifdef HAVE_LIBDEVINFO_H
74          mapping_t *map_ptr;
75          for(map_ptr = mapping; map_ptr != NULL; map_ptr = map_ptr->next)
76                  if(!strcmp(map_ptr->bsd, bsd)) return map_ptr->svr;
77 <
77 > #endif
78          return bsd;
79   }
80 + #endif
81  
82 + #if defined(SOLARIS) && defined(HAVE_LIBDEVINFO_H)
83   void add_mapping(char *bsd, char *svr){
84          mapping_t *map_ptr;
85          mapping_t *map_end_ptr;
# Line 187 | Line 197 | int get_alias(char *alias){
197          return 0;
198   }
199  
200 +
201 + #define BIG_ENOUGH 512
202   int build_mapping(){
203 <        char device_name[512];
203 >        char device_name[BIG_ENOUGH];
204          int x;
205          kstat_ctl_t *kc;
206          kstat_t *ksp;
207          kstat_io_t kios;
208  
209 +        char driver_list[BIG_ENOUGH][BIG_ENOUGH];
210 +        int list_entries = 0;
211 +        int found;
212 +
213          if ((kc = kstat_open()) == NULL) {
214                  return;
215          }
# Line 210 | Line 226 | int build_mapping(){
226                          }
227                          if(x == sizeof device_name) x--;
228                          device_name[x] = '\0';
229 <                        if((get_alias(device_name)) != 0){
230 <                                return 1;
229 >
230 >                        /* Check if we've not already looked it up */
231 >                        found = 0;
232 >                        for(x=0;x<list_entries;x++){
233 >                                if (x>=BIG_ENOUGH){
234 >                                        /* We've got bigger than we thought was massive */
235 >                                        /* If we hit this.. Make big enough bigger */
236 >                                        return 1;
237 >                                }
238 >                                if( !strncmp(driver_list[x], device_name, BIG_ENOUGH)){
239 >                                        found = 1;
240 >                                        break;
241 >                                }
242                          }
243 +
244 +                        if(!found){
245 +                                if((get_alias(device_name)) != 0){
246 +                                        return 1;
247 +                                }
248 +                                strncpy(driver_list[x], device_name, BIG_ENOUGH);
249 +                                list_entries++;
250 +                        }
251                  }
252          }
253  
# Line 269 | Line 304 | static long long atoll(const char *s) {
304   #endif
305  
306   #ifndef HAVE_STRLCPY
307 < *      $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $     */
307 > /*      $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $     */
308  
309   /*
310   * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
# Line 437 | Line 472 | int statgrab_init(){
472          }
473   #endif
474   #ifdef SOLARIS
475 <        if((build_mapping()) != 0) return 1;
475 >        /* On solaris 7, this will fail if you are not root. But, everything
476 >         * will still work, just no disk mappings. So we will ignore the exit
477 >         * status of this, and carry on merrily.
478 >         */
479 > #ifdef HAVE_LIBDEVINFO_H
480 >        build_mapping();
481 > #endif
482   #endif
483          return 0;
484   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines