source: vendor/bash/3.1-p17/examples/loadables/dirname.c

Last change on this file was 3231, checked in by bird, 18 years ago

eol style.

  • Property svn:eol-style set to native
File size: 2.3 KB
Line 
1/* dirname - return directory portion of pathname */
2
3/* See Makefile for compilation details. */
4
5#include "config.h"
6
7#if defined (HAVE_UNISTD_H)
8# include <unistd.h>
9#endif
10
11#include <stdio.h>
12#include "builtins.h"
13#include "shell.h"
14
15dirname_builtin (list)
16 WORD_LIST *list;
17{
18 int slen;
19 char *string;
20
21 if (list == 0 || list->next)
22 {
23 builtin_usage ();
24 return (EX_USAGE);
25 }
26
27 if (no_options (list))
28 return (EX_USAGE);
29
30 string = list->word->word;
31 slen = strlen (string);
32
33 /* Strip trailing slashes */
34 while (slen > 0 && string[slen - 1] == '/')
35 slen--;
36
37 /* (2) If string consists entirely of slash characters, string shall be
38 set to a single slash character. In this case, skip steps (3)
39 through (8). */
40 if (slen == 0)
41 {
42 fputs ("/\n", stdout);
43 return (EXECUTION_SUCCESS);
44 }
45
46 /* (3) If there are any trailing slash characters in string, they
47 shall be removed. */
48 string[slen] = '\0';
49
50 /* (4) If there are no slash characters remaining in string, string
51 shall be set to a single period character. In this case, skip
52 steps (5) through (8).
53
54 (5) If there are any trailing nonslash characters in string,
55 they shall be removed. */
56
57 while (--slen >= 0)
58 if (string[slen] == '/')
59 break;
60
61 if (slen < 0)
62 {
63 fputs (".\n", stdout);
64 return (EXECUTION_SUCCESS);
65 }
66
67 /* (7) If there are any trailing slash characters in string, they
68 shall be removed. */
69 while (--slen >= 0)
70 if (string[slen] != '/')
71 break;
72 string[++slen] = '\0';
73
74 /* (8) If the remaining string is empty, string shall be set to a single
75 slash character. */
76 printf ("%s\n", (slen == 0) ? "/" : string);
77 return (EXECUTION_SUCCESS);
78}
79
80char *dirname_doc[] = {
81 "The STRING is converted to the name of the directory containing",
82 "the filename corresponding to the last pathname component in STRING.",
83 (char *)NULL
84};
85
86/* The standard structure describing a builtin command. bash keeps an array
87 of these structures. */
88struct builtin dirname_struct = {
89 "dirname", /* builtin name */
90 dirname_builtin, /* function implementing the builtin */
91 BUILTIN_ENABLED, /* initial flags for builtin */
92 dirname_doc, /* array of long documentation strings. */
93 "dirname string", /* usage synopsis */
94 0 /* reserved for internal use */
95};
Note: See TracBrowser for help on using the repository browser.