|
|
| version 1.1.1.1.2.3, 2010/08/26 07:15:57 | version 1.1.1.1.2.4, 2010/09/01 20:24:20 |
|---|---|
| Line 11 | Line 11 |
| /* | /* |
| * sess_GetValues() Get all values from session shared memory | |
| * @s = Session item | |
| * @ppsVals = Return array strings | |
| * return: -1 error: in parameter, !=-1 count of returned strings in ppsVals (must be free after use!) | |
| */ | |
| int sess_GetValues(tagSess * __restrict s, char ***ppsVals) | |
| { | |
| register int i; | |
| char **valz, *Shared = NULL; | |
| char *peer, *p_brk; | |
| if (!s || !ppsVals) | |
| return -1; | |
| valz = malloc(sizeof(caddr_t)); | |
| if (!valz) { | |
| LOGERR; | |
| return -1; | |
| } else | |
| memset(valz, 0, sizeof(caddr_t)); | |
| // allocated memory & mirrored shared memory into this | |
| Shared = malloc(s->eom); | |
| if (!Shared) { | |
| LOGERR; | |
| free(valz); | |
| return -1; | |
| } else | |
| memcpy(Shared, s->addr, s->eom); | |
| for (i = 0, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; | |
| peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) { | |
| if (!strchr(peer, '=')) | |
| continue; | |
| else | |
| i++; | |
| valz = realloc(valz, (i + 1) * sizeof(caddr_t)); | |
| if (!valz) { | |
| LOGERR; | |
| free(Shared); | |
| return -1; | |
| } else | |
| memset(valz[i], 0, sizeof(caddr_t)); | |
| valz[i - 1] = strdup(peer); | |
| } | |
| free(Shared); | |
| return i; | |
| } | |
| /* | |
| * sess_GetValue() Get value from session shared memory from attribute | * sess_GetValue() Get value from session shared memory from attribute |
| * @s = Session item | * @s = Session item |
| * @csAttr = Attribute for search | * @csAttr = Attribute for search |