~ubuntu-branches/ubuntu/natty/9base/natty

« back to all changes in this revision

Viewing changes to mkdir/mkdir.c

  • Committer: Bazaar Package Importer
  • Author(s): Kai Hendry, Daniel Baumann, Kai Hendry
  • Date: 2010-04-25 14:35:21 UTC
  • mfrom: (1.1.5 upstream)
  • Revision ID: james.westby@ubuntu.com-20100425143521-ublpgnlvxxjjr22s
Tags: 1:5-1
[ Daniel Baumann ]
* Adding explicit debian source version 1.0 until switch to 3.0.
* Updating year in copyright file.
* Updating to standards 3.8.4.
* Sorting dh call in rules to more common order.
* Updating README.source.
* Updating lintian overrides.

[ Kai Hendry ]
* Merging upstream version 5.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#include <u.h>
 
2
#include <libc.h>
 
3
 
 
4
char *e;
 
5
ulong mode = 0777L;
 
6
 
 
7
void
 
8
usage(void)
 
9
{
 
10
        fprint(2, "usage: mkdir [-p] [-m mode] dir...\n");
 
11
        exits("usage");
 
12
}
 
13
 
 
14
int
 
15
makedir(char *s)
 
16
{
 
17
        int f;
 
18
 
 
19
        if(access(s, AEXIST) == 0){
 
20
                fprint(2, "mkdir: %s already exists\n", s);
 
21
                e = "error";
 
22
                return -1;
 
23
        }
 
24
        f = create(s, OREAD, DMDIR | mode);
 
25
        if(f < 0){
 
26
                fprint(2, "mkdir: can't create %s: %r\n", s);
 
27
                e = "error";
 
28
                return -1;
 
29
        }
 
30
        close(f);
 
31
        return 0;
 
32
}
 
33
 
 
34
void
 
35
mkdirp(char *s)
 
36
{
 
37
        char *p;
 
38
 
 
39
        for(p=strchr(s+1, '/'); p; p=strchr(p+1, '/')){
 
40
                *p = 0;
 
41
                if(access(s, AEXIST) != 0 && makedir(s) < 0)
 
42
                        return;
 
43
                *p = '/';
 
44
        }
 
45
        if(access(s, AEXIST) != 0)
 
46
                makedir(s);
 
47
}
 
48
 
 
49
 
 
50
void
 
51
main(int argc, char *argv[])
 
52
{
 
53
        int i, pflag;
 
54
        char *m;
 
55
 
 
56
        pflag = 0;
 
57
        ARGBEGIN{
 
58
        default:
 
59
                usage();
 
60
        case 'm':
 
61
                m = ARGF();
 
62
                if(m == nil)
 
63
                        usage();
 
64
                mode = strtoul(m, &m, 8);
 
65
                if(mode > 0777)
 
66
                        usage();
 
67
                break;
 
68
        case 'p':
 
69
                pflag = 1;
 
70
                break;
 
71
        }ARGEND
 
72
 
 
73
        for(i=0; i<argc; i++){
 
74
                if(pflag)
 
75
                        mkdirp(argv[i]);
 
76
                else
 
77
                        makedir(argv[i]);
 
78
        }
 
79
        exits(e);
 
80
}