stringop.c: rewrite strip_whitespace

This commit is contained in:
Ian Fan 2018-12-09 11:52:55 +00:00
parent 3b4cf3718b
commit 967566e37f
5 changed files with 17 additions and 27 deletions

View File

@ -9,24 +9,17 @@
#include "string.h"
#include "list.h"
const char whitespace[] = " \f\n\r\t\v";
static const char whitespace[] = " \f\n\r\t\v";
char *strip_whitespace(char *_str) {
if (*_str == '\0')
return _str;
char *strold = _str;
while (*_str == ' ' || *_str == '\t') {
_str++;
}
char *str = strdup(_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_whitespace(char *str) {
size_t len = strlen(str);
size_t start = strspn(str, whitespace);
memmove(str, &str[start], len + 1 - start);
if (!*str) return;
for (len -= start + 1; isspace(str[len]); --len) {}
str[len + 1] = '\0';
}
void strip_quotes(char *str) {

View File

@ -3,10 +3,7 @@
#include "list.h"
// array of whitespace characters to use for delims
extern const char whitespace[];
char *strip_whitespace(char *str);
void strip_whitespace(char *str);
char *strip_comments(char *str);
void strip_quotes(char *str);

View File

@ -236,15 +236,15 @@ list_t *execute_command(char *_exec, struct sway_seat *seat,
criteria_destroy(criteria);
config->handler_context.using_criteria = true;
// Skip leading whitespace
head += strspn(head, whitespace);
for (; isspace(*head); ++head) {}
}
// Split command list
cmdlist = argsep(&head, ";");
cmdlist += strspn(cmdlist, whitespace);
for (; isspace(*cmdlist); ++cmdlist) {}
do {
// Split commands
cmd = argsep(&cmdlist, ",");
cmd += strspn(cmd, whitespace);
for (; isspace(*cmd); ++cmd) {}
if (strcmp(cmd, "") == 0) {
wlr_log(WLR_INFO, "Ignoring empty command.");
continue;

View File

@ -580,7 +580,7 @@ static int detect_brace_on_following_line(FILE *file, char *line,
free(peeked);
peeked = peek_line(file, lines, &position);
if (peeked) {
peeked = strip_whitespace(peeked);
strip_whitespace(peeked);
}
lines++;
} while (peeked && strlen(peeked) == 0);
@ -663,7 +663,7 @@ bool read_config(FILE *file, struct sway_config *config,
read += length + 1;
}
line = strip_whitespace(line);
strip_whitespace(line);
if (line[0] == '#') {
free(line);
continue;

View File

@ -49,7 +49,7 @@ char *input_device_get_identifier(struct wlr_input_device *device) {
int vendor = device->vendor;
int product = device->product;
char *name = strdup(device->name);
name = strip_whitespace(name);
strip_whitespace(name);
char *p = name;
for (; *p; ++p) {