|
|
| version 1.3.2.1, 2011/09/07 15:52:35 | version 1.3.2.5, 2011/09/07 23:38:39 |
|---|---|
| Line 158 sess_GetValue(tagSess * __restrict s, const char *csAt | Line 158 sess_GetValue(tagSess * __restrict s, const char *csAt |
| for (i = 1, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; | for (i = 1, peer = strtok_r(Shared, MEM_DELIM"\r\n", &p_brk); peer; |
| i++, peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) { | i++, peer = strtok_r(NULL, MEM_DELIM"\r\n", &p_brk)) { |
| attr = strtok_r(peer, "=\r\n", &a_brk); | attr = strtok_r(peer, "=\r\n", &a_brk); |
| if (attr && !strncmp(attr, csAttr, MAX_ATTRIBUTE)) { | if (attr && !strncmp(attr, csAttr, MAX_ATTRIBUTE - 1)) { |
| val = strtok_r(NULL, "=\r\n", &a_brk); | val = strtok_r(NULL, "=\r\n", &a_brk); |
| if (val && strlen(val)) { | if (val && strlen(val)) { |
| if (psVal) | if (psVal) |
| Line 188 sess_DelValue(tagSess * __restrict s, const char *csAt | Line 188 sess_DelValue(tagSess * __restrict s, const char *csAt |
| { | { |
| register int i; | register int i; |
| int ret, attrlen; | int ret, attrlen; |
| char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE + 1]; | char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE]; |
| char *peer, *p_brk; | char *peer, *p_brk; |
| if (!s || !csAttr || !*csAttr) | if (!s || !csAttr || !*csAttr) |
| Line 196 sess_DelValue(tagSess * __restrict s, const char *csAt | Line 196 sess_DelValue(tagSess * __restrict s, const char *csAt |
| else | else |
| attrlen = strlen(csAttr); | attrlen = strlen(csAttr); |
| Buffer = Shared = NULL; | Buffer = Shared = NULL; |
| memset(szAttr, 0, MAX_ATTRIBUTE + 1); | strlcpy(szAttr, csAttr, sizeof szAttr); |
| strncpy(szAttr, csAttr, MAX_ATTRIBUTE - 1); | strlcat(szAttr, "=", sizeof szAttr); |
| strcat(szAttr, "="); | |
| Buffer = malloc(s->eom); | Buffer = malloc(s->eom); |
| if (!Buffer) { | if (!Buffer) { |
| Line 223 sess_DelValue(tagSess * __restrict s, const char *csAt | Line 222 sess_DelValue(tagSess * __restrict s, const char *csAt |
| peer[attrlen] == '\r' || peer[attrlen] == '\n') | peer[attrlen] == '\r' || peer[attrlen] == '\n') |
| continue; | continue; |
| strcat(Buffer, peer); | strlcat(Buffer, peer, s->eom); |
| strcat(Buffer, MEM_DELIM); | strlcat(Buffer, MEM_DELIM, s->eom); |
| } | } |
| memset(s->addr, 0, s->eom); | |
| memcpy(s->addr, Buffer, s->eom); | memcpy(s->addr, Buffer, s->eom); |
| if (s->type == SHARED_MAP) | if (s->type == SHARED_MAP) |
| Line 252 sess_SetValue(tagSess * __restrict s, const char *csAt | Line 250 sess_SetValue(tagSess * __restrict s, const char *csAt |
| { | { |
| register int i; | register int i; |
| int upd, ret, def = IS_VAL; | int upd, ret, def = IS_VAL; |
| char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE + 1]; | char *Buffer, *Shared, szAttr[MAX_ATTRIBUTE]; |
| char *peer, *p_brk; | char *peer, *p_brk; |
| if (!s || !csAttr || !*csAttr) | if (!s || !csAttr || !*csAttr) |
| return -1; | return -1; |
| else | else |
| Buffer = Shared = NULL; | Buffer = Shared = NULL; |
| memset(szAttr, 0, MAX_ATTRIBUTE + 1); | strlcpy(szAttr, csAttr, sizeof szAttr); |
| strncpy(szAttr, csAttr, MAX_ATTRIBUTE - 1); | strlcat(szAttr, "=", sizeof szAttr); |
| strcat(szAttr, "="); | |
| Buffer = malloc(s->eom); | Buffer = malloc(s->eom); |
| if (!Buffer) { | if (!Buffer) { |
| Line 284 sess_SetValue(tagSess * __restrict s, const char *csAt | Line 281 sess_SetValue(tagSess * __restrict s, const char *csAt |
| if (!strncmp(peer, szAttr, strlen(szAttr))) { | if (!strncmp(peer, szAttr, strlen(szAttr))) { |
| upd++; | upd++; |
| if (psVal) { | if (psVal) { |
| strcat(Buffer, szAttr); | strlcat(Buffer, szAttr, s->eom); |
| strcat(Buffer, psVal); | strlcat(Buffer, psVal, s->eom); |
| strcat(Buffer, MEM_DELIM); | strlcat(Buffer, MEM_DELIM, s->eom); |
| } else { | } else { |
| strcat(Buffer, csAttr); | strlcat(Buffer, csAttr, s->eom); |
| strcat(Buffer, MEM_DELIM); | strlcat(Buffer, MEM_DELIM, s->eom); |
| def = IS_DEF; | def = IS_DEF; |
| } | } |
| continue; | continue; |
| } | } |
| strcat(Buffer, peer); | strlcat(Buffer, peer, s->eom); |
| strcat(Buffer, MEM_DELIM); | strlcat(Buffer, MEM_DELIM, s->eom); |
| } | } |
| if (!upd) { | if (!upd) { |
| if (psVal) { | if (psVal) { |
| strcat(Buffer, szAttr); | strlcat(Buffer, szAttr, s->eom); |
| strcat(Buffer, psVal); | strlcat(Buffer, psVal, s->eom); |
| strcat(Buffer, MEM_DELIM); | strlcat(Buffer, MEM_DELIM, s->eom); |
| } else { | } else { |
| strcat(Buffer, csAttr); | strlcat(Buffer, csAttr, s->eom); |
| strcat(Buffer, MEM_DELIM); | strlcat(Buffer, MEM_DELIM, s->eom); |
| def = IS_DEF; | def = IS_DEF; |
| } | } |
| def |= IS_ADD; | def |= IS_ADD; |
| } | } |
| memset(s->addr, 0, s->eom); | |
| memcpy(s->addr, Buffer, s->eom); | memcpy(s->addr, Buffer, s->eom); |
| if (s->type == SHARED_MAP) | if (s->type == SHARED_MAP) |
| Line 344 sess_prepareSession(tagSess * __restrict s, u_char use | Line 340 sess_prepareSession(tagSess * __restrict s, u_char use |
| sess_SetErr(EINVAL, "Error:: invalid argument\n"); | sess_SetErr(EINVAL, "Error:: invalid argument\n"); |
| return NULL; | return NULL; |
| } | } |
| if (s->addr) { | |
| sess_SetErr(EINVAL, "Error:: already attached memory\n"); | |
| return NULL; | |
| } | |
| ATTACH_MEMORY(s); | ATTACH_MEMORY(s); |
| if (!s->addr) | if (!s->addr) |
| Line 363 sess_prepareSession(tagSess * __restrict s, u_char use | Line 363 sess_prepareSession(tagSess * __restrict s, u_char use |
| hdr->hdr_argc, useDirect); | hdr->hdr_argc, useDirect); |
| ADD_SEMAPHORE(s, ret); | ADD_SEMAPHORE(s, ret); |
| if (!s->zcopy) | DETACH_MEMORY(s); |
| DETACH_MEMORY(s); | |
| return arr; | return arr; |
| } | } |
| Line 385 sess_doneSession(tagSess * __restrict s, array_t ** __ | Line 384 sess_doneSession(tagSess * __restrict s, array_t ** __ |
| if (!s->zcopy) | if (!s->zcopy) |
| io_arrayFree(*arr); | io_arrayFree(*arr); |
| else | |
| DETACH_MEMORY(s); | |
| io_arrayDestroy(arr); | io_arrayDestroy(arr); |
| } | } |
| Line 408 sess_commitSession(tagSess * __restrict s, array_t * _ | Line 405 sess_commitSession(tagSess * __restrict s, array_t * _ |
| return -1; | return -1; |
| } | } |
| if (!s->zcopy) | ATTACH_MEMORY(s); |
| ATTACH_MEMORY(s); | |
| if (!s->addr) { | if (!s->addr) { |
| if (!s->zcopy) | DETACH_MEMORY(s); |
| DETACH_MEMORY(s); | |
| return -1; | return -1; |
| } else | } else |
| hdr = (sess_hdr_t*) s->addr; | hdr = (sess_hdr_t*) s->addr; |
| if (hdr->hdr_magic != SESS_AIT_MAGIC) { | |
| if (!s->zcopy) | |
| DETACH_MEMORY(s); | |
| sess_SetErr(EINVAL, "Error:: shared memory not contains values with proper format\n"); | |
| return -1; | |
| } | |
| DEC_SEMAPHORE(s, rs); | DEC_SEMAPHORE(s, rs); |
| if ((ret = io_vals2map(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), arr)) != -1) { | if ((ret = io_vals2map(s->addr + sizeof(sess_hdr_t), s->eom - sizeof(sess_hdr_t), arr)) != -1) { |
| hdr->hdr_magic = SESS_AIT_MAGIC; | |
| hdr->hdr_argc = io_arraySize(arr); | hdr->hdr_argc = io_arraySize(arr); |
| ret += sizeof(sess_hdr_t); | ret += sizeof(sess_hdr_t); |
| } | } |
| ADD_SEMAPHORE(s, rs); | ADD_SEMAPHORE(s, rs); |
| if (!s->zcopy) | DETACH_MEMORY(s); |
| DETACH_MEMORY(s); | |
| return ret; | return ret; |
| } | } |