mirror of
https://github.com/swaywm/sway.git
synced 2026-04-29 06:46:22 -04:00
Got it to build.
This commit is contained in:
parent
46a53704ad
commit
a2896f33a4
55 changed files with 822 additions and 797 deletions
|
|
@ -66,6 +66,14 @@ void list_add(list_t *list, const void *data) {
|
|||
++list->length;
|
||||
}
|
||||
|
||||
void *list_alloc(list_t *list) {
|
||||
if (!sway_assert(list, "Invalid argument") || !resize(list)) {
|
||||
return NULL;
|
||||
}
|
||||
|
||||
return (uint8_t *)list->items + list->memb_size * list->length++;
|
||||
}
|
||||
|
||||
void list_insert(list_t *list, size_t index, const void *data) {
|
||||
if (!sway_assert(list && data && index <= list->length, "Invalid argument") ||
|
||||
!resize(list)) {
|
||||
|
|
@ -80,17 +88,7 @@ void list_insert(list_t *list, size_t index, const void *data) {
|
|||
++list->length;
|
||||
}
|
||||
|
||||
void list_delete(list_t *list, size_t index) {
|
||||
if (!sway_assert(list && index < list->length, "Invalid argument")) {
|
||||
return;
|
||||
}
|
||||
|
||||
size_t size = list->memb_size;
|
||||
uint8_t (*array)[size] = list->items;
|
||||
|
||||
memmove(&array[index], &array[index + 1], size * (list->length - index));
|
||||
--list->length;
|
||||
|
||||
static void shrink(list_t *list) {
|
||||
/* We shrink very sparse lists, but only down to a certain size.
|
||||
* The choice of >= 8 is somewhat arbitrary, but leaves a minimum
|
||||
* size of 4 elements.
|
||||
|
|
@ -107,6 +105,28 @@ void list_delete(list_t *list, size_t index) {
|
|||
}
|
||||
}
|
||||
|
||||
void list_remove(list_t *list) {
|
||||
if (!sway_assert(list, "Invalid argument") || list->length == 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
--list->length;
|
||||
shrink(list);
|
||||
}
|
||||
|
||||
void list_delete(list_t *list, size_t index) {
|
||||
if (!sway_assert(list && index < list->length, "Invalid argument")) {
|
||||
return;
|
||||
}
|
||||
|
||||
size_t size = list->memb_size;
|
||||
uint8_t (*array)[size] = list->items;
|
||||
|
||||
memmove(&array[index], &array[index + 1], size * (list->length - index));
|
||||
--list->length;
|
||||
shrink(list);
|
||||
}
|
||||
|
||||
void list_swap(list_t *list, size_t i1, size_t i2) {
|
||||
if (!sway_assert(list && i1 < list->length && i2 < list->length, "Invalid argument")) {
|
||||
return;
|
||||
|
|
@ -215,6 +235,15 @@ void list_foreach(list_t *list, void callback(void *item)) {
|
|||
}
|
||||
}
|
||||
|
||||
void list_free_with(list_t *list, void callback(void *item)) {
|
||||
if (!sway_assert(callback, "Invalid argument") || !list) {
|
||||
return;
|
||||
}
|
||||
|
||||
list_foreach(list, callback);
|
||||
list_free(list);
|
||||
}
|
||||
|
||||
void *list_end(list_t *list) {
|
||||
if (!sway_assert(list, "Invalid argument")) {
|
||||
return NULL;
|
||||
|
|
@ -222,3 +251,7 @@ void *list_end(list_t *list) {
|
|||
|
||||
return (uint8_t *)list->items + list->memb_size * list->length;
|
||||
}
|
||||
|
||||
void list_elem_free(void *item) {
|
||||
free(*(void **)item);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -69,14 +69,14 @@ int lenient_strcmp(char *a, char *b) {
|
|||
}
|
||||
|
||||
list_t *split_string(const char *str, const char *delims) {
|
||||
list_t *res = create_list();
|
||||
list_t *res = list_new(sizeof(char *), 0);
|
||||
char *copy = strdup(str);
|
||||
char *token;
|
||||
|
||||
token = strtok(copy, delims);
|
||||
while(token) {
|
||||
token = strdup(token);
|
||||
list_add(res, token);
|
||||
list_add(res, &token);
|
||||
token = strtok(NULL, delims);
|
||||
}
|
||||
free(copy);
|
||||
|
|
@ -84,11 +84,7 @@ list_t *split_string(const char *str, const char *delims) {
|
|||
}
|
||||
|
||||
void free_flat_list(list_t *list) {
|
||||
int i;
|
||||
for (i = 0; i < list->length; ++i) {
|
||||
free(list->items[i]);
|
||||
}
|
||||
list_free(list);
|
||||
list_free_with(list, list_elem_free);
|
||||
}
|
||||
|
||||
char **split_args(const char *start, int *argc) {
|
||||
|
|
@ -315,22 +311,25 @@ char *join_list(list_t *list, char *separator) {
|
|||
len += (list->length - 1) * sep_len;
|
||||
}
|
||||
|
||||
for (int i = 0; i < list->length; i++) {
|
||||
len += strlen(list->items[i]);
|
||||
for (size_t i = 0; i < list->length; i++) {
|
||||
char *item = *(char **)list_get(list, i);
|
||||
len += strlen(item);
|
||||
}
|
||||
|
||||
char *res = malloc(len);
|
||||
|
||||
char *p = res + strlen(list->items[0]);
|
||||
strcpy(res, list->items[0]);
|
||||
char *item = *(char **)list_get(list, 0);
|
||||
char *p = res + strlen(item);
|
||||
strcpy(res, item);
|
||||
|
||||
for (int i = 1; i < list->length; i++) {
|
||||
for (size_t i = 1; i < list->length; i++) {
|
||||
item = *(char **)list_get(list, i);
|
||||
if (sep_len) {
|
||||
memcpy(p, separator, sep_len);
|
||||
p += sep_len;
|
||||
}
|
||||
strcpy(p, list->items[i]);
|
||||
p += strlen(list->items[i]);
|
||||
strcpy(p, item);
|
||||
p += strlen(item);
|
||||
}
|
||||
|
||||
*p = '\0';
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue