35 lines
843 B
C
35 lines
843 B
C
/* { dg-do compile } */
|
|
/* { dg-options "-Os" } */
|
|
|
|
struct list_head {
|
|
struct list_head *next;
|
|
};
|
|
static inline __attribute__((always_inline)) void list_del_init(struct
|
|
list_head *entry)
|
|
{
|
|
__list_del(entry->next);
|
|
(entry)->next = (entry);
|
|
};
|
|
struct dentry {
|
|
void *d_fsdata;
|
|
};
|
|
struct sysfs_dirent {
|
|
struct list_head s_sibling;
|
|
struct list_head s_children;
|
|
};
|
|
const char *sysfs_get_name(struct sysfs_dirent *);
|
|
void sysfs_hash_and_remove(struct dentry * dir, const char * name)
|
|
{
|
|
struct sysfs_dirent * sd;
|
|
struct sysfs_dirent * parent_sd = dir->d_fsdata;
|
|
for (sd = (struct sysfs_dirent *)((&parent_sd->s_children)->next);
|
|
&sd->s_sibling != (&parent_sd->s_children);
|
|
sd = (struct sysfs_dirent *)sd->s_sibling.next) {
|
|
if (!__builtin_strcmp(sysfs_get_name(sd), name))
|
|
{
|
|
list_del_init(&sd->s_sibling);
|
|
break;
|
|
}
|
|
}
|
|
}
|