/** * scols_line_alloc_cells: * @ln: a pointer to a struct libscols_line instance * @n: the number of elements * * Allocates space for @n cells. This function is optional, * and libsmartcols automatically allocates necessary cells * according to number of columns in the table when you add * the line to the table. See scols_table_add_line(). * * Returns: 0, a negative value in case of an error. */ int scols_line_alloc_cells(struct libscols_line *ln, size_t n) { struct libscols_cell *ce; if (!ln) return -EINVAL; if (ln->ncells == n) return 0; if (!n) { scols_line_free_cells(ln); return 0; } DBG(LINE, ul_debugobj(ln, "alloc %zu cells", n)); ce = realloc(ln->cells, n * sizeof(struct libscols_cell)); if (!ce) return -errno; if (n > ln->ncells) memset(ce + ln->ncells, 0, (n - ln->ncells) * sizeof(struct libscols_cell)); ln->cells = ce; ln->ncells = n; return 0; }
/** * scols_line_alloc_cells: * @ln: a pointer to a struct libscols_line instance * @n: the number of elements * * Allocates space for @n cells. This function is optional, * and libsmartcols automatically allocates necessary cells * according to number of columns in the table when you add * the line to the table. See scols_table_add_line(). * * Returns: 0, a negative value in case of an error. */ int scols_line_alloc_cells(struct libscols_line *ln, size_t n) { struct libscols_cell *ce; assert(ln); if (!ln) return -EINVAL; if (ln->ncells == n) return 0; if (!n) { scols_line_free_cells(ln); return 0; } ce = realloc(ln->cells, n * sizeof(struct libscols_cell)); if (!ce) return -errno; if (n > ln->ncells) memset(ce + ln->ncells, 0, (n - ln->ncells) * sizeof(struct libscols_cell)); ln->cells = ce; ln->ncells = n; return 0; }
/** * scols_unref_line: * @ln: a pointer to a struct libscols_line instance * * Decreases the refcount of @ln. When the count falls to zero, the instance * is automatically deallocated. */ void scols_unref_line(struct libscols_line *ln) { if (ln && --ln->refcount <= 0) { DBG(CELL, ul_debugobj(ln, "dealloc")); list_del(&ln->ln_lines); list_del(&ln->ln_children); scols_line_free_cells(ln); free(ln->color); free(ln); return; } }
/** * scols_unref_line: * @ln: a pointer to a struct libscols_line instance * * Decreases the refcount of @ln. */ void scols_unref_line(struct libscols_line *ln) { if (ln && --ln->refcount <= 0) { list_del(&ln->ln_lines); list_del(&ln->ln_children); scols_line_free_cells(ln); free(ln->color); free(ln); return; } }