Je suis conscient que ces questions sont posées tout le temps, mais dans ce scénario, je ne suis pas sûr de la solution appropriée. La fonction est une fonction éditée de do_new_mount dans une branche du noyau linux 3.4.x pour le contexte. L'objectif est de vérifier le type de système de fichiers et d'émettre le drapeau async si les conditions correctes sont indiquées.Passage de l'argument 1 de 'strcmp' à partir d'un type de pointeur incompatible
La ligne:
if (!err && ((!strcmp(type, "ext4") &&
fonction complète (partie async est ajoutée, ce qui provoque l'erreur):
static int do_new_mount(struct path *path, const char *fstype, int flags,
int mnt_flags, const char *name, void *data)
{
struct file_system_type *type;
struct user_namespace *user_ns;
struct vfsmount *mnt;
int err;
if (!fstype)
return -EINVAL;
/* we need capabilities... */
user_ns = real_mount(path->mnt)->mnt_ns->user_ns;
if (!ns_capable(user_ns, CAP_SYS_ADMIN))
return -EPERM;
type = get_fs_type(fstype);
if (!type)
return -ENODEV;
if (user_ns != &init_user_ns) {
if (!(type->fs_flags & FS_USERNS_MOUNT)) {
put_filesystem(type);
return -EPERM;
}
/* Only in special cases allow devices from mounts
* created outside the initial user namespace.
*/
if (!(type->fs_flags & FS_USERNS_DEV_MOUNT)) {
flags |= MS_NODEV;
mnt_flags |= MNT_NODEV;
}
}
mnt = vfs_kern_mount(type, flags, name, data);
if (!IS_ERR(mnt) && (type->fs_flags & FS_HAS_SUBTYPE) &&
!mnt->mnt_sb->s_subtype)
mnt = fs_set_subtype(mnt, fstype);
put_filesystem(type);
if (IS_ERR(mnt))
return PTR_ERR(mnt);
err = do_add_mount(real_mount(mnt), path, mnt_flags);
if (err)
mntput(mnt);
#ifdef CONFIG_ASYNC_FSYNC
if (!err && ((!strcmp(type, "ext4") &&
!strcmp(path->dentry->d_name.name, "data")) ||
(!strcmp(type, "fuse") &&
!strcmp(path->dentry->d_name.name, "emulated"))))
mnt->mnt_sb->fsync_flags |= FLAG_ASYNC_FSYNC;
#endif
return err;
}
'struct type_système_de_fichier * type;' 'strcmp (const char * s1, const char * s2);' type n'est pas un 'char *' –
'strcmp (type-> nom, "ext4") '? – kaylum
Bien, mais je ne suis pas sûr de savoir comment vérifier le type correctement. Va essayer cette solution kaylum, merci! – user2337438