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.20 by pajs, Fri Jan 9 16:37:08 2004 UTC vs.
Revision 1.26 by pajs, Tue Feb 10 16:16:22 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 51 | Line 54
54   #include <dirent.h>
55   #endif
56  
57 < #ifdef SOLARIS
57 > #if defined(SOLARIS) && defined(HAVE_LIBDEVINFO_H)
58   struct map{
59          char *bsd;
60          char *svr;
# Line 61 | Line 64 | struct map{
64   typedef struct map mapping_t;
65  
66   static mapping_t *mapping = NULL;
67 + #endif
68  
69 + #ifdef SOLARIS
70   char *get_svr_from_bsd(char *bsd){
71 + #ifdef HAVE_LIBDEVINFO_H
72          mapping_t *map_ptr;
73          for(map_ptr = mapping; map_ptr != NULL; map_ptr = map_ptr->next)
74                  if(!strcmp(map_ptr->bsd, bsd)) return map_ptr->svr;
75 <
75 > #endif
76          return bsd;
77   }
78 + #endif
79  
80 + #if defined(SOLARIS) && defined(HAVE_LIBDEVINFO_H)
81   void add_mapping(char *bsd, char *svr){
82          mapping_t *map_ptr;
83          mapping_t *map_end_ptr;
# Line 187 | Line 195 | int get_alias(char *alias){
195          return 0;
196   }
197  
198 +
199 + #define BIG_ENOUGH 512
200   int build_mapping(){
201 <        char device_name[512];
201 >        char device_name[BIG_ENOUGH];
202          int x;
203          kstat_ctl_t *kc;
204          kstat_t *ksp;
205          kstat_io_t kios;
206  
207 +        char driver_list[BIG_ENOUGH][BIG_ENOUGH];
208 +        int list_entries = 0;
209 +        int found;
210 +
211          if ((kc = kstat_open()) == NULL) {
212                  return;
213          }
# Line 210 | Line 224 | int build_mapping(){
224                          }
225                          if(x == sizeof device_name) x--;
226                          device_name[x] = '\0';
227 <                        if((get_alias(device_name)) != 0){
228 <                                return 1;
227 >
228 >                        /* Check if we've not already looked it up */
229 >                        found = 0;
230 >                        for(x=0;x<list_entries;x++){
231 >                                if (x>=BIG_ENOUGH){
232 >                                        /* We've got bigger than we thought was massive */
233 >                                        /* If we hit this.. Make big enough bigger */
234 >                                        return 1;
235 >                                }
236 >                                if( !strncmp(driver_list[x], device_name, BIG_ENOUGH)){
237 >                                        found = 1;
238 >                                        break;
239 >                                }
240                          }
241 +
242 +                        if(!found){
243 +                                if((get_alias(device_name)) != 0){
244 +                                        return 1;
245 +                                }
246 +                                strncpy(driver_list[x], device_name, BIG_ENOUGH);
247 +                                list_entries++;
248 +                        }
249                  }
250          }
251  
# Line 269 | Line 302 | static long long atoll(const char *s) {
302   #endif
303  
304   #ifndef HAVE_STRLCPY
305 < *      $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $     */
305 > /*      $OpenBSD: strlcpy.c,v 1.8 2003/06/17 21:56:24 millert Exp $     */
306  
307   /*
308   * Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
# Line 441 | Line 474 | int statgrab_init(){
474           * will still work, just no disk mappings. So we will ignore the exit
475           * status of this, and carry on merrily.
476           */
477 + #ifdef HAVE_LIBDEVINFO_H
478          build_mapping();
479 + #endif
480   #endif
481          return 0;
482   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines