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