root/lm-sensors/trunk/lib/general.h

Revision 2345, 1.8 kB (checked in by mmh, 5 years ago)

Patch by Philipp Thomas <pth@suse.de>:

Current gcc versions warn when type punning is used, as this breaks the
strict aliasing analysis gcc 3.3 does by default. When checking the causes
for these warnings I discovered that sensors_malloc_array,
sensors_free_array, sensors_add_array_el and sensors_add_array_els in
lib/general.c all take a 'void **' for the list. This is plain wrong as
the C standard only allow 'char *' and 'void *' to alias any other type, so
if these functions should take a generic pointer, it *must* be a 'void *'
that's internally cast to a 'void **'.

The attached patch does this and adapts all places where these functions are
called. Note that when done correctly, no cast what-so-ever in the calling
code is needed.

The patch is against current lm_sensors2 cvs version.

  • Property svn:eol-style set to native
  • Property svn:keywords set to Author Date Id Revision
Line 
1 /*
2     general.h - Part of libsensors, a Linux library for reading sensor data.
3     Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18 */
19
20 #ifndef LIB_SENSORS_GENERAL
21 #define LIB_SENSORS_GENERAL
22
23 /* These are general purpose functions. They allow you to use variable-
24    length arrays, which are extended automatically. A distinction is
25    made between the current number of elements and the maximum number.
26    You can only add elements at the end. Primitive, but very useful
27    for internal use. */
28 extern void sensors_malloc_array(void *list, int *num_el, int *max_el,
29                                  int el_size);
30 extern void sensors_free_array(void *list, int *num_el, int *max_el);
31 extern void sensors_add_array_el(const void *el, void *list, int *num_el,
32                                  int *max_el, int el_size);
33 extern void sensors_add_array_els(const void *els, int nr_els, void *list,
34                                   int *num_el, int *max_el, int el_size);
35
36 /* Strip a string of all terminating spaces */
37 extern void sensors_strip_of_spaces(char *name);
38
39 #endif /* LIB_SENSORS_GENERAL */
Note: See TracBrowser for help on using the browser.