~mmach/netext73/lm-sensors

« back to all changes in this revision

Viewing changes to lib/general.c

  • Committer: mmach
  • Date: 2020-02-05 20:28:34 UTC
  • Revision ID: netbit73@gmail.com-20200205202834-zc3sla47j9e700w5
3.6

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    general.c - Part of libsensors, a Linux library for reading sensor data.
 
3
    Copyright (c) 1998, 1999  Frodo Looijaard <frodol@dds.nl>
 
4
 
 
5
    This library is free software; you can redistribute it and/or
 
6
    modify it under the terms of the GNU Lesser General Public
 
7
    License as published by the Free Software Foundation; either
 
8
    version 2.1 of the License, or (at your option) any later version.
 
9
 
 
10
    This library 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 Lesser 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., 51 Franklin Street, Fifth Floor, Boston,
 
18
    MA 02110-1301 USA.
 
19
*/
 
20
 
 
21
#include "error.h"
 
22
#include "general.h"
 
23
#include <errno.h>
 
24
#include <stdio.h>
 
25
#include <string.h>
 
26
#include <stdlib.h>
 
27
 
 
28
 
 
29
#define A_BUNCH 16
 
30
 
 
31
void sensors_malloc_array(void *list, int *num_el, int *max_el, int el_size)
 
32
{
 
33
        void **my_list = (void **)list;
 
34
 
 
35
        *my_list = malloc(el_size*A_BUNCH);
 
36
        if (! *my_list)
 
37
                sensors_fatal_error(__func__, "Allocating new elements");
 
38
        *max_el = A_BUNCH;
 
39
        *num_el = 0;
 
40
}
 
41
 
 
42
void sensors_free_array(void *list, int *num_el, int *max_el)
 
43
{
 
44
        void **my_list = (void **)list;
 
45
 
 
46
        free(*my_list);
 
47
        *my_list = NULL;
 
48
        *num_el = 0;
 
49
        *max_el = 0;
 
50
}
 
51
 
 
52
void sensors_add_array_el(const void *el, void *list, int *num_el,
 
53
                          int *max_el, int el_size)
 
54
{
 
55
        int new_max_el;
 
56
        void **my_list = (void *)list;
 
57
        if (*num_el + 1 > *max_el) {
 
58
                new_max_el = *max_el + A_BUNCH;
 
59
                *my_list = realloc(*my_list, new_max_el * el_size);
 
60
                if (! *my_list)
 
61
                        sensors_fatal_error(__func__,
 
62
                                            "Allocating new elements");
 
63
                *max_el = new_max_el;
 
64
        }
 
65
        memcpy(((char *) *my_list) + *num_el * el_size, el, el_size);
 
66
        (*num_el) ++;
 
67
}
 
68
 
 
69
void sensors_add_array_els(const void *els, int nr_els, void *list,
 
70
                           int *num_el, int *max_el, int el_size)
 
71
{
 
72
        int new_max_el;
 
73
        void **my_list = (void *)list;
 
74
        if (*num_el + nr_els > *max_el) {
 
75
                new_max_el = (*max_el + nr_els + A_BUNCH);
 
76
                new_max_el -= new_max_el % A_BUNCH;
 
77
                *my_list = realloc(*my_list, new_max_el * el_size);
 
78
                if (! *my_list)
 
79
                        sensors_fatal_error(__func__,
 
80
                                            "Allocating new elements");
 
81
                *max_el = new_max_el;
 
82
        }
 
83
        memcpy(((char *)*my_list) + *num_el * el_size, els, el_size * nr_els);
 
84
        *num_el += nr_els;
 
85
}