Пример #1
0
bool array_insert_n(array_t a, unsigned int index, void *ptr, unsigned long n)
{

    unsigned char *p;
    unsigned int  move_size;

    if (index > a->nelts) {
        return false;

    } else if (a->nalloc + n > a->nelts) {
        if (!array_push_n(a, n)) {
            return false;
        }

    } else {
        a->nelts += n;
    }

    p = (unsigned char *)a->elts;
    move_size = a->size * (a->nelts - (index + n));

    if (move_size) {
        memmove(p + a->size * (index + n), p + a->size * index, move_size);
    }

    memcpy(p + a->size * index, ptr, a->size * n);

    return true;
}
Пример #2
0
array_t array_dup(array_t a)
{
    array_t dst = array_newlen(a->size, a->nelts);
    if (!dst) {
        return NULL;
    }

    memcpy(array_push_n(dst, a->nelts), a->elts, a->nelts * a->size);

    return dst;
}
Пример #3
0
bool array_resize(array_t a, unsigned long n)
{
    void *elt;
    unsigned long  nalloc;

    if (a->nelts >= n) {
        a->nelts = n;
        return true;
    }
    
    nalloc = n - a->nelts;
    elt    = array_push_n(a, nalloc);
    if (!elt) {
        return false;
    }

    memset(elt, 0, nalloc * a->size);
    return true;
}
Пример #4
0
static int32_t rtmp_core_merge_listennings(rtmp_cycle_t *cycle)
{
    rtmp_addr_port_t    *ports;
    rtmp_addr_inet_t    *addr;
    int32_t              i,j,h;
    rtmp_host_t        **host;
    void               **n;

    ports = cycle->ports.elts;
    for (i = 0 ; i < (int32_t)cycle->ports.nelts; i++) {
        if (ports[i].family != AF_INET) {
            continue;
        }

        addr = ports[i].addr_in.elts;
        if (addr[0].addr.sin_addr.s_addr == INADDR_ANY) {
            rtmp_core_add_listening(cycle,addr);

            for (j = 1; j < (int32_t)ports[i].addr_in.nelts; j++) {

                n = array_push_n(&addr[j].hosts,addr[0].hosts.nelts);

                host = addr[0].hosts.elts;
                for (h = 0; h < (int32_t)addr[0].hosts.nelts; h++) {
                    *n++ = host[h];
                }
            }
            continue;
        }

        for (j = 0; j < (int32_t)ports[i].addr_in.nelts; j++) {
            rtmp_core_add_listening(cycle,& addr[j]);
        }
    }

    return RTMP_OK;
}