-/* Returns the directory part of FILENAME, as a malloc()'d
- string. */
-char *
-fn_dir_name (const char *filename)
-{
- const char *p;
- char *s;
- size_t len;
-
- len = strlen (filename);
- if (len == 1 && filename[0] == '/')
- p = filename + 1;
- else if (len && filename[len - 1] == DIR_SEPARATOR)
- p = buf_find_reverse (filename, len - 1, filename + len - 1, 1);
- else
- p = strrchr (filename, DIR_SEPARATOR);
- if (p == NULL)
- p = filename;
-
- s = xmalloc (p - filename + 1);
- memcpy (s, filename, p - filename);
- s[p - filename] = 0;
-
- return s;
-}
-
-/* Returns the extension part of FILENAME as a malloc()'d string.
- If FILENAME does not have an extension, returns an empty
- string. */
-char *
-fn_extension (const char *filename)
-{
- const char *extension = strrchr (filename, '.');
- if (extension == NULL)
- extension = "";
- return xstrdup (extension);
-}
-\f
-#if unix
-/* Returns the current working directory, as a malloc()'d string.
- From libc.info. */
-char *
-fn_get_cwd (void)
-{
- int size = 100;
- char *buffer = xmalloc (size);
-
- for (;;)
- {
- char *value = getcwd (buffer, size);
- if (value != 0)
- return buffer;
-
- size *= 2;
- free (buffer);
- buffer = xmalloc (size);
- }
-}
-#else
-char *
-fn_get_cwd (void)
-{
- int size = 2;
- char *buffer = xmalloc (size);
- if ( buffer)
- {
- buffer[0]='.';
- buffer[1]='\0';
- }
-
- return buffer;
-
-}
-#endif
-\f
-/* Find out information about files. */
-
-/* Returns nonzero iff NAME specifies an absolute filename. */
-int
-fn_is_absolute (const char *name)
-{
-#ifdef unix
- if (name[0] == '/'
- || !strncmp (name, "./", 2)
- || !strncmp (name, "../", 3)
- || name[0] == '~')
- return 1;
-#elif defined (__MSDOS__)
- if (name[0] == '\\'
- || !strncmp (name, ".\\", 2)
- || !strncmp (name, "..\\", 3)
- || (name[0] && name[1] == ':'))
- return 1;
-#endif
-
- return 0;