view lib/getmountlist.c @ 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. The actual code should be the same afterward, this is just cosmetic refactoring.
author Rob Landley <rob@landley.net>
date Tue, 13 Nov 2012 17:14:08 -0600
parents ab2636878ba0
children 8eb26e828756
line wrap: on
line source

/* getmountlist.c - Get a linked list of mount points, with stat information.
 *
 * Copyright 2006 Rob Landley <rob@landley.net>
 */

#include "toys.h"

#include <mntent.h>

char *path_mounts = "/proc/mounts";

// Get a list of mount points from /etc/mtab or /proc/mounts, including
// statvfs() information.  This returns a reversed list, which is good for
// finding overmounts and such.

struct mtab_list *getmountlist(int die)
{
  FILE *fp;
  struct mtab_list *mtlist, *mt;
  struct mntent me;
  char evilbuf[2*PATH_MAX];

  mtlist = 0;
  if (!(fp = setmntent(path_mounts, "r"))) {
    if (die) error_exit("cannot open %s", path_mounts);
  } else {
    while (getmntent_r(fp, &me, evilbuf, sizeof(evilbuf))) {
      mt = xzalloc(sizeof(struct mtab_list) + strlen(me.mnt_fsname) +
        strlen(me.mnt_dir) + strlen(me.mnt_type) + 3);
      mt->next = mtlist;
      // Get information about this filesystem.  Yes, we need both.
      stat(me.mnt_dir, &(mt->stat));
      statvfs(me.mnt_dir, &(mt->statvfs));
      // Remember information from /proc/mounts
      mt->dir = stpcpy(mt->type, me.mnt_type) + 1;
      mt->device = stpcpy(mt->dir, me.mnt_dir) + 1;
      strcpy(mt->device, me.mnt_fsname);
      mtlist = mt;
    }
  }
  return mtlist;
}