This is wildcards.c in view mode; [Download] [Up]
static char rcsid[] = "@(#)$Id: wildcards.c,v 5.5 1992/12/11 01:45:04 syd Exp $"; /******************************************************************************* * The Elm Mail System - $Revision: 5.5 $ $State: Exp $ * * Copyright (c) 1988-1992 USENET Community Trust * Copyright (c) 1986,1987 Dave Taylor ******************************************************************************* * Bug reports, patches, comments, suggestions should be sent to: * * Syd Weinstein, Elm Coordinator * elm@DSI.COM dsinc!elm * ******************************************************************************* * $Log: wildcards.c,v $ * Revision 5.5 1992/12/11 01:45:04 syd * remove sys/types.h include, it is now included by defs.h * and this routine includes defs.h or indirectly includes defs.h * From: Syd * * Revision 5.4 1992/12/07 05:00:39 syd * Add include of sys/types.h for time_t * From: Syd * * Revision 5.3 1992/10/31 18:59:24 syd * Prevent index underflow when wildchar is in first three chars of string * From: Syd via note from gwh@dogmatix.inmos.co.uk * * Revision 5.2 1992/10/11 01:18:23 syd * Fix where a SHELL=sh would cause a segv due to no / in * the shell name. * From: Syd * * Revision 5.1 1992/10/03 22:58:40 syd * Initial checkin as of 2.4 Release at PL0 * * ******************************************************************************/ /* * Wildcard handling module for elm. */ #include <stdio.h> #include "defs.h" /* * Common wildcards. Note that we count space as a wildcard, for * concatenation of individual unwildcarded file names. */ static char sh_wildcards[] = "[]*? " ; static char csh_wildcards[] = "[]*?{} " ; /* List of known shells and their wildcards. Expand as needed. */ static struct wildcard_list { char *shell_name ; char *wildcard_chars ; } known_shells[] = { { "csh", csh_wildcards }, { "sh", sh_wildcards }, { "ksh", sh_wildcards }, { "tcsh", csh_wildcards }, { "bash", sh_wildcards }, { "zsh", sh_wildcards }, { NULL, sh_wildcards } } ; /* * Function: has_wildcards. * * Scans the incoming file name for wildcard characters, returns * true if they are there and false otherwise. Watch for escapes * (ie, preceeding backslash). * * One tricky part here -- different shells have different wildcarding * characters (yuck). We need to examine the shell used, and set up * the right list. If the shell isn't one we're familiar with, assume * Bourne shell. */ int has_wildcards( name ) char *name ; { static char *user_wildcards = NULL ; char *wildchar ; struct wildcard_list *wptr ; char *user_shell ; char *sh_name ; if ( NULL == user_wildcards ) /* Determine wildcards only once */ { if ( NULL == ( user_shell = getenv( "SHELL" ) ) ) user_wildcards = sh_wildcards ; else { if ( NULL != ( sh_name = rindex( user_shell, '/' ) ) ) sh_name++ ; else sh_name = user_shell; for ( wptr = known_shells ; ( wptr->shell_name != NULL ) ; wptr++ ) if ( 0 == strcmp( wptr->shell_name, sh_name ) ) break ; user_wildcards = wptr->wildcard_chars ; } } /* If unescaped wildcard chars found, return true */ for ( wildchar = name ; NULL != ( wildchar = strpbrk( wildchar, user_wildcards ) ) ; wildchar++ ) { if ( *( wildchar - 1 ) != '\\' ) { if (wildchar - name < 3) return TRUE; /* elm predoubles the backslashes */ if ( *( wildchar - 3 ) != '\\' ) return TRUE ; } } return FALSE ; }
These are the contents of the former NiCE NeXT User Group NeXTSTEP/OpenStep software archive, currently hosted by Netfuture.ch.