Module Name: src
Committed By: christos
Date: Sat Feb 3 17:38:22 UTC 2024
Modified Files:
src/sys/fs/cd9660: cd9660_vfsops.c
Log Message:
Provide backwards compatibility (pointed out by hannken)
To generate a diff of this commit:
cvs rdiff -u -r1.99 -r1.100 src/sys/fs/cd9660/cd9660_vfsops.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/fs/cd9660/cd9660_vfsops.c
diff -u src/sys/fs/cd9660/cd9660_vfsops.c:1.99 src/sys/fs/cd9660/cd9660_vfsops.c:1.100
--- src/sys/fs/cd9660/cd9660_vfsops.c:1.99 Sat Feb 3 10:26:35 2024
+++ src/sys/fs/cd9660/cd9660_vfsops.c Sat Feb 3 12:38:22 2024
@@ -1,4 +1,4 @@
-/* $NetBSD: cd9660_vfsops.c,v 1.99 2024/02/03 15:26:35 hannken Exp $ */
+/* $NetBSD: cd9660_vfsops.c,v 1.100 2024/02/03 17:38:22 christos Exp $ */
/*-
* Copyright (c) 1994
@@ -37,7 +37,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.99 2024/02/03 15:26:35 hannken Exp $");
+__KERNEL_RCSID(0, "$NetBSD: cd9660_vfsops.c,v 1.100 2024/02/03 17:38:22 christos Exp $");
#if defined(_KERNEL_OPT)
#include "opt_compat_netbsd.h"
@@ -192,8 +192,7 @@ cd9660_mountroot(void)
}
args.flags = ISOFSMNT_ROOT;
- args.fmask = S_IRWXU|S_IRWXG|S_IRWXO;
- args.dmask = S_IRWXU|S_IRWXG|S_IRWXO;
+ args.fmask = args.dmask = S_IRWXU|S_IRWXG|S_IRWXO;
if ((error = iso_mountfs(rootvp, mp, l, &args)) != 0) {
vfs_unbusy(mp);
vfs_rele(mp);
@@ -205,11 +204,19 @@ cd9660_mountroot(void)
return (0);
}
+/* Compat with pre uid/gid/fsize/dsize mount call */
+#define OSIZE sizeof(struct { \
+ const char *fspec; \
+ struct export_args30 _pad1; \
+ int flags; \
+})
+
/*
* VFS Operations.
*
* mount system call
*/
+
int
cd9660_mount(struct mount *mp, const char *path, void *data, size_t *data_len)
{
@@ -221,15 +228,28 @@ cd9660_mount(struct mount *mp, const cha
if (args == NULL)
return EINVAL;
- if (*data_len < sizeof *args)
+
+ if (*data_len == OSIZE) {
+ args->uid = 0;
+ args->gid = 0;
+ args->fmask = args->dmask = S_IRWXU|S_IRWXG|S_IRWXO;
+ } else if (*data_len < sizeof(*args))
return EINVAL;
if (mp->mnt_flag & MNT_GETARGS) {
if (imp == NULL)
return EIO;
+
args->fspec = NULL;
args->flags = imp->im_flags;
- *data_len = sizeof (*args);
+ if (*data_len == OSIZE)
+ return 0;
+
+ args->uid = imp->im_uid;
+ args->gid = imp->im_gid;
+ args->fmask = imp->im_fmask;
+ args->dmask = imp->im_dmask;
+ *data_len = sizeof(*args);
return 0;
}