If you know what this is, you know what it is. If you do not, you do not.
Penn: int safe_str(const char *c, char *buff, char **bp)
MUX: void safe_copy_str_lbuf(const char *src, char *buff, char **bufp), macro'd to safe_str()
No return value in MUX
Penn: int safe_fill(char x, size_t n, char *buff, char **bp)
MUX: size_t safe_fill(char *buff, char **bufc, char chFill, size_t nSpaces)
Different orders, same names.
Penn: int string_prefix(const char *RESTRICT string, const char *RESTRICT prefix)
MUX: int string_prefix(const char *string, const char *prefix)
*RESTRICT?
Penn: const char * string_match(const char *src, const char *sub)
MUX: const char *string_match(const char *src, const char *sub)
Identical.
Penn: char * upcasestr(char *s)
MUX: void mux_strupr(char *a)
Penn returns a pointer back to the same string.
Penn: char * split_token(char **sp, char sep)
MUX: char *split_token(char **sp, SEP *psep)
Penn wants a char, MUX wants a pointer and only uses the first char.
MUX: char *trim_space_sep(char *str, SEP *sep)
Penn: char * trim_space_sep(char *str, char sep)
Identical