/* * Create a new domain structure * Returns 0 if everything went OK, otherwise value < 0 * is returned * * The structure is NOT created in shared memory so the * function must be called before ser forks if it should * be available to all processes */ static inline int new_dlist(str* _n, dlist_t** _d) { dlist_t* ptr; /* Domains are created before ser forks, * so we can create them using pkg_malloc */ ptr = (dlist_t*)shm_malloc(sizeof(dlist_t)); if (ptr == 0) { LOG(L_ERR, "new_dlist(): No memory left\n"); return -1; } memset(ptr, 0, sizeof(dlist_t)); ptr->name.s = (char*)shm_malloc(_n->len); if (ptr->name.s == 0) { LOG(L_ERR, "new_dlist(): No memory left 2\n"); shm_free(ptr); return -2; } memcpy(ptr->name.s, _n->s, _n->len); ptr->name.len = _n->len; if (new_udomain(&(ptr->name), 512, &(ptr->d)) < 0) { LOG(L_ERR, "new_dlist(): Error while creating domain structure\n"); shm_free(ptr->name.s); shm_free(ptr); return -3; } *_d = ptr; return 0; }
/*! * \brief Create a new domain structure * \return 0 if everything went OK, otherwise value < 0 is returned * * \note The structure is NOT created in shared memory so the * function must be called before the server forks if it should * be available to all processes */ static inline int new_dlist(str* _n, dlist_t** _d) { dlist_t* ptr; /* Domains are created before ser forks, * so we can create them using pkg_malloc */ ptr = (dlist_t*)shm_malloc(sizeof(dlist_t)); if (ptr == 0) { LM_ERR("no more share memory\n"); return -1; } memset(ptr, 0, sizeof(dlist_t)); /* copy domain name as null terminated string */ ptr->name.s = (char*)shm_malloc(_n->len+1); if (ptr->name.s == 0) { LM_ERR("no more memory left\n"); shm_free(ptr); return -2; } memcpy(ptr->name.s, _n->s, _n->len); ptr->name.len = _n->len; ptr->name.s[ptr->name.len] = 0; if (new_udomain(&(ptr->name), ul_hash_size, &(ptr->d)) < 0) { LM_ERR("creating domain structure failed\n"); shm_free(ptr->name.s); shm_free(ptr); return -3; } *_d = ptr; return 0; }