string.c

Go to the documentation of this file.
00001 #include <string.h>
00002 #include <stdlib.h>
00003 #include <grass/dbmi.h>
00004 
00011 void
00012 db_init_string  (dbString *x)
00013 
00014 {
00015     x->string = "";
00016     x->nalloc = 0;
00017 }
00018 
00019 
00020 
00027 /* db_set_string(dbString *x, char *s, int copy)
00028  *  inserts 's' into 'x'
00029  *   if 'copy' is true, then memory is allocated to copy into
00030  *   else 'x' is made to point to 's'
00031  * returns DB_OK or DB_MEMORY_ERR
00032  */
00033 static int set_string();
00034 
00035 int
00036 db_set_string  (dbString *x, char *s)
00037 
00038 {
00039     return set_string (x, s, 1);
00040 }
00041 
00048 int 
00049 db_set_string_no_copy  (dbString *x, char *s)
00050 
00051 {
00052     return set_string (x, s, 0);
00053 }
00054 
00061 unsigned int
00062 db_sizeof_string  (dbString *x)
00063 
00064 {
00065     if (x->nalloc < 0) return 0;
00066     return (unsigned int) x->nalloc;
00067 }
00068 
00075 void
00076 db_zero_string  (dbString *x)
00077 
00078 {
00079     db_zero ((void *)db_get_string(x), db_sizeof_string(x));
00080 }
00081 
00088 static int
00089 set_string  (dbString *x, char *s, int  copy)
00090 
00091 {
00092     int len;
00093     int stat;
00094 
00095     if (s == NULL)
00096     {
00097         s = "";
00098         copy = 1;
00099     }
00100 
00101     len = strlen(s)+1;
00102 
00103     if (copy)
00104     {
00105         stat = db_enlarge_string (x, len);
00106         if (stat != DB_OK)
00107             return stat;
00108         strcpy (x->string, s);
00109     }
00110     else
00111     {
00112         db_free_string(x);
00113         x->string = s;
00114         x->nalloc = -1;
00115     }
00116     return DB_OK;
00117 }
00118 
00125 int
00126 db_enlarge_string  (dbString *x, int len)
00127 
00128 {
00129     if (x->nalloc < len)
00130     {
00131         if (x->nalloc <= 0)
00132             x->string = db_store("");
00133         x->string = db_realloc ((void *)x->string, len);
00134         if (x->string == NULL)
00135             return DB_MEMORY_ERR;
00136         x->nalloc = len;
00137     }
00138     return DB_OK;
00139 }
00140 
00141 char *
00142 db_get_string (dbString *x)
00143 
00144 {
00145     return x->string;
00146 }
00147 
00154 void
00155 db_free_string (dbString *x)
00156 
00157 {       
00158     if (x->nalloc > 0)
00159         free(x->string);
00160     db_init_string (x);
00161 }
00162 
00169 void
00170 db_free_string_array  (dbString *a, int  n)
00171 
00172 {
00173     int i;
00174 
00175     if (a)
00176     {
00177         for (i = 0; i<n; i++)
00178             db_free_string(&a[i]);
00179         free (a);
00180     }
00181 }
00182 
00189 dbString *
00190 db_alloc_string_array  (int count)
00191 
00192 {
00193     int i;
00194     dbString *a;
00195 
00196     if (count < 0) count = 0;
00197     a = (dbString *) db_calloc (count, sizeof(dbString));
00198     if (a)
00199     {
00200         for (i = 0; i < count; i++)
00201             db_init_string(&a[i]);
00202     }
00203     return a;
00204 }
00205 
00212 int
00213 db_append_string  (dbString *x, char *s)
00214 
00215 {
00216     int len;
00217     int stat;
00218 
00219     len = strlen (db_get_string(x)) + strlen(s) + 1;
00220     stat = db_enlarge_string (x, len);
00221     if (stat != DB_OK)
00222         return stat;
00223     strcat (db_get_string(x), s);
00224     return DB_OK;
00225 }
00226 
00233 int
00234 db_copy_string  (dbString *dst, dbString *src)
00235 
00236 {
00237     return db_set_string (dst, db_get_string(src));
00238 }
00239 
00246 void
00247 db_double_quote_string  (dbString *src)
00248 
00249 {
00250     char *ptra, *ptrb, buf[2];
00251     dbString tmp;
00252     
00253     db_init_string (&tmp);
00254     buf[1] = 0;
00255     
00256     ptrb = db_get_string(src);
00257     while ( (ptra = strchr( ptrb, '\'') ) != NULL ) {
00258         for ( ; ptrb <= ptra; ptrb++ ) { buf[0] = ptrb[0]; db_append_string (&tmp, buf); }
00259         db_append_string (&tmp, "'");
00260     }
00261     db_append_string (&tmp, ptrb );
00262     db_set_string ( src, db_get_string(&tmp));
00263     db_free_string( &tmp );
00264 }
00265 

Generated on Sun Apr 6 17:31:38 2008 for GRASS by  doxygen 1.5.5