+ len = strlen(path) + strlen(name) + 6;
+ fullpath = malloc(len);
+ if (!fullpath) {
+ fprintf(stderr, "failed to allocate buffer\n");
+ return -1;
+ }
+ snprintf(fullpath, len, "%s/%s/dev", path, name);
+ do {
+ r = do_read(fullpath, dev, sizeof(dev));
+ if (r < 0 && !wait) {
+ fprintf(stderr, "failed to read %s: %s\n", fullpath,
+ strerror(errno));
+ goto out;
+ }
+ } while (r < 0 && wait);
+ r = sscanf(dev, "%d:%d", &maj, &min);
+ if (r < 0) {
+ fprintf(stderr, "failed to read devno from %s\n", dev);
+ goto out;
+ }
+ snprintf(fullpath, len, "/dev/%s", name);
+ r = mknod(fullpath, 0666 | (block ? S_IFBLK : S_IFCHR), makedev(maj, min));
+ if (r < 0) {
+ fprintf(stderr, "failed to mknod %s: %s\n", fullpath,
+ strerror(errno));
+ }
+out:
+ free(fullpath);
+ return r;
+}
+
+int main(int argc, char **argv)
+{
+ int r;
+ int fd = -1;
+ int i;
+ char *args[] = { "bash", "-l", NULL };