parent
a64b10df83
commit
85a573dab7
|
@ -2,8 +2,8 @@
|
||||||
#define _SWAY_STRINGOP_H
|
#define _SWAY_STRINGOP_H
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
|
|
||||||
void strip_whitespace(char *str);
|
char *strip_whitespace(char *str, int *trimmed_start);
|
||||||
void strip_comments(char *str);
|
char *strip_comments(char *str);
|
||||||
list_t *split_string(const char *str, const char *delims);
|
list_t *split_string(const char *str, const char *delims);
|
||||||
void free_flat_list(list_t *list);
|
void free_flat_list(list_t *list);
|
||||||
char *code_strchr(const char *string, char delimiter);
|
char *code_strchr(const char *string, char delimiter);
|
||||||
|
|
|
@ -506,7 +506,7 @@ static char **split_directive(char *line, int *argc) {
|
||||||
if (!*line) return parts;
|
if (!*line) return parts;
|
||||||
|
|
||||||
int in_string = 0, in_character = 0;
|
int in_string = 0, in_character = 0;
|
||||||
int i, j;
|
int i, j, _;
|
||||||
for (i = 0, j = 0; line[i]; ++i) {
|
for (i = 0, j = 0; line[i]; ++i) {
|
||||||
if (line[i] == '\\') {
|
if (line[i] == '\\') {
|
||||||
++i;
|
++i;
|
||||||
|
@ -519,7 +519,7 @@ static char **split_directive(char *line, int *argc) {
|
||||||
char *item = malloc(i - j + 1);
|
char *item = malloc(i - j + 1);
|
||||||
strncpy(item, line + j, i - j);
|
strncpy(item, line + j, i - j);
|
||||||
item[i - j] = '\0';
|
item[i - j] = '\0';
|
||||||
strip_whitespace(item);
|
item = strip_whitespace(item, &_);
|
||||||
if (item[0] == '\0') {
|
if (item[0] == '\0') {
|
||||||
free(item);
|
free(item);
|
||||||
} else {
|
} else {
|
||||||
|
@ -537,7 +537,7 @@ static char **split_directive(char *line, int *argc) {
|
||||||
char *item = malloc(i - j + 1);
|
char *item = malloc(i - j + 1);
|
||||||
strncpy(item, line + j, i - j);
|
strncpy(item, line + j, i - j);
|
||||||
item[i - j] = '\0';
|
item[i - j] = '\0';
|
||||||
strip_whitespace(item);
|
item = strip_whitespace(item, &_);
|
||||||
if (*argc == capacity) {
|
if (*argc == capacity) {
|
||||||
capacity++;
|
capacity++;
|
||||||
parts = realloc(parts, sizeof(char *) * capacity);
|
parts = realloc(parts, sizeof(char *) * capacity);
|
||||||
|
|
|
@ -186,9 +186,10 @@ bool read_config(FILE *file, bool is_active) {
|
||||||
int temp_depth = 0; // Temporary: skip all config sections with depth
|
int temp_depth = 0; // Temporary: skip all config sections with depth
|
||||||
|
|
||||||
while (!feof(file)) {
|
while (!feof(file)) {
|
||||||
|
int _;
|
||||||
char *line = read_line(file);
|
char *line = read_line(file);
|
||||||
strip_comments(line);
|
line = strip_comments(line);
|
||||||
strip_whitespace(line);
|
line = strip_whitespace(line, &_);
|
||||||
if (!line[0]) {
|
if (!line[0]) {
|
||||||
goto _continue;
|
goto _continue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,38 +1,37 @@
|
||||||
|
#include "stringop.h"
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <strings.h>
|
|
||||||
#include <ctype.h>
|
|
||||||
#include "stringop.h"
|
|
||||||
#include "string.h"
|
#include "string.h"
|
||||||
#include "list.h"
|
#include "list.h"
|
||||||
|
#include <strings.h>
|
||||||
|
|
||||||
/* Note: This returns 8 characters for trimmed_start per tab character. */
|
/* Note: This returns 8 characters for trimmed_start per tab character. */
|
||||||
void strip_whitespace(char *str) {
|
char *strip_whitespace(char *_str, int *trimmed_start) {
|
||||||
int shift = 0;
|
*trimmed_start = 0;
|
||||||
int bpair = 1;
|
if (*_str == '\0')
|
||||||
int in_str = 0, in_ch = 0;
|
return _str;
|
||||||
while (*str) {
|
char *strold = _str;
|
||||||
str[-shift] = str[0];
|
while (*_str == ' ' || *_str == '\t') {
|
||||||
if (*str == '"' && !in_ch) {
|
if (*_str == '\t') {
|
||||||
in_str = !in_str;
|
*trimmed_start += 8;
|
||||||
} else if (*str == '\'' && !in_str) {
|
} else {
|
||||||
in_ch = !in_ch;
|
*trimmed_start += 1;
|
||||||
} else if (!in_ch && !in_str) {
|
|
||||||
if (isblank(*str)) {
|
|
||||||
if (bpair) {
|
|
||||||
++shift;
|
|
||||||
}
|
|
||||||
bpair=1;
|
|
||||||
} else {
|
|
||||||
bpair = 0;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
++str;
|
_str++;
|
||||||
}
|
}
|
||||||
str[-shift-bpair] = 0;
|
char *str = malloc(strlen(_str) + 1);
|
||||||
|
strcpy(str, _str);
|
||||||
|
free(strold);
|
||||||
|
int i;
|
||||||
|
for (i = 0; str[i] != '\0'; ++i);
|
||||||
|
do {
|
||||||
|
i--;
|
||||||
|
} while (i >= 0 && (str[i] == ' ' || str[i] == '\t'));
|
||||||
|
str[i + 1] = '\0';
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
void strip_comments(char *str) {
|
char *strip_comments(char *str) {
|
||||||
int in_string = 0, in_character = 0;
|
int in_string = 0, in_character = 0;
|
||||||
int i = 0;
|
int i = 0;
|
||||||
while (str[i] != '\0') {
|
while (str[i] != '\0') {
|
||||||
|
@ -48,6 +47,7 @@ void strip_comments(char *str) {
|
||||||
}
|
}
|
||||||
++i;
|
++i;
|
||||||
}
|
}
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
|
|
||||||
list_t *split_string(const char *str, const char *delims) {
|
list_t *split_string(const char *str, const char *delims) {
|
||||||
|
|
Loading…
Reference in a new issue