char *Bstrtoken(char *s, const char *delim, char **ptrptr, int chop) { if (!ptrptr) return NULL; char *p = s ? s : *ptrptr; if (!p) return NULL; while (*p != 0 && Bstrchr(delim, *p)) p++; if (*p == 0) { *ptrptr = NULL; return NULL; } char * const start = p; while (*p != 0 && !Bstrchr(delim, *p)) p++; if (*p == 0) *ptrptr = NULL; else { if (chop) *(p++) = 0; *ptrptr = p; } return start; }
static int32_t readconfig(BFILE *fp, const char *key, char *value, uint32_t len) { char buf[1000], *k, *v, *eq; int32_t x=0; if (len < 1) return 0; Brewind(fp); while (1) { if (!Bfgets(buf, 1000, fp)) return 0; if (buf[0] == ';') continue; eq = Bstrchr(buf, '='); if (!eq) continue; k = buf; v = eq+1; while (*k == ' ' || *k == '\t') k++; *(eq--) = 0; while ((*eq == ' ' || *eq == '\t') && eq>=k) *(eq--) = 0; if (Bstrcasecmp(k, key)) continue; while (*v == ' ' || *k == '\t') v++; eq = v + Bstrlen(v)-1; while ((*eq == ' ' || *eq == '\t' || *eq == '\r' || *eq == '\n') && eq>=v) *(eq--) = 0; value[--len] = 0; do value[x] = v[x]; while (v[x++] != 0 && len-- > 0); return x-1; } }