Mercurial > hg > toybox
annotate lib/getmountlist.c @ 1215:4eaac3e63fa7 draft
Cleanup freeramdisk: tabs to 2 spaces, square brackets for option name, do optional cleanup under if (CFG_TOYBOX_FREE) guard.
author | Rob Landley <rob@landley.net> |
---|---|
date | Sun, 09 Mar 2014 14:38:51 -0500 |
parents | 11cf9b97fae7 |
children | b2cc738d3cfc |
rev | line source |
---|---|
7
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
6
diff
changeset
|
1 /* getmountlist.c - Get a linked list of mount points, with stat information. |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
6
diff
changeset
|
2 * |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
6
diff
changeset
|
3 * Copyright 2006 Rob Landley <rob@landley.net> |
fc9c0503d5e2
Implement df. Add -Wall to build and fix up warnings. Add copyright notices.
landley@driftwood
parents:
6
diff
changeset
|
4 */ |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
5 |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
6 #include "toys.h" |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
7 |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
8 #include <mntent.h> |
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
9 |
897
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
10 // Get list of mounted filesystems, including stat and statvfs info. |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
11 // Returns a reversed list, which is good for finding overmounts and such. |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
12 |
1033
11cf9b97fae7
Allow getmountlist to read fstab too.
Rob Landley <rob@landley.net>
parents:
901
diff
changeset
|
13 struct mtab_list *xgetmountlist(char *path) |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
14 { |
897
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
15 struct mtab_list *mtlist, *mt; |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
16 struct mntent *me; |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
442
diff
changeset
|
17 FILE *fp; |
897
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
18 |
1033
11cf9b97fae7
Allow getmountlist to read fstab too.
Rob Landley <rob@landley.net>
parents:
901
diff
changeset
|
19 if (!path) path = "/proc/mounts"; |
11cf9b97fae7
Allow getmountlist to read fstab too.
Rob Landley <rob@landley.net>
parents:
901
diff
changeset
|
20 if (!(fp = setmntent(path, "r"))) perror_exit("bad %s", path); |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
21 |
901
c44dff160d65
Silence warning and comment a subtle bit.
Rob Landley <rob@landley.net>
parents:
897
diff
changeset
|
22 // The "test" part of the loop is done before the first time through and |
c44dff160d65
Silence warning and comment a subtle bit.
Rob Landley <rob@landley.net>
parents:
897
diff
changeset
|
23 // again after each "increment", so putting the actual load there avoids |
c44dff160d65
Silence warning and comment a subtle bit.
Rob Landley <rob@landley.net>
parents:
897
diff
changeset
|
24 // duplicating it. If the load was NULL, the loop stops. |
c44dff160d65
Silence warning and comment a subtle bit.
Rob Landley <rob@landley.net>
parents:
897
diff
changeset
|
25 |
c44dff160d65
Silence warning and comment a subtle bit.
Rob Landley <rob@landley.net>
parents:
897
diff
changeset
|
26 for (mtlist = 0; (me = getmntent(fp)); mtlist = mt) { |
897
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
27 mt = xzalloc(sizeof(struct mtab_list) + strlen(me->mnt_fsname) + |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
28 strlen(me->mnt_dir) + strlen(me->mnt_type) + 3); |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
29 mt->next = mtlist; |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
30 |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
31 // Collect details about mounted filesystem (don't bother for /etc/fstab). |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
32 stat(me->mnt_dir, &(mt->stat)); |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
33 statvfs(me->mnt_dir, &(mt->statvfs)); |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
34 |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
35 // Remember information from /proc/mounts |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
36 mt->dir = stpcpy(mt->type, me->mnt_type) + 1; |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
37 mt->device = stpcpy(mt->dir, me->mnt_dir) + 1; |
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
38 strcpy(mt->device, me->mnt_fsname); |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
442
diff
changeset
|
39 } |
703 | 40 endmntent(fp); |
897
849e14fecf2b
Convert getmountlist() to xgetmountlist().
Rob Landley <rob@landley.net>
parents:
882
diff
changeset
|
41 |
694
786841fdb1e0
Reindent to two spaces per level. Remove vi: directives that haven't worked right in years (ubuntu broke its' vim implementation). Remove trailing spaces. Add/remove blank lines. Re-wordwrap in places. Update documentation with new coding style.
Rob Landley <rob@landley.net>
parents:
442
diff
changeset
|
42 return mtlist; |
2
67b517913e56
Infrastructure, first drop of toy shell, and a bit of work on df.
landley@driftwood
parents:
diff
changeset
|
43 } |