msed: replace while loops with c string functions

pull/239/head
Sekulum Forka 1 year ago
parent 63739502ac
commit e8eacb1957

@ -114,24 +114,19 @@ sed(char *file)
if (!v) if (!v)
continue; continue;
v++; v++;
while (*v && (*v == ' ' || *v == '\t')) v += strspn(v, " \t");
v++;
v = strdup(v); v = strdup(v);
char *e = expr; char *e = expr;
while (*e) { while (*e) {
while (*e &&
(*e == ' ' || *e == '\t' || *e == '\n' || *e == ';'))
e++;
*headersel = 0; *headersel = 0;
e += strspn(e, " \t\n;");
if (*e == '/') { if (*e == '/') {
e++; e++;
char *s = e; char *s = e;
// parse_headers, sets headersel // parse_headers, sets headersel
while (*e && *e != '/') e = strchr(e, '/');
e++;
snprintf(headersel, sizeof headersel, snprintf(headersel, sizeof headersel,
"^(%.*s)*:", (int)(e-s), s); "^(%.*s)*:", (int)(e-s), s);
for (s = headersel; *s && *(s+1); s++) for (s = headersel; *s && *(s+1); s++)
@ -167,8 +162,7 @@ sed(char *file)
fprintf(stderr, "msed: unterminated a command\n"); fprintf(stderr, "msed: unterminated a command\n");
exit(1); exit(1);
} }
while (*e && *e != sep) e = strchr(e, sep);
e++;
if (*e == sep) if (*e == sep)
e++; e++;
if (!(*e == ' ' || *e == ';' || *e == '\n' || !*e)) { if (!(*e == ' ' || *e == ';' || *e == '\n' || !*e)) {
@ -179,22 +173,18 @@ sed(char *file)
case 'c': case 'c':
sep = *++e; sep = *++e;
s = ++e; s = ++e;
while (*e && *e != sep) e = strchr(e, sep);
e++;
free(v); free(v);
v = strndup(s, e-s); v = strndup(s, e-s);
break; break;
case 's': case 's':
sep = *++e; sep = *++e;
s = ++e; s = ++e;
while (*e && *e != sep) e = strchr(e, sep);
e++;
char *t = ++e; char *t = ++e;
while (*e && *e != sep) e = strchr(e, sep);
e++;
char *u = ++e; char *u = ++e;
while (*e == 'd' || *e == 'g' || *e == 'i') e += strspn(e, "dgi");
e++;
if (!(*e == ' ' || *e == ';' || *e == '\n' || !*e)) { if (!(*e == ' ' || *e == ';' || *e == '\n' || !*e)) {
fprintf(stderr, "msed: unterminated s command\n"); fprintf(stderr, "msed: unterminated s command\n");
@ -226,8 +216,7 @@ sed(char *file)
exit(1); exit(1);
} }
} }
while (*e && *e != ';' && *e != '\n') e += strcspn(e, ";\n");
e++;
} }
if (v) { if (v) {
printhdr(h, 0); printhdr(h, 0);
@ -241,17 +230,14 @@ sed(char *file)
char *hs, *he; char *hs, *he;
char *e = expr; char *e = expr;
while (*e) { while (*e) {
while (*e && e += strspn(e, " \t\n;");
(*e == ' ' || *e == '\t' || *e == '\n' || *e == ';'))
e++;
hs = he = 0; hs = he = 0;
if (*e == '/') { if (*e == '/') {
e++; e++;
hs = e; hs = e;
// parse_headers, sets headersel // parse_headers, sets headersel
while (*e && *e != '/') e = strchr(e, '/');
e++;
he = e; he = e;
if (*e) if (*e)
e++; e++;
@ -281,8 +267,7 @@ sed(char *file)
exit(1); exit(1);
} }
s = ++e; s = ++e;
while (*e && *e != sep) e = strchr(e, sep);
e++;
v = strndup(s, e-s); v = strndup(s, e-s);
} }
@ -305,8 +290,7 @@ sed(char *file)
// ignore here; // ignore here;
break; break;
} }
while (*e && *e != ';' && *e != '\n') e += strcspn(e, ";\n");
e++;
} }
printf("\n"); printf("\n");

Loading…
Cancel
Save