swDataBuffer_trunk *swDataBuffer_getTrunk(swDataBuffer *data_buffer, swDataBuffer_item *item) { //第一次使用 if (item->last == NULL) { item->last = item->first; //printf("1.-------------------------last=%p|first=%p\n", item->last, item->first); return item->first; } //当前的trunk为空,可直接使用 else if (item->last->len == 0) { //printf("3.-------------------------\n"); return item->last; } //当前trunk else { //printf("2.-------------------------\n"); swDataBuffer_trunk *trunk = swDataBuffer_newTrunk(data_buffer, item); if (trunk == NULL) { swWarn("dataBufer: create trunk fail\n"); return NULL; } item->last->next = trunk; trunk->pre = item->last; item->last = trunk; return trunk; } }
swDataBuffer_item* swDataBuffer_newItem(swDataBuffer *data_buffer, int fd, int trunk_size) { swDataBuffer_item *newItem = sw_malloc(sizeof(swDataBuffer_item)); //内存分配失败 if (newItem == NULL) { swWarn("malloc for newItem failed. Error: %s[%d]", strerror(errno), errno); return NULL; } bzero(newItem, sizeof(swDataBuffer_item)); //创建item时,自动建立一个trunk swDataBuffer_trunk *newTrunk = swDataBuffer_newTrunk(data_buffer, newItem); if (newTrunk == NULL) { sw_free(newItem); swWarn("malloc for newTrunk failed. Error: %s[%d]", strerror(errno), errno); return NULL; } newItem->fd = fd; swHashMap_add_int(&data_buffer->map, fd, newItem); return newItem; }
swDataBuffer_item* swDataBuffer_newItem(swDataBuffer *data_buffer, int fd, int trunk_size) { swDataBuffer_item *newItem = sw_malloc(sizeof(swDataBuffer_item)); //创建item时,自动建立一个trunk swDataBuffer_trunk *newTrunk = swDataBuffer_newTrunk(data_buffer, newItem); if (newItem == NULL) { return NULL; } else if (newTrunk == NULL) { sw_free(newItem); return NULL; } else { bzero(newItem, sizeof(swDataBuffer_item)); newItem->fd = fd; HASH_ADD_INT(data_buffer->ht, fd, newItem); newItem->first = newTrunk; return newItem; } return NULL; }