7cd32cc184a368434735de6129424dc4439eb7db
[asterisk/asterisk.git] / chanvars.c
1 /*
2  * Asterisk -- A telephony toolkit for Linux.
3  *
4  * Channel Variables
5  * 
6  * Copyright (C) 2002, Mark Spencer
7  *
8  * Mark Spencer <markster@linux-support.net>
9  *
10  * This program is free software, distributed under the terms of
11  * the GNU General Public License
12  */
13
14 #include <stdlib.h>
15 #include <string.h>
16
17 #include "asterisk.h"
18
19 ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
20
21 #include "asterisk/chanvars.h"
22 #include "asterisk/logger.h"
23
24 struct ast_var_t *ast_var_assign(const char *name, const char *value)
25 {
26         int i;
27         struct ast_var_t *var;
28         int len;
29         
30         len = sizeof(struct ast_var_t);
31         
32         len += strlen(name) + 1;
33         len += strlen(value) + 1;
34         
35         var = malloc(len);
36
37         if (var == NULL)
38         {
39                 ast_log(LOG_WARNING, "Out of memory\n");
40                 return NULL;
41         }
42         
43         i = strlen(name);
44         strncpy(var->name, name, i); 
45         var->name[i] = '\0';
46
47         var->value = var->name + i + 1;
48
49         i = strlen(value);
50         strncpy(var->value, value, i);
51         var->value[i] = '\0';
52         
53         return var;
54 }       
55         
56 void ast_var_delete(struct ast_var_t *var)
57 {
58         if (var == NULL) return;
59         free(var);
60 }
61
62 char *ast_var_name(struct ast_var_t *var)
63 {
64         char *name;
65
66         if (var == NULL)
67                 return NULL;
68         if (var->name == NULL)
69                 return NULL;
70         /* Return the name without the initial underscores */
71         if ((strlen(var->name) > 0) && (var->name[0] == '_')) {
72                 if ((strlen(var->name) > 1) && (var->name[1] == '_'))
73                         name = (char*)&(var->name[2]);
74                 else
75                         name = (char*)&(var->name[1]);
76         } else
77                 name = var->name;
78         return name;
79 }
80
81 char *ast_var_full_name(struct ast_var_t *var)
82 {
83         return (var != NULL ? var->name : NULL);
84 }
85
86 char *ast_var_value(struct ast_var_t *var)
87 {
88         return (var != NULL ? var->value : NULL);
89 }
90
91