|
|
1.1 root 1: /*
2: * chgrp gid file ...
3: */
4:
5: #include <stdio.h>
6: #include <ctype.h>
7: #include <sys/types.h>
8: #include <sys/stat.h>
9: #include <grp.h>
10:
11: struct group *gr,*getgrnam();
12: struct stat stbuf;
13: int gid;
14: int status;
15:
16: main(argc, argv)
17: char *argv[];
18: {
19: register c;
20:
21: if(argc < 3) {
22: printf("usage: chgrp gid file ...\n");
23: exit(4);
24: }
25: if(isnumber(argv[1])) {
26: gid = atoi(argv[1]);
27: } else {
28: if((gr=getgrnam(argv[1])) == NULL) {
29: printf("unknown group: %s\n",argv[1]);
30: exit(4);
31: }
32: gid = gr->gr_gid;
33: }
34: for(c=2; c<argc; c++) {
35: stat(argv[c], &stbuf);
36: if(chown(argv[c], stbuf.st_uid, gid) < 0) {
37: perror(argv[c]);
38: status = 1;
39: }
40: }
41: exit(status);
42: }
43:
44: isnumber(s)
45: char *s;
46: {
47: register c;
48:
49: while(c = *s++)
50: if(!isdigit(c))
51: return(0);
52: return(1);
53: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.