/* go up to the root, stop at the base */
base = parent; while (kernfs_parent(base)) {
kn = kernfs_parent(target); while (kernfs_parent(kn) && base != kn)
kn = kernfs_parent(kn);
if (base == kn) break;
if ((s - path) + 3 >= PATH_MAX) return -ENAMETOOLONG;
strcpy(s, "../");
s += 3;
base = kernfs_parent(base);
}
/* determine end of target string for reverse fillup */
kn = target; while (kernfs_parent(kn) && kn != base) {
len += strlen(kernfs_rcu_name(kn)) + 1;
kn = kernfs_parent(kn);
}
/* check limits */ if (len < 2) return -EINVAL;
len--; if ((s - path) + len >= PATH_MAX) return -ENAMETOOLONG;
/* reverse fillup of target string from target to base */
kn = target; while (kernfs_parent(kn) && kn != base) { constchar *name = kernfs_rcu_name(kn); int slen = strlen(name);
len -= slen;
memcpy(s + len, name, slen); if (len)
s[--len] = '/';
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.