mirror of
git://git.sv.gnu.org/coreutils.git
synced 2026-02-28 18:14:37 +02:00
(dirname): Include ctype.h.
[IN_CTYPE_DOMAIN]: Define. [ISALPHA]: Define. [MSDOS]: Add support for DOS-style file names with drive letters. Based on a patch from Eli Zaretskii.
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
/* dirname.c -- return all but the last element in a path
|
||||
Copyright (C) 1990 Free Software Foundation, Inc.
|
||||
Copyright (C) 1990, 1998 Free Software Foundation, Inc.
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
@@ -16,22 +16,31 @@
|
||||
Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */
|
||||
|
||||
#ifdef HAVE_CONFIG_H
|
||||
#include <config.h>
|
||||
# include <config.h>
|
||||
#endif
|
||||
|
||||
#ifdef STDC_HEADERS
|
||||
#include <stdlib.h>
|
||||
# include <stdlib.h>
|
||||
#else
|
||||
char *malloc ();
|
||||
#endif
|
||||
#if defined(STDC_HEADERS) || defined(HAVE_STRING_H)
|
||||
#include <string.h>
|
||||
#if defined STDC_HEADERS || defined HAVE_STRING_H
|
||||
# include <string.h>
|
||||
#else
|
||||
#include <strings.h>
|
||||
#ifndef strrchr
|
||||
#define strrchr rindex
|
||||
# include <strings.h>
|
||||
# ifndef strrchr
|
||||
# define strrchr rindex
|
||||
# endif
|
||||
#endif
|
||||
|
||||
#include <ctype.h>
|
||||
|
||||
#if defined STDC_HEADERS || (!defined isascii && !defined HAVE_ISASCII)
|
||||
# define IN_CTYPE_DOMAIN(c) 1
|
||||
#else
|
||||
# define IN_CTYPE_DOMAIN(c) isascii(c)
|
||||
#endif
|
||||
#define ISALPHA(Ch) (IN_CTYPE_DOMAIN (Ch) && isalpha (Ch))
|
||||
|
||||
/* Return the leading directories part of PATH,
|
||||
allocated with malloc. If out of memory, return 0.
|
||||
@@ -55,6 +64,13 @@ dirname (path)
|
||||
}
|
||||
else
|
||||
{
|
||||
char *lim = path;
|
||||
|
||||
#ifdef MSDOS
|
||||
/* If canonicalized "d:/path", leave alone the root case "d:/". */
|
||||
lim = (ISALPHA (path[0]) && path[1] == ':') ? path + 2 : path;
|
||||
#endif
|
||||
|
||||
/* Remove any trailing slashes from the result. */
|
||||
while (slash > path && *slash == '/')
|
||||
--slash;
|
||||
|
||||
Reference in New Issue
Block a user