if (!*p)
break;
- if (!fs->id && !strncmp(p, "ID=", 3)) {
+ if (!fs->uniq_id && !strncmp(p, "UNIQID=", 7)) {
+ int rc = 0;
+
+ end = next_u64(p + 7, &fs->uniq_id, &rc);
+ if (!end || rc)
+ return rc;
+
+ } else if (!fs->id && !strncmp(p, "ID=", 3)) {
int rc = 0;
end = next_s32(p + 3, &fs->id, &rc);
struct libmnt_iter itr;
const char *optstr, *src, *target, *root, *attrs;
int id;
+ uint64_t uniq_id;
if (!tb || !uf)
return NULL;
attrs = mnt_fs_get_attributes(uf);
root = mnt_fs_get_root(uf);
id = mnt_fs_get_id(uf);
+ uniq_id = mnt_fs_get_uniq_id(uf);
if (!src || !target || !root || (!attrs && !optstr))
return NULL;
if (fs->flags & MNT_FS_MERGED)
continue;
- if (id > 0 && mnt_fs_get_id(fs)) {
+ if (uniq_id > 0 && mnt_fs_get_uniq_id(fs)) {
+ DBG(TAB, ul_debugobj(tb, " using uniq ID"));
+ if (mnt_fs_get_uniq_id(fs) == uniq_id)
+ break;
+
+ } else if (id > 0 && mnt_fs_get_id(fs)) {
DBG(TAB, ul_debugobj(tb, " using ID"));
if (mnt_fs_get_id(fs) == id)
break;
+
} else if (r && strcmp(r, root) == 0
&& mnt_fs_streq_target(fs, target)
&& mnt_fs_streq_srcpath(fs, src))
if (!fs || !f)
return -EINVAL;
- if (mnt_fs_get_id(fs) > 0) {
+ if (mnt_fs_get_id(fs) > 0)
rc = fprintf(f, "ID=%d ", mnt_fs_get_id(fs));
- }
+ if (mnt_fs_get_uniq_id(fs) > 0)
+ rc = fprintf(f, "UNIQID=%" PRIu64, mnt_fs_get_uniq_id(fs));
+
if (rc >= 0) {
p = mangle(mnt_fs_get_source(fs));
if (p) {