- adapt to coding style
[platform/upstream/libsolv.git] / src / util.c
1 /*
2  * Copyright (c) 2007, Novell Inc.
3  *
4  * This program is licensed under the BSD license, read LICENSE.BSD
5  * for further information
6  */
7
8 #include <stdio.h>
9 #include <stdlib.h>
10 #include <unistd.h>
11 #include <string.h>
12 #include <sys/time.h>
13
14 #include "util.h"
15
16 void
17 sat_oom(size_t num, size_t len)
18 {
19   if (num)
20     fprintf(stderr, "Out of memory allocating %zu*%zu bytes!\n", num, len);
21   else
22     fprintf(stderr, "Out of memory allocating %zu bytes!\n", len);
23   abort();
24   exit(1);
25 }
26
27 void *
28 sat_malloc(size_t len)
29 {
30   void *r = malloc(len ? len : 1);
31   if (!r)
32     sat_oom(0, len);
33   return r;
34 }
35
36 void *
37 sat_malloc2(size_t num, size_t len)
38 {
39   if (len && (num * len) / len != num)
40     sat_oom(num, len);
41   return sat_malloc(num * len);
42 }
43
44 void *
45 sat_realloc(void *old, size_t len)
46 {
47   if (old == 0)
48     old = malloc(len ? len : 1);
49   else
50     old = realloc(old, len ? len : 1);
51   if (!old)
52     sat_oom(0, len);
53   return old;
54 }
55
56 void *
57 sat_realloc2(void *old, size_t num, size_t len)
58 {
59   if (len && (num * len) / len != num)
60     sat_oom(num, len);
61   return sat_realloc(old, num * len);
62 }
63
64 void *
65 sat_calloc(size_t num, size_t len)
66 {
67   void *r;
68   if (num == 0 || len == 0)
69     r = malloc(1);
70   else
71     r = calloc(num, len);
72   if (!r)
73     sat_oom(num, len);
74   return r;
75 }
76
77 void *
78 sat_free(void *mem)
79 {
80   if (mem)
81     free(mem);
82   return 0;
83 }
84
85 unsigned int
86 sat_timems(unsigned int subtract)
87 {
88   struct timeval tv;
89   unsigned int r;
90
91   if (gettimeofday(&tv, 0))
92     return 0;
93   r = (((unsigned int)tv.tv_sec >> 16) * 1000) << 16;
94   r += ((unsigned int)tv.tv_sec & 0xffff) * 1000;
95   r += (unsigned int)tv.tv_usec / 1000;
96   return r - subtract;
97 }
98