BSD 3 development
[unix-history] / usr / src / cmd / uucp / expfile.c
CommitLineData
db4e618a
BJ
1#include "uucp.h"
2#include <sys/types.h>
3#include <sys/stat.h>
4
5
6/*******
7 * expfile(file) expand file name
8 * char *file;
9 *
10 * return codes: none
11 */
12
13expfile(file)
14char *file;
15{
16 char *fpart;
17 char user[20], *up;
18 char full[100];
19 int uid;
20
21 switch(file[0]) {
22 case '/':
23 return;
24 case '~':
25 for (fpart = file + 1, up = user; *fpart != '\0'
26 && *fpart != '/'; fpart++)
27 *up++ = *fpart;
28 *up = '\0';
29 if (gninfo(user, &uid, full) != 0) {
30 strcpy(full, PUBDIR);
31 }
32
33 strcat(full, fpart);
34 strcpy(file, full);
35 return;
36 default:
37 strcpy(full, Wrkdir);
38 strcat(full, "/");
39 strcat(full, file);
40 strcpy(file, full);
41 return;
42 }
43}
44
45
46/***
47 * isdir(name) check if directory name
48 * char *name;
49 *
50 * return codes: 0 - not directory | 1 - is directory
51 */
52
53isdir(name)
54char *name;
55{
56 int ret;
57 struct stat s;
58
59 ret = stat(name, &s);
60 if (ret < 0)
61 return(0);
62 if ((s.st_mode & S_IFMT) == S_IFDIR)
63 return(1);
64 return(0);
65}
66
67
68/***
69 * mkdirs(name) make all necessary directories
70 * char *name;
71 *
72 * return 0 | FAIL
73 */
74
75mkdirs(name)
76char *name;
77{
78 int ret;
79 char cmd[100], dir[100], *p;
80
81 for (p = dir + 1;; p++) {
82 strcpy(dir, name);
83 if ((p = index(p, '/')) == NULL)
84 return(0);
85 *p = '\0';
86 if (isdir(dir))
87 continue;
88 sprintf(cmd, "mkdir %s;chmod 0777 %s", dir, dir);
89 DEBUG(4, "mkdir - %s\n", dir);
90 ret = shio(cmd, NULL, NULL, User);
91 if (ret != 0)
92 return(FAIL);
93 }
94}