From 5fd83771641d15c418f747bd343ba6738d3875f7 Mon Sep 17 00:00:00 2001 From: Cameron Katri Date: Sun, 9 May 2021 14:20:58 -0400 Subject: Import macOS userland adv_cmds-176 basic_cmds-55 bootstrap_cmds-116.100.1 developer_cmds-66 diskdev_cmds-667.40.1 doc_cmds-53.60.1 file_cmds-321.40.3 mail_cmds-35 misc_cmds-34 network_cmds-606.40.1 patch_cmds-17 remote_cmds-63 shell_cmds-216.60.1 system_cmds-880.60.2 text_cmds-106 --- diskdev_cmds/vndevice.tproj/vndevice.c | 134 +++++++++++++++++++++++++++++++++ 1 file changed, 134 insertions(+) create mode 100644 diskdev_cmds/vndevice.tproj/vndevice.c (limited to 'diskdev_cmds/vndevice.tproj/vndevice.c') diff --git a/diskdev_cmds/vndevice.tproj/vndevice.c b/diskdev_cmds/vndevice.tproj/vndevice.c new file mode 100644 index 0000000..9610ddf --- /dev/null +++ b/diskdev_cmds/vndevice.tproj/vndevice.c @@ -0,0 +1,134 @@ +/* + * Copyright (c) 2002 Apple Computer, Inc. All rights reserved. + * + * @APPLE_LICENSE_HEADER_START@ + * + * This file contains Original Code and/or Modifications of Original Code + * as defined in and that are subject to the Apple Public Source License + * Version 2.0 (the 'License'). You may not use this file except in + * compliance with the License. Please obtain a copy of the License at + * http://www.opensource.apple.com/apsl/ and read it before using this + * file. + * + * The Original Code and all software distributed under the License are + * distributed on an 'AS IS' basis, WITHOUT WARRANTY OF ANY KIND, EITHER + * EXPRESS OR IMPLIED, AND APPLE HEREBY DISCLAIMS ALL SUCH WARRANTIES, + * INCLUDING WITHOUT LIMITATION, ANY WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE, QUIET ENJOYMENT OR NON-INFRINGEMENT. + * Please see the License for the specific language governing rights and + * limitations under the License. + * + * @APPLE_LICENSE_HEADER_END@ + */ + +/* + * History: + * March 25, 2002 Dieter Siegmund (dieter@apple.com) + * - created + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +void +usage() +{ + fprintf(stderr, "usage: vncontrol \n" + "vncontrol attach \n" + "vncontrol shadow \n" + "vncontrol detach \n"); + exit(1); +} + +enum { + kAttach, + kDetach, + kShadow, +}; + +int +main(int argc, char * argv[]) +{ + int fd; + struct vn_ioctl vn; + int op = kAttach; + struct stat sb; + + if (argc < 2) { + usage(); + } + if (strcmp(argv[1], "attach") == 0) { + if (argc < 4) { + usage(); + } + op = kAttach; + } + else if (strcmp(argv[1], "detach") == 0) { + if (argc < 3) { + usage(); + } + op = kDetach; + } + else if (strcmp(argv[1], "shadow") == 0) { + if (argc < 4) { + usage(); + } + op = kShadow; + } + else { + usage(); + } + fd = open(argv[2], O_RDONLY, 0); + if (fd < 0) { + perror(argv[2]); + exit(2); + } + switch (op) { + case kAttach: + case kShadow: + if (stat(argv[3], &sb) < 0) { + perror(argv[3]); + exit(2); + } + break; + default: + break; + } + bzero(&vn, sizeof(vn)); + switch (op) { + case kAttach: + vn.vn_file = argv[3]; + vn.vn_control = vncontrol_readwrite_io_e; + + if (ioctl(fd, VNIOCATTACH, &vn) < 0) { + perror("VNIOCATTACH"); + exit(2); + } + break; + case kDetach: + if (ioctl(fd, VNIOCDETACH, &vn) < 0) { + perror("VNIOCDETACH"); + exit(2); + } + break; + case kShadow: + vn.vn_file = argv[3]; + if (ioctl(fd, VNIOCSHADOW, &vn) < 0) { + perror("VNIOCSHADOW"); + exit(2); + } + break; + } + close(fd); + exit(0); + return (0); +} -- cgit v1.2.3