Loading...
tests/subsystem_test_helper.c Libc-1725.40.4 /dev/null
--- Libc/Libc-1725.40.4/tests/subsystem_test_helper.c
+++ /dev/null
@@ -1,155 +0,0 @@
-/*
-* Copyright (c) 2019 Apple Inc. All rights reserved.
-*
-* @APPLE_OSREFERENCE_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. The rights granted to you under the License
-* may not be used to create, or enable the creation or redistribution of,
-* unlawful or unlicensed copies of an Apple operating system, or to
-* circumvent, violate, or enable the circumvention or violation of, any
-* terms of an Apple operating system software license agreement.
-*
-* 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_OSREFERENCE_LICENSE_HEADER_END@
-*/
-
-#include <fcntl.h>
-#include <string.h>
-#include <unistd.h>
-#include <subsystem.h>
-#include <sys/stat.h>
-#include <sys/errno.h>
-#include "subsystem_test.h"
-
-#include <stdio.h>
-
-/*
- * main expects 3 arguments:
- *   1: Requested behavior (see subsystem_test.h)
- *   2: Filepath to operate on
- *   3: String to write to the file (if applicable)
- */
-int
-main(int argc, char **argv)
-{
-    struct stat stat_buf;
-    int syscall_return = 0;
-    int retval = 1;
-    ino_t inode;
-    ino_t main_inode;
-
-    if (argc != 4) {
-        return retval;
-    }
-    
-    char * behavior = argv[1];
-    char * filepath = argv[2];
-    char * write_string = argv[3];
-    size_t write_string_len = strlen(write_string) + 1;
-    
-    if (!strcmp(behavior, HELPER_BEHAVIOR_OPEN_OVERFLOW)) {
-        /*
-         * Open with overflow case; expects a filepath longer
-         * than PATH_MAX.
-         */
-        syscall_return = open_with_subsystem(filepath, O_RDWR);
-        
-        if (syscall_return < 0) {
-            if (errno == ENAMETOOLONG) {
-                retval = 0;
-            }
-        } else {
-            close(syscall_return);
-        }
-    } else if (!strcmp(behavior, HELPER_BEHAVIOR_STAT_OVERFLOW)) {
-        /*
-         * Stat with overflow case; expects a filepath longer
-         * than PATH_MAX.
-         */
-        syscall_return = stat_with_subsystem(filepath, &stat_buf);
-        
-        if ((syscall_return < 0) && (errno == ENAMETOOLONG)) {
-            retval = 0;
-        }
-    }
-    if (!strcmp(behavior, HELPER_BEHAVIOR_OPEN_O_CREAT)) {
-        /*
-         * Open with O_CREAT case; O_CREAT should never work
-         * with open_with_subsystem.
-         */
-        syscall_return = open_with_subsystem(filepath, O_CREAT | O_RDWR);
-
-        if ((syscall_return < 0) && (errno == EINVAL)) {
-            retval = 0;
-        } else {
-            close(syscall_return);
-        }
-    } else if (!strcmp(behavior, HELPER_BEHAVIOR_STAT_NONE)) {
-        /*
-         * Stat when neither file is present.
-         */
-        syscall_return = stat_with_subsystem(filepath, &stat_buf);
-
-        if (syscall_return) {
-            retval = 0;
-        }
-    } else if (!strcmp(behavior, HELPER_BEHAVIOR_STAT_MAIN) ||
-               !strcmp(behavior, HELPER_BEHAVIOR_STAT_NOT_MAIN)) {
-        /*
-         * Stat when at least one file is present.
-         */
-        syscall_return = stat_with_subsystem(filepath, &stat_buf);
-        
-        if (!syscall_return) {
-            inode = stat_buf.st_ino;
-            
-            syscall_return = stat(filepath, &stat_buf);
-            if (!syscall_return) {
-                main_inode = stat_buf.st_ino;
-                
-                /* Compare inodes based on the requested behavior. */
-                if (!strcmp(behavior, HELPER_BEHAVIOR_STAT_MAIN)) {
-                    if (inode == main_inode) {
-                        /* It was the main file. */
-                        retval = 0;
-                    }
-                } else if (!strcmp(behavior, HELPER_BEHAVIOR_STAT_NOT_MAIN)) {
-                    if (inode != main_inode) {
-                        /* It was the subsystem file. */
-                        retval = 0;
-                    }
-                }
-            } else if (!strcmp(behavior, HELPER_BEHAVIOR_STAT_NOT_MAIN)) {
-                /* If main doesn't exist, we found the subsystem file. */
-                retval = 0;
-            }
-        }
-    } else if (!strcmp(behavior, HELPER_BEHAVIOR_OPEN_AND_WRITE)) {
-        /*
-         * Open and write case; it is on the client to check that this
-         * wrote to the expected file.
-         */
-        syscall_return = open_with_subsystem(filepath, O_RDWR | O_TRUNC);
-        
-        if (syscall_return >= 0) {
-            write(syscall_return, write_string, write_string_len);
-            close(syscall_return);
-            retval = 0;
-        }
-    }
-
-    return retval;
-}