1 /*! 2 \file lib/db/dbmi_base/alloc.c 3 4 \brief DBMI Library (base) - allocate memory 5 6 (C) 1999-2009, 2011 by the GRASS Development Team 7 8 This program is free software under the GNU General Public License 9 (>=v2). Read the file COPYING that comes with GRASS for details. 10 11 \author Joel Jones (CERL/UIUC), Radim Blazek 12 \author Doxygenized by Martin Landa <landa.martin gmail.com> (2011) 13 */ 14 15 #include <string.h> 16 #include <stdlib.h> 17 #include <grass/dbmi.h> 18 19 /*! 20 \brief Make a copy of string buffer 21 22 Allocated string buffer should be freed by db_free(). 23 24 \param s source string buffer 25 26 \return allocated string buffer 27 */ db_store(const char * s)28char *db_store(const char *s) 29 { 30 char *a; 31 32 a = db_malloc(strlen(s) + 1); 33 if (a) 34 strcpy(a, s); 35 return a; 36 } 37 38 /*! 39 \brief Allocate memory 40 41 On failure is called db_memory_error(). 42 43 \param n number of bytes to be allocated 44 45 \return pointer to allocated memory 46 */ db_malloc(int n)47void *db_malloc(int n) 48 { 49 void *s; 50 51 if (n <= 0) 52 n = 1; 53 s = malloc((unsigned int)n); 54 if (s == NULL) 55 db_memory_error(); 56 return s; 57 } 58 59 /*! 60 \brief Allocate memory 61 62 On failure is called db_memory_error(). 63 64 \param n number of entities 65 \param m entity size 66 67 \return pointer to allocated memmory 68 */ db_calloc(int n,int m)69void *db_calloc(int n, int m) 70 { 71 void *s; 72 73 if (n <= 0) 74 n = 1; 75 if (m <= 0) 76 m = 1; 77 s = calloc((unsigned int)n, (unsigned int)m); 78 if (s == NULL) 79 db_memory_error(); 80 return s; 81 } 82 83 /*! 84 \brief Reallocate memory 85 86 On failure is called db_memory_error(). 87 88 \param s pointer to memory 89 \param n number of newly allocated bytes 90 91 \return pointer to allocated memmory 92 */ db_realloc(void * s,int n)93void *db_realloc(void *s, int n) 94 { 95 if (n <= 0) 96 n = 1; 97 if (s == NULL) 98 s = malloc((unsigned int)n); 99 else 100 s = realloc(s, (unsigned int)n); 101 if (s == NULL) 102 db_memory_error(); 103 return s; 104 } 105 106 /*! 107 \brief Free allocated memory 108 109 \param s pointer to memory to be freed 110 */ db_free(void * s)111void db_free(void *s) 112 { 113 free(s); 114 } 115