-/* dirname.c -- return all but the last element in a path
+/* dirname.c -- return all but the last element in a file name
- Copyright (C) 1990, 1998, 2000, 2001, 2003, 2004 Free Software
+ Copyright (C) 1990, 1998, 2000, 2001, 2003, 2004, 2005 Free Software
Foundation, Inc.
This program is free software; you can redistribute it and/or modify
#include <string.h>
#include "xalloc.h"
-/* Return the length of `dirname (PATH)', or zero if PATH is
+/* Return the length of `dirname (FILE)', or zero if FILE is
in the working directory. Works properly even if
there are trailing slashes (by effectively ignoring them). */
size_t
-dir_len (char const *path)
+dir_len (char const *file)
{
- size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (path);
+ size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file);
size_t length;
/* Strip the basename and any redundant slashes before it. */
- for (length = base_name (path) - path; prefix_length < length; length--)
- if (! ISSLASH (path[length - 1]))
+ for (length = base_name (file) - file; prefix_length < length; length--)
+ if (! ISSLASH (file[length - 1]))
return length;
/* But don't strip the only slash from "/". */
- return prefix_length + ISSLASH (path[prefix_length]);
+ return prefix_length + ISSLASH (file[prefix_length]);
}
-/* Return the leading directories part of PATH,
+/* Return the leading directories part of FILE,
allocated with xmalloc.
Works properly even if there are trailing slashes
(by effectively ignoring them). */
char *
-dir_name (char const *path)
+dir_name (char const *file)
{
- size_t length = dir_len (path);
- bool append_dot = (length == FILE_SYSTEM_PREFIX_LEN (path));
- char *newpath = xmalloc (length + append_dot + 1);
- memcpy (newpath, path, length);
+ size_t length = dir_len (file);
+ bool append_dot = (length == FILE_SYSTEM_PREFIX_LEN (file));
+ char *dir = xmalloc (length + append_dot + 1);
+ memcpy (dir, file, length);
if (append_dot)
- newpath[length++] = '.';
- newpath[length] = 0;
- return newpath;
+ dir[length++] = '.';
+ dir[length] = 0;
+ return dir;
}
#ifdef TEST_DIRNAME
buff[MAX_BUFF_LEN] = 0;
while (fgets (buff, MAX_BUFF_LEN, stdin) && buff[0])
{
- char path[MAX_BUFF_LEN];
+ char file[MAX_BUFF_LEN];
char expected_result[MAX_BUFF_LEN];
char const *result;
- sscanf (buff, "%s %s", path, expected_result);
- result = dir_name (path);
+ sscanf (buff, "%s %s", file, expected_result);
+ result = dir_name (file);
if (strcmp (result, expected_result))
- printf ("%s: got %s, expected %s\n", path, result, expected_result);
+ printf ("%s: got %s, expected %s\n", file, result, expected_result);
}
return 0;
}