diff --git a/src/os_mac.c b/src/os_mac.c
index 4a3014b..64f0e09 100644
--- a/src/os_mac.c
+++ b/src/os_mac.c
@@ -55,7 +55,7 @@
  * in `path'.  Called by mch_expandpath().
  * "path" has backslashes before chars that are not to be expanded.
  */
-    int
+    static int
 mac_expandpath(
     garray_T	*gap,
     char_u	*path,
@@ -109,8 +109,7 @@
 	{
 	    if (e)
 		break;
-	    else
-		s = p + 1;
+	    s = p + 1;
 	}
 	/* should use  WILCARDLIST but what about ` */
 	/*	    if (vim_strchr((char_u *)"*?[{~$", *path) != NULL)*/
@@ -134,12 +133,10 @@
     /* now we have one wildcard component between s and e */
     *e = NUL;
 
-#if 1
     dany = *s;
     *s = NUL;
     backslash_halve(buf);
     *s = dany;
-#endif
 
     /* convert the file pattern to a regexp pattern */
     pat = file_pat_to_reg_pat(s, e, NULL, FALSE);
@@ -207,7 +204,7 @@
 	gMyCPB.hFileInfo.ioFDirIndex = index;
 	gMyCPB.hFileInfo.ioDirID     = dirID;
 
-	gErr = PBGetCatInfo(&gMyCPB,false);
+	gErr = PBGetCatInfo(&gMyCPB, false);
 
 	if (gErr == noErr)
 	{
@@ -237,12 +234,14 @@
 		    addfile(gap, buf, flags);
 		}
 	    }
-	    if ((gMyCPB.hFileInfo.ioFlAttrib & ioDirMask) !=0 )
+#if 0	/* What is this supposed to do? */
+	    if ((gMyCPB.hFileInfo.ioFlAttrib & ioDirMask) != 0)
 	    {
 	    }
 	    else
 	    {
 	    }
+#endif
 	}
 	index++;
     }
@@ -254,7 +253,7 @@
 	do
 	{
 	    gMyHPBlock.volumeParam.ioNamePtr = (char_u *) dirname;
-	    gMyHPBlock.volumeParam.ioVRefNum =0;
+	    gMyHPBlock.volumeParam.ioVRefNum = 0;
 	    gMyHPBlock.volumeParam.ioVolIndex = index;
 
 	    gErr = PBHGetVInfo (&gMyHPBlock,false);
@@ -291,164 +290,6 @@
     return gap->ga_len - start_len;
 }
 
-
-#ifdef USE_UNIXFILENAME
-    static int
-pstrcmp(a, b)
-    const void *a, *b;
-{
-    return (pathcmp(*(char **)a, *(char **)b, -1));
-}
-
-    static int
-unix_expandpath(gap, path, wildoff, flags)
-    garray_T	*gap;
-    char_u	*path;
-    int		wildoff;
-    int		flags;		/* EW_* flags */
-{
-    char_u	*buf;
-    char_u	*path_end;
-    char_u	*p, *s, *e;
-    int		start_len, c;
-    char_u	*pat;
-    DIR		*dirp;
-    regmatch_T	regmatch;
-    struct dirent *dp;
-    int		starts_with_dot;
-    int		matches;
-    int		len;
-
-    start_len = gap->ga_len;
-    buf = alloc(STRLEN(path) + BASENAMELEN + 5);/* make room for file name */
-    if (buf == NULL)
-	return 0;
-
-/*
- * Find the first part in the path name that contains a wildcard.
- * Copy it into buf, including the preceding characters.
- */
-    p = buf;
-    s = buf;
-    e = NULL;
-    path_end = path;
-    while (*path_end)
-    {
-	/* May ignore a wildcard that has a backslash before it */
-	if (path_end >= path + wildoff && rem_backslash(path_end))
-	    *p++ = *path_end++;
-	else if (*path_end == '/')
-	{
-	    if (e != NULL)
-		break;
-	    else
-		s = p + 1;
-	}
-	else if (vim_strchr((char_u *)"*?[{~$", *path_end) != NULL)
-	    e = p;
-#ifdef FEAT_MBYTE
-	if (has_mbyte)
-	{
-	    len = (*mb_ptr2len_check)(path_end);
-	    STRNCPY(p, path_end, len);
-	    p += len;
-	    path_end += len;
-	}
-	else
-#endif
-	    *p++ = *path_end++;
-    }
-    e = p;
-    *e = NUL;
-
-    /* now we have one wildcard component between s and e */
-    /* Remove backslashes between "wildoff" and the start of the wildcard
-     * component. */
-    for (p = buf + wildoff; p < s; ++p)
-	if (rem_backslash(p))
-	{
-	    STRCPY(p, p + 1);
-	    --e;
-	    --s;
-	}
-
-    /* convert the file pattern to a regexp pattern */
-    starts_with_dot = (*s == '.');
-    pat = file_pat_to_reg_pat(s, e, NULL, FALSE);
-    if (pat == NULL)
-    {
-	vim_free(buf);
-	return 0;
-    }
-
-    /* compile the regexp into a program */
-#ifdef MACOS_X
-    /* We want to behave like Terminal.app */
-    regmatch.rm_ic = TRUE;
-#else
-    regmatch.rm_ic = FALSE;		/* Don't ever ignore case */
-#endif
-    regmatch.regprog = vim_regcomp(pat, RE_MAGIC);
-    vim_free(pat);
-
-    if (regmatch.regprog == NULL)
-    {
-	vim_free(buf);
-	return 0;
-    }
-
-    /* open the directory for scanning */
-    c = *s;
-    *s = NUL;
-    dirp = opendir(*buf == NUL ? "." : (char *)buf);
-    *s = c;
-
-    /* Find all matching entries */
-    if (dirp != NULL)
-    {
-	for (;;)
-	{
-	    dp = readdir(dirp);
-	    if (dp == NULL)
-		break;
-	    if ((dp->d_name[0] != '.' || starts_with_dot)
-		    && vim_regexec(&regmatch, (char_u *)dp->d_name, (colnr_T)0))
-	    {
-		STRCPY(s, dp->d_name);
-		len = STRLEN(buf);
-		STRCPY(buf + len, path_end);
-		if (mch_has_exp_wildcard(path_end)) /* handle more wildcards */
-		{
-		    /* need to expand another component of the path */
-		    /* remove backslashes for the remaining components only */
-		    (void)unix_expandpath(gap, buf, len + 1, flags);
-		}
-		else
-		{
-		    /* no more wildcards, check if there is a match */
-		    /* remove backslashes for the remaining components only */
-		    if (*path_end)
-			backslash_halve(buf + len + 1);
-		    if (mch_getperm(buf) >= 0)	/* add existing file */
-			addfile(gap, buf, flags);
-		}
-	    }
-	}
-
-	closedir(dirp);
-    }
-
-    vim_free(buf);
-    vim_free(regmatch.regprog);
-
-    matches = gap->ga_len - start_len;
-    if (matches)
-	qsort(((char_u **)gap->ga_data) + start_len, matches,
-						   sizeof(char_u *), pstrcmp);
-    return matches;
-}
-#endif
-
 /*
  * Recursively build up a list of files in "gap" matching the first wildcard
  * in `path'.  Called by expand_wildcards().
@@ -461,7 +302,7 @@
     int		flags)		/* EW_* flags */
 {
 #ifdef USE_UNIXFILENAME
-    return unix_expandpath(gap, path, 0, flags);
+    return unix_expandpath(gap, path, 0, flags, FALSE);
 #else
     char_u first = *path;
     short  scan_volume;
