event_t *shm_copy_event(event_t *e) { event_t *ev = NULL; param_t *p1, *p2; int size; ev = (event_t *)shm_malloc(sizeof(event_t)); if(ev == NULL) { ERR_MEM(SHARE_MEM); } memset(ev, 0, sizeof(event_t)); ev->name.s = (char *)shm_malloc(e->name.len * sizeof(char)); if(ev->name.s == NULL) { ERR_MEM(SHARE_MEM); } memcpy(ev->name.s, e->name.s, e->name.len); ev->name.len = e->name.len; p1 = e->params.list; while(p1) { size = sizeof(param_t) + (p1->name.len + p1->body.len) * sizeof(char); p2 = (param_t *)shm_malloc(size); if(p2 == NULL) { ERR_MEM(SHARE_MEM); } memset(p2, 0, size); size = sizeof(param_t); CONT_COPY(p2, p2->name, p1->name); if(p1->body.s && p1->body.len) CONT_COPY(p2, p2->body, p1->body); p2->next = ev->params.list; ev->params.list = p2; /* Update parameter hooks in the shmmem copy, this is needed so that * we can test for the presence of the sla parameter even in the * shared copy of the event */ if(e->params.hooks.event_dialog.call_id == p1) ev->params.hooks.event_dialog.call_id = p2; if(e->params.hooks.event_dialog.from_tag == p1) ev->params.hooks.event_dialog.from_tag = p2; if(e->params.hooks.event_dialog.to_tag == p1) ev->params.hooks.event_dialog.to_tag = p2; if(e->params.hooks.event_dialog.include_session_description == p1) ev->params.hooks.event_dialog.include_session_description = p2; if(e->params.hooks.event_dialog.sla == p1) ev->params.hooks.event_dialog.sla = p2; p1 = p1->next; } ev->type = e->type; return ev; error: shm_free_event(ev); return NULL; }
void free_pres_event(pres_ev_t* ev) { if(ev== NULL) return; if(ev->name.s) shm_free(ev->name.s); if(ev->content_type.s) shm_free(ev->content_type.s); shm_free_event(ev->evp); shm_free(ev); }
event_t* shm_copy_event(event_t* e) { event_t* ev= NULL; param_t* p1, *p2; int size; ev= (event_t*)shm_malloc(sizeof(event_t)); if(ev== NULL) { ERR_MEM(SHARE_MEM); } memset(ev, 0, sizeof(event_t)); ev->text.s= (char*)shm_malloc(e->text.len); if(ev->text.s== NULL) { ERR_MEM(SHARE_MEM); } memcpy(ev->text.s, e->text.s, e->text.len); ev->text.len= e->text.len; p1= e->params; while(p1) { size= sizeof(param_t)+ p1->name.len+ p1->body.len; p2= (param_t*)shm_malloc(size); if(p2== NULL) { ERR_MEM(SHARE_MEM); } memset(p2, 0, size); size= sizeof(param_t); CONT_COPY(p2, p2->name, p1->name); if(p1->body.s && p1->body.len) CONT_COPY(p2, p2->body, p1->body); p2->next= ev->params; ev->params= p2; p1= p1->next; } ev->parsed= e->parsed; return ev; error: shm_free_event(ev); return NULL; }