static int is_env_defined (char *buf, char comment) /*{{{*/ { char * env, token [32]; if ((*buf <= ' ') || (*buf == comment)) return 0; /* no token */ if (NULL == (buf = (char *) tokenize ((unsigned char *) buf, token, sizeof (token)))) return 0; if (NULL == (env = getenv (token))) return 0; /* ENV not defined */ if ((*buf == '\0') || (*buf == '\n') || (*buf == comment)) return 1; /* no tokens, but getenv() worked */ do { buf = (char *) tokenize ((unsigned char *) buf, token, sizeof (token)); if (buf == NULL) return 0; if (SLwildcard (token, env)) return 1; } while (*buf && (*buf != '\n') && (*buf != comment)); return 0; }
static int is_env_defined (SLprep_Type *pt, SLCONST char *buf) /*{{{*/ { char *env, token [128]; char comment = pt->comment_start[0]; /* FIXME: priority: low. This needs adapted to multi-char comments */ if (((unsigned char)*buf <= ' ') || (*buf == comment)) return 0; /* no token */ if (NULL == (buf = (char *) tokenize ((unsigned char *) buf, token, sizeof (token)))) return 0; if (NULL == (env = getenv (token))) return 0; /* ENV not defined */ if ((*buf == '\0') || (*buf == '\n') || (*buf == comment)) return 1; /* no tokens, but getenv() worked */ do { buf = (char *) tokenize ((unsigned char *) buf, token, sizeof (token)); if (buf == NULL) return 0; if (SLwildcard (token, env)) return 1; } while (*buf && (*buf != '\n') && (*buf != comment)); return 0; }
/*----------------------------------------------------------------------* * Does `string' match `pattern' ? * * '*' in pattern matches any sub-string (including the null string) * '?' matches any single char. * * Code taken from that donated by Paul Hudson <*****@*****.**> * to the fvwm project. * It is public domain, no strings attached. No guarantees either. *----------------------------------------------------------------------*/ static int SLwildcard (char *pattern, char *string) { if (pattern == NULL || *pattern == '\0' || !strcmp (pattern, "*")) return 1; else if (string == NULL) return 0; while (*pattern && *string) switch (*pattern) { case '?': /* match any single character */ pattern++; string++; break; case '*': /* see if rest of pattern matches any trailing */ /* substring of the string. */ if (*++pattern == '\0') return 1; /* trailing * must match rest */ while (*string) { if (SLwildcard (pattern, string)) return 1; string++; } return 0; /* break; */ default: if (*pattern == '\\') { if (*++pattern == '\0') pattern--; /* don't skip trailing backslash */ } if (*pattern++ != *string++) return 0; break; } return ((*string == '\0') && ((*pattern == '\0') || !strcmp (pattern, "*"))); }