annotate toys/mountpoint.c @ 562:4d802d438983

Match uint64_t with PRIu64 to avoid warnings on 64 bit builds.
author Rob Landley <rob@landley.net>
date Sat, 14 Apr 2012 21:27:00 -0500
parents 8a1d45dd8af1
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
558
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
1 /* vi: set sw=4 ts=4:
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
2 *
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
3 * mountpoint.c - Check if a directory is a mountpoint.
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
4 *
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
5 * Copyright 2012 Elie De Brauwer <eliedebrauwer@gmail.com>
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
6 *
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
7 * Not in SUSv4.
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
8
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
9 USE_MOUNTPOINT(NEWTOY(mountpoint, "<1qdx", TOYFLAG_BIN))
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
10
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
11 config MOUNTPOINT
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
12 bool "mountpoint"
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
13 default y
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
14 help
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
15 usage: mountpoint [-q] [-d] directory
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
16 mountpoint [-q] [-x] device
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
17 -q Be quiet, return zero if directory is a mountpoint
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
18 -d Print major/minor device number of the directory
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
19 -x Print major/minor device number of the block device
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
20 */
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
21
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
22 #include "toys.h"
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
23
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
24 void mountpoint_main(void)
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
25 {
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
26 struct stat st1, st2;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
27 int res = 0;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
28 int quiet = toys.optflags & 0x4;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
29 toys.exitval = 1; // be pessimistic
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
30 strncpy(toybuf, toys.optargs[0], sizeof(toybuf));
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
31 if (((toys.optflags & 0x1) && lstat(toybuf, &st1)) || stat(toybuf, &st1))
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
32 perror_exit("%s", toybuf);
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
33
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
34 if (toys.optflags & 0x1){
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
35 if (S_ISBLK(st1.st_mode)) {
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
36 if (!quiet) printf("%u:%u\n", major(st1.st_rdev), minor(st1.st_rdev));
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
37 toys.exitval = 0;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
38 return;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
39 }
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
40 if (!quiet) printf("%s: not a block device\n", toybuf);
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
41 return;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
42 }
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
43
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
44 if(!S_ISDIR(st1.st_mode)){
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
45 if (!quiet) printf("%s: not a directory\n", toybuf);
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
46 return;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
47 }
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
48 strncat(toybuf, "/..", sizeof(toybuf));
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
49 stat(toybuf, &st2);
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
50 res = (st1.st_dev != st2.st_dev) ||
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
51 (st1.st_dev == st2.st_dev && st1.st_ino == st2.st_ino);
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
52 if (!quiet) printf("%s is %sa mountpoint\n", toys.optargs[0], res ? "" : "not ");
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
53 if (toys.optflags & 0x2)
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
54 printf("%u:%u\n", major(st1.st_dev), minor(st1.st_dev));
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
55 toys.exitval = res ? 0 : 1;
8a1d45dd8af1 Adding mountpoint
Elie De Brauwer <eliedebrauwer@gmail.com>
parents:
diff changeset
56 }