void devfs_add_partitioned(struct gendisk *disk) { char dirname[64], symlink[16]; char disc[64]; devfs_mk_dir(disk->devfs_name); devfs_mk_bdev(MKDEV(disk->major, disk->first_minor), S_IFBLK|S_IRUSR|S_IWUSR, "%s/disc", disk->devfs_name); disk->number = alloc_unique_number(&disc_numspace); sprintf(symlink, "discs/disc%d", disk->number); sprintf(dirname, "../%s", disk->devfs_name); sprintf(disc, "%s/disc", disk->devfs_name); devfs_mk_symlink(symlink, dirname); devfs_mk_symlink(disk->disk_name, disc); }
int devfs_register_tape(const char *name) { char tname[32], dest[64]; static unsigned int tape_counter; unsigned int n = tape_counter++; sprintf(dest, "../%s", name); sprintf(tname, "tapes/tape%u", n); devfs_mk_symlink(tname, dest); return n; }
/* ARGSUSED */ int hwgraph_edge_add(vertex_hdl_t from, vertex_hdl_t to, char *name) { char *path; char *s1; char *index; int name_start; vertex_hdl_t handle = NULL; int rv; int i, count; path = kmalloc(1024, GFP_KERNEL); memset(path, 0x0, 1024); name_start = devfs_generate_path (from, path, 1024); s1 = &path[name_start]; count = 0; while (1) { index = strstr (s1, "/"); if (index) { count++; s1 = ++index; } else { count++; break; } } memset(path, 0x0, 1024); name_start = devfs_generate_path (to, path, 1024); for (i = 0; i < count; i++) { strcat(path,"../"); } strcat(path, &path[name_start]); /* * Otherwise, just create a symlink to the vertex. * In this case the vertex was previous created with a REAL pathname. */ rv = devfs_mk_symlink (from, (const char *)name, DEVFS_FL_DEFAULT, path, &handle, NULL); name_start = devfs_generate_path (handle, path, 1024); return(rv); }
void devfs_add_disk(struct gendisk *disk) { devfs_mk_bdev(MKDEV(disk->major, disk->first_minor), (disk->flags & GENHD_FL_CD) ? S_IFBLK|S_IRUGO|S_IWUGO : S_IFBLK|S_IRUSR|S_IWUSR, "%s", disk->devfs_name); if (disk->flags & GENHD_FL_CD) { char dirname[64], symlink[16]; disk->number = alloc_unique_number(&cdrom_numspace); sprintf(symlink, "cdroms/cdrom%d", disk->number); sprintf(dirname, "../%s", disk->devfs_name); devfs_mk_symlink(symlink, dirname); } }
static int __init mmapper_init(void) { printk(KERN_INFO "Mapper v0.1\n"); v_buf = (char *) find_iomem("mmapper", &mmapper_size); if(mmapper_size == 0){ printk(KERN_ERR "mmapper_init - find_iomem failed\n"); return(0); } p_buf = __pa(v_buf); devfs_register (NULL, "mmapper", DEVFS_FL_DEFAULT, 30, 0, S_IFCHR | S_IRUGO | S_IWUGO, &mmapper_fops, NULL); devfs_mk_symlink(NULL, "mmapper0", DEVFS_FL_DEFAULT, "mmapper", NULL, NULL); return(0); }
/* * hwgraph_mk_symlink - Create a symbolic link. */ int hwgraph_mk_symlink(vertex_hdl_t de, const char *name, unsigned int namelen, unsigned int flags, const char *link, unsigned int linklen, vertex_hdl_t *handle, void *info) { void *labelcl_info = NULL; int status = 0; vertex_hdl_t new_devfs_handle = NULL; /* * Create the labelcl info structure for hwgraph compatiblity support. */ labelcl_info = labelcl_info_create(); if (!labelcl_info) return(-1); /* * Create a symbolic link devfs entry. */ status = devfs_mk_symlink(de, name, flags, link, &new_devfs_handle, labelcl_info); if ( (!new_devfs_handle) || (!status) ){ labelcl_info_destroy((labelcl_info_t *)labelcl_info); return(-1); } /* * If the caller provides a private data pointer, save it in the * labelcl info structure(fastinfo). This can be retrieved via * hwgraph_fastinfo_get() */ if (info) hwgraph_fastinfo_set(new_devfs_handle, (arbitrary_info_t)info); *handle = new_devfs_handle; return(0); }