Re: Can't figure out how to use mnt_table_get_root_fs from libmount

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sat, Sep 08, 2012 at 06:07:51PM +0000, Amit wrote:
> Hello,
> 
> I have a simple program using libmount that simply gets the path of the
> root filesystem. I can't seem to get it to work. I always get a
> segmentation fault. There is probably something basic that I am missing
> but can't figure it out.
> 
> #include <stdlib.h>
> #include <string.h>
> #include <stdio.h>
> #include <assert.h>
> 
> #include <libmount.h>
> 
> int main(int argc, char *argv[])
> {
>     struct libmnt_context *cxt;
>     struct libmnt_table *tab;
>     struct libmnt_fs *fs;
> 
>     /* Enable debugging */
>     mnt_init_debug(0xffff);
> 
>     /* Create new mount context */
>     cxt = mnt_new_context();
>     if (!cxt)
>         printf("Error creating new mount context\n");
> 
>     /* A mount table */
>     if (mnt_context_get_mtab(cxt, &tab) < 0)
>         printf("Error getting mtab\n");
> 
>     /* Get the root filesystem */
>     if (mnt_table_get_root_fs(tab, &fs) == -1)


   if (mnt_table_get_root_fs(tab, &fs) != 0)

Sorry, the docs for the function is incorrect. Almost all libmount
functions return zero on success and less than zero on error.


Note that mnt_table_get_root_fs() uses mountpoint Id and parent Id
from /proc/self/mountinfo to found root fs.

It means that you have to use the mountinfo file -- on systems with
regular mtab file the function mnt_context_get_mtab() parses /etc/mtab
rather than the mountinfo file.

  tab = mnt_new_table_from_file("/proc/self/mountinfo");
  if (tab && mnt_table_get_root_fs(tab, &fs) == 0)
     ....

the struct libmnt_context is unnecessary in this case.

The mnt_table_get_root_fs() is mostly designed for application where
you need to sort mountpoints to a tree. (for example findmnt(8))

If you not sure than mnt_table_find_target() is probably better
choice.

    Karel

-- 
 Karel Zak  <kzak@xxxxxxxxxx>
 http://karelzak.blogspot.com
--
To unsubscribe from this list: send the line "unsubscribe util-linux" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[Index of Archives]     [Netdev]     [Ethernet Bridging]     [Linux Wireless]     [Kernel Newbies]     [Security]     [Linux for Hams]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux RAID]     [Linux Admin]     [Samba]

  Powered by Linux