From owner-svn-src-vendor@freebsd.org Tue Nov 10 07:31:43 2015 Return-Path: Delivered-To: svn-src-vendor@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 766A5A2BC34; Tue, 10 Nov 2015 07:31:43 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 130D91281; Tue, 10 Nov 2015 07:31:43 +0000 (UTC) (envelope-from ngie@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id tAA7VgqT023391; Tue, 10 Nov 2015 07:31:42 GMT (envelope-from ngie@FreeBSD.org) Received: (from ngie@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id tAA7Vgt3023388; Tue, 10 Nov 2015 07:31:42 GMT (envelope-from ngie@FreeBSD.org) Message-Id: <201511100731.tAA7Vgt3023388@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: ngie set sender to ngie@FreeBSD.org using -f From: Garrett Cooper Date: Tue, 10 Nov 2015 07:31:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-vendor@freebsd.org Subject: svn commit: r290635 - in vendor/fsx: . dist X-SVN-Group: vendor MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-vendor@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the vendor work area tree List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 10 Nov 2015 07:31:43 -0000 Author: ngie Date: Tue Nov 10 07:31:41 2015 New Revision: 290635 URL: https://svnweb.freebsd.org/changeset/base/290635 Log: Copy fsx from http://codemonkey.org.uk/projects/fsx/fsx-macosforge/ Added: vendor/fsx/ vendor/fsx/dist/ vendor/fsx/dist/APPLE_LICENSE vendor/fsx/dist/Makefile (contents, props changed) vendor/fsx/dist/fsx.c (contents, props changed) Added: vendor/fsx/dist/APPLE_LICENSE ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/fsx/dist/APPLE_LICENSE Tue Nov 10 07:31:41 2015 (r290635) @@ -0,0 +1,367 @@ +APPLE PUBLIC SOURCE LICENSE +Version 2.0 - August 6, 2003 + +Please read this License carefully before downloading this software. +By downloading or using this software, you are agreeing to be bound by +the terms of this License. If you do not or cannot agree to the terms +of this License, please do not download or use the software. + +1. General; Definitions. This License applies to any program or other +work which Apple Computer, Inc. ("Apple") makes publicly available and +which contains a notice placed by Apple identifying such program or +work as "Original Code" and stating that it is subject to the terms of +this Apple Public Source License version 2.0 ("License"). As used in +this License: + +1.1 "Applicable Patent Rights" mean: (a) in the case where Apple is +the grantor of rights, (i) claims of patents that are now or hereafter +acquired, owned by or assigned to Apple and (ii) that cover subject +matter contained in the Original Code, but only to the extent +necessary to use, reproduce and/or distribute the Original Code +without infringement; and (b) in the case where You are the grantor of +rights, (i) claims of patents that are now or hereafter acquired, +owned by or assigned to You and (ii) that cover subject matter in Your +Modifications, taken alone or in combination with Original Code. + +1.2 "Contributor" means any person or entity that creates or +contributes to the creation of Modifications. + +1.3 "Covered Code" means the Original Code, Modifications, the +combination of Original Code and any Modifications, and/or any +respective portions thereof. + +1.4 "Externally Deploy" means: (a) to sublicense, distribute or +otherwise make Covered Code available, directly or indirectly, to +anyone other than You; and/or (b) to use Covered Code, alone or as +part of a Larger Work, in any way to provide a service, including but +not limited to delivery of content, through electronic communication +with a client other than You. + +1.5 "Larger Work" means a work which combines Covered Code or portions +thereof with code not governed by the terms of this License. + +1.6 "Modifications" mean any addition to, deletion from, and/or change +to, the substance and/or structure of the Original Code, any previous +Modifications, the combination of Original Code and any previous +Modifications, and/or any respective portions thereof. When code is +released as a series of files, a Modification is: (a) any addition to +or deletion from the contents of a file containing Covered Code; +and/or (b) any new file or other representation of computer program +statements that contains any part of Covered Code. + +1.7 "Original Code" means (a) the Source Code of a program or other +work as originally made available by Apple under this License, +including the Source Code of any updates or upgrades to such programs +or works made available by Apple under this License, and that has been +expressly identified by Apple as such in the header file(s) of such +work; and (b) the object code compiled from such Source Code and +originally made available by Apple under this License. + +1.8 "Source Code" means the human readable form of a program or other +work that is suitable for making modifications to it, including all +modules it contains, plus any associated interface definition files, +scripts used to control compilation and installation of an executable +(object code). + +1.9 "You" or "Your" means an individual or a legal entity exercising +rights under this License. For legal entities, "You" or "Your" +includes any entity which controls, is controlled by, or is under +common control with, You, where "control" means (a) the power, direct +or indirect, to cause the direction or management of such entity, +whether by contract or otherwise, or (b) ownership of fifty percent +(50%) or more of the outstanding shares or beneficial ownership of +such entity. + +2. Permitted Uses; Conditions & Restrictions. Subject to the terms +and conditions of this License, Apple hereby grants You, effective on +the date You accept this License and download the Original Code, a +world-wide, royalty-free, non-exclusive license, to the extent of +Apple's Applicable Patent Rights and copyrights covering the Original +Code, to do the following: + +2.1 Unmodified Code. You may use, reproduce, display, perform, +internally distribute within Your organization, and Externally Deploy +verbatim, unmodified copies of the Original Code, for commercial or +non-commercial purposes, provided that in each instance: + +(a) You must retain and reproduce in all copies of Original Code the +copyright and other proprietary notices and disclaimers of Apple as +they appear in the Original Code, and keep intact all notices in the +Original Code that refer to this License; and + +(b) You must include a copy of this License with every copy of Source +Code of Covered Code and documentation You distribute or Externally +Deploy, and You may not offer or impose any terms on such Source Code +that alter or restrict this License or the recipients' rights +hereunder, except as permitted under Section 6. + +2.2 Modified Code. You may modify Covered Code and use, reproduce, +display, perform, internally distribute within Your organization, and +Externally Deploy Your Modifications and Covered Code, for commercial +or non-commercial purposes, provided that in each instance You also +meet all of these conditions: + +(a) You must satisfy all the conditions of Section 2.1 with respect to +the Source Code of the Covered Code; + +(b) You must duplicate, to the extent it does not already exist, the +notice in Exhibit A in each file of the Source Code of all Your +Modifications, and cause the modified files to carry prominent notices +stating that You changed the files and the date of any change; and + +(c) If You Externally Deploy Your Modifications, You must make +Source Code of all Your Externally Deployed Modifications either +available to those to whom You have Externally Deployed Your +Modifications, or publicly available. Source Code of Your Externally +Deployed Modifications must be released under the terms set forth in +this License, including the license grants set forth in Section 3 +below, for as long as you Externally Deploy the Covered Code or twelve +(12) months from the date of initial External Deployment, whichever is +longer. You should preferably distribute the Source Code of Your +Externally Deployed Modifications electronically (e.g. download from a +web site). + +2.3 Distribution of Executable Versions. In addition, if You +Externally Deploy Covered Code (Original Code and/or Modifications) in +object code, executable form only, You must include a prominent +notice, in the code itself as well as in related documentation, +stating that Source Code of the Covered Code is available under the +terms of this License with information on how and where to obtain such +Source Code. + +2.4 Third Party Rights. You expressly acknowledge and agree that +although Apple and each Contributor grants the licenses to their +respective portions of the Covered Code set forth herein, no +assurances are provided by Apple or any Contributor that the Covered +Code does not infringe the patent or other intellectual property +rights of any other entity. Apple and each Contributor disclaim any +liability to You for claims brought by any other entity based on +infringement of intellectual property rights or otherwise. As a +condition to exercising the rights and licenses granted hereunder, You +hereby assume sole responsibility to secure any other intellectual +property rights needed, if any. For example, if a third party patent +license is required to allow You to distribute the Covered Code, it is +Your responsibility to acquire that license before distributing the +Covered Code. + +3. Your Grants. In consideration of, and as a condition to, the +licenses granted to You under this License, You hereby grant to any +person or entity receiving or distributing Covered Code under this +License a non-exclusive, royalty-free, perpetual, irrevocable license, +under Your Applicable Patent Rights and other intellectual property +rights (other than patent) owned or controlled by You, to use, +reproduce, display, perform, modify, sublicense, distribute and +Externally Deploy Your Modifications of the same scope and extent as +Apple's licenses under Sections 2.1 and 2.2 above. + +4. Larger Works. You may create a Larger Work by combining Covered +Code with other code not governed by the terms of this License and +distribute the Larger Work as a single product. In each such instance, +You must make sure the requirements of this License are fulfilled for +the Covered Code or any portion thereof. + +5. Limitations on Patent License. Except as expressly stated in +Section 2, no other patent rights, express or implied, are granted by +Apple herein. Modifications and/or Larger Works may require additional +patent licenses from Apple which Apple may grant in its sole +discretion. + +6. Additional Terms. You may choose to offer, and to charge a fee for, +warranty, support, indemnity or liability obligations and/or other +rights consistent with the scope of the license granted herein +("Additional Terms") to one or more recipients of Covered Code. +However, You may do so only on Your own behalf and as Your sole +responsibility, and not on behalf of Apple or any Contributor. You +must obtain the recipient's agreement that any such Additional Terms +are offered by You alone, and You hereby agree to indemnify, defend +and hold Apple and every Contributor harmless for any liability +incurred by or claims asserted against Apple or such Contributor by +reason of any such Additional Terms. + +7. Versions of the License. Apple may publish revised and/or new +versions of this License from time to time. Each version will be given +a distinguishing version number. Once Original Code has been published +under a particular version of this License, You may continue to use it +under the terms of that version. You may also choose to use such +Original Code under the terms of any subsequent version of this +License published by Apple. No one other than Apple has the right to +modify the terms applicable to Covered Code created under this +License. + +8. NO WARRANTY OR SUPPORT. The Covered Code may contain in whole or in +part pre-release, untested, or not fully tested works. The Covered +Code may contain errors that could cause failures or loss of data, and +may be incomplete or contain inaccuracies. You expressly acknowledge +and agree that use of the Covered Code, or any portion thereof, is at +Your sole and entire risk. THE COVERED CODE IS PROVIDED "AS IS" AND +WITHOUT WARRANTY, UPGRADES OR SUPPORT OF ANY KIND AND APPLE AND +APPLE'S LICENSOR(S) (COLLECTIVELY REFERRED TO AS "APPLE" FOR THE +PURPOSES OF SECTIONS 8 AND 9) AND ALL CONTRIBUTORS EXPRESSLY DISCLAIM +ALL WARRANTIES AND/OR CONDITIONS, EXPRESS OR IMPLIED, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES AND/OR CONDITIONS OF +MERCHANTABILITY, OF SATISFACTORY QUALITY, OF FITNESS FOR A PARTICULAR +PURPOSE, OF ACCURACY, OF QUIET ENJOYMENT, AND NONINFRINGEMENT OF THIRD +PARTY RIGHTS. APPLE AND EACH CONTRIBUTOR DOES NOT WARRANT AGAINST +INTERFERENCE WITH YOUR ENJOYMENT OF THE COVERED CODE, THAT THE +FUNCTIONS CONTAINED IN THE COVERED CODE WILL MEET YOUR REQUIREMENTS, +THAT THE OPERATION OF THE COVERED CODE WILL BE UNINTERRUPTED OR +ERROR-FREE, OR THAT DEFECTS IN THE COVERED CODE WILL BE CORRECTED. NO +ORAL OR WRITTEN INFORMATION OR ADVICE GIVEN BY APPLE, AN APPLE +AUTHORIZED REPRESENTATIVE OR ANY CONTRIBUTOR SHALL CREATE A WARRANTY. +You acknowledge that the Covered Code is not intended for use in the +operation of nuclear facilities, aircraft navigation, communication +systems, or air traffic control machines in which case the failure of +the Covered Code could lead to death, personal injury, or severe +physical or environmental damage. + +9. LIMITATION OF LIABILITY. TO THE EXTENT NOT PROHIBITED BY LAW, IN NO +EVENT SHALL APPLE OR ANY CONTRIBUTOR BE LIABLE FOR ANY INCIDENTAL, +SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES ARISING OUT OF OR RELATING +TO THIS LICENSE OR YOUR USE OR INABILITY TO USE THE COVERED CODE, OR +ANY PORTION THEREOF, WHETHER UNDER A THEORY OF CONTRACT, WARRANTY, +TORT (INCLUDING NEGLIGENCE), PRODUCTS LIABILITY OR OTHERWISE, EVEN IF +APPLE OR SUCH CONTRIBUTOR HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH +DAMAGES AND NOTWITHSTANDING THE FAILURE OF ESSENTIAL PURPOSE OF ANY +REMEDY. SOME JURISDICTIONS DO NOT ALLOW THE LIMITATION OF LIABILITY OF +INCIDENTAL OR CONSEQUENTIAL DAMAGES, SO THIS LIMITATION MAY NOT APPLY +TO YOU. In no event shall Apple's total liability to You for all +damages (other than as may be required by applicable law) under this +License exceed the amount of fifty dollars ($50.00). + +10. Trademarks. This License does not grant any rights to use the +trademarks or trade names "Apple", "Apple Computer", "Mac", "Mac OS", +"QuickTime", "QuickTime Streaming Server" or any other trademarks, +service marks, logos or trade names belonging to Apple (collectively +"Apple Marks") or to any trademark, service mark, logo or trade name +belonging to any Contributor. You agree not to use any Apple Marks in +or as part of the name of products derived from the Original Code or +to endorse or promote products derived from the Original Code other +than as expressly permitted by and in strict compliance at all times +with Apple's third party trademark usage guidelines which are posted +at http://www.apple.com/legal/guidelinesfor3rdparties.html. + +11. Ownership. Subject to the licenses granted under this License, +each Contributor retains all rights, title and interest in and to any +Modifications made by such Contributor. Apple retains all rights, +title and interest in and to the Original Code and any Modifications +made by or on behalf of Apple ("Apple Modifications"), and such Apple +Modifications will not be automatically subject to this License. Apple +may, at its sole discretion, choose to license such Apple +Modifications under this License, or on different terms from those +contained in this License or may choose not to license them at all. + +12. Termination. + +12.1 Termination. This License and the rights granted hereunder will +terminate: + +(a) automatically without notice from Apple if You fail to comply with +any term(s) of this License and fail to cure such breach within 30 +days of becoming aware of such breach; + +(b) immediately in the event of the circumstances described in Section +13.5(b); or + +(c) automatically without notice from Apple if You, at any time during +the term of this License, commence an action for patent infringement +against Apple; provided that Apple did not first commence +an action for patent infringement against You in that instance. + +12.2 Effect of Termination. Upon termination, You agree to immediately +stop any further use, reproduction, modification, sublicensing and +distribution of the Covered Code. All sublicenses to the Covered Code +which have been properly granted prior to termination shall survive +any termination of this License. Provisions which, by their nature, +should remain in effect beyond the termination of this License shall +survive, including but not limited to Sections 3, 5, 8, 9, 10, 11, +12.2 and 13. No party will be liable to any other for compensation, +indemnity or damages of any sort solely as a result of terminating +this License in accordance with its terms, and termination of this +License will be without prejudice to any other right or remedy of +any party. + +13. Miscellaneous. + +13.1 Government End Users. The Covered Code is a "commercial item" as +defined in FAR 2.101. Government software and technical data rights in +the Covered Code include only those rights customarily provided to the +public as defined in this License. This customary commercial license +in technical data and software is provided in accordance with FAR +12.211 (Technical Data) and 12.212 (Computer Software) and, for +Department of Defense purchases, DFAR 252.227-7015 (Technical Data -- +Commercial Items) and 227.7202-3 (Rights in Commercial Computer +Software or Computer Software Documentation). Accordingly, all U.S. +Government End Users acquire Covered Code with only those rights set +forth herein. + +13.2 Relationship of Parties. This License will not be construed as +creating an agency, partnership, joint venture or any other form of +legal association between or among You, Apple or any Contributor, and +You will not represent to the contrary, whether expressly, by +implication, appearance or otherwise. + +13.3 Independent Development. Nothing in this License will impair +Apple's right to acquire, license, develop, have others develop for +it, market and/or distribute technology or products that perform the +same or similar functions as, or otherwise compete with, +Modifications, Larger Works, technology or products that You may +develop, produce, market or distribute. + +13.4 Waiver; Construction. Failure by Apple or any Contributor to +enforce any provision of this License will not be deemed a waiver of +future enforcement of that or any other provision. Any law or +regulation which provides that the language of a contract shall be +construed against the drafter will not apply to this License. + +13.5 Severability. (a) If for any reason a court of competent +jurisdiction finds any provision of this License, or portion thereof, +to be unenforceable, that provision of the License will be enforced to +the maximum extent permissible so as to effect the economic benefits +and intent of the parties, and the remainder of this License will +continue in full force and effect. (b) Notwithstanding the foregoing, +if applicable law prohibits or restricts You from fully and/or +specifically complying with Sections 2 and/or 3 or prevents the +enforceability of either of those Sections, this License will +immediately terminate and You must immediately discontinue any use of +the Covered Code and destroy all copies of it that are in your +possession or control. + +13.6 Dispute Resolution. Any litigation or other dispute resolution +between You and Apple relating to this License shall take place in the +Northern District of California, and You and Apple hereby consent to +the personal jurisdiction of, and venue in, the state and federal +courts within that District with respect to this License. The +application of the United Nations Convention on Contracts for the +International Sale of Goods is expressly excluded. + +13.7 Entire Agreement; Governing Law. This License constitutes the +entire agreement between the parties with respect to the subject +matter hereof. This License shall be governed by the laws of the +United States and the State of California, except that body of +California law concerning conflicts of law. + +Where You are located in the province of Quebec, Canada, the following +clause applies: The parties hereby confirm that they have requested +that this License and all related documents be drafted in English. Les +parties ont exige que le present contrat et tous les documents +connexes soient rediges en anglais. + +EXHIBIT A. + +"Portions Copyright (c) 1999-2003 Apple Computer, Inc. All Rights +Reserved. + +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." Added: vendor/fsx/dist/Makefile ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/fsx/dist/Makefile Tue Nov 10 07:31:41 2015 (r290635) @@ -0,0 +1,41 @@ +# +# Copyright (c) 2009 Apple 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@ +# + +ARCHS := ppc i386 x86_64 +INTERNAL_FRAMEWORKS := /AppleInternal/Library/Frameworks +CFLAGS := $(ARCHS:%=-arch %) -Wall -O3 + +ifeq ($(wildcard $(INTERNAL_FRAMEWORKS)), $(INTERNAL_FRAMEWORKS)) +CPPFLAGS += -DXILOG +CFLAGS += -F/AppleInternal/Library/Frameworks +LIBS += -framework XILog +endif + +.PHONY: clean + +fsx: + $(CC) $(CFLAGS) $(CPPFLAGS) -o $@ fsx.c $(LIBS) + +clean: + -rm -f *.o fsx + Added: vendor/fsx/dist/fsx.c ============================================================================== --- /dev/null 00:00:00 1970 (empty, because file is newly added) +++ vendor/fsx/dist/fsx.c Tue Nov 10 07:31:41 2015 (r290635) @@ -0,0 +1,1849 @@ +/* + * Copyright (c) 1998-2009 Apple 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@ + * + * File: fsx.c + * Author: Avadis Tevanian, Jr. + * + * File system exerciser. + * + * Rewrite and enhancements 1998-2003 Conrad Minshall -- conrad at mac.com + * + * Various features from Joe Sokol, Pat Dirks, and Clark Warner. + * + * Small changes to work under Linux -- davej at suse.de + * + * Sundry porting patches from Guy Harris 12/2001 + * + * Checks for mmap last-page zero fill. + * + * Oct 2006: Now includes Wenguang's changes, Jim's Named Fork support, + * Peter's EA changes, and XILog additions + * + * Various features/enhancements from Mike Mackovitch -- macko at apple.com + * + * Added no-cached r/w option May 2008 -- rtucker at apple.com, bsuinn at apple.com + * + * Compile with: + cc -Wall -O3 fsx.c -o fsx + gcc -arch ppc -arch i386 -arch ppc64 -arch x86_64 -Wall -O3 fsx.c -o fsx -DXILOG -F/AppleInternal/Library/Frameworks -framework XILog + * + */ + +#include +#include +#include +#include +#include +#include +#include +#ifdef _UWIN +# include +# include +#endif +#include +#include +#ifndef MAP_FILE +# define MAP_FILE 0 +#endif +#include +#include +#include +#include +#include +#include +#include +#include +#include +#ifdef XILOG +# include +#endif + +/* + * A log entry is an operation and a bunch of arguments. + */ + +struct log_entry { + int opnum; + int operation; + int args[3]; +}; + +#define DEFAULT_LOGSIZE 1024 + +struct log_entry *oplog; /* the log */ +int logptr = 0; /* current position in log */ +int logcount = 0; /* total ops */ + +/* + * Define operations + */ + +#define OP_READ 1 +#define OP_WRITE 2 +#define OP_TRUNCATE 3 +#define OP_CLOSEOPEN 4 +#define OP_MAPREAD 5 +#define OP_MAPWRITE 6 +#define OP_SKIPPED 7 +#define OP_NOCACHEREAD 8 +#define OP_NOCACHEWRITE 9 + +int page_size; +int page_mask; + +char *good_buf; /* a pointer to the correct data */ +char *temp_buf; /* a pointer to the current data */ +char fname[MAXPATHLEN]; /* name of our test file */ +int fd; /* fd for our test file */ +int ea_lastwrite = 0; /* Size of the last EA Write */ +char *eaname; /* Name of the EA key */ + +off_t file_size = 0; +off_t biggest = 0; +char state[256]; +unsigned long testcalls = 0; /* calls to function "test" */ + +unsigned long simulatedopcount = 0; /* -b flag */ +int closeprob = 0; /* -c flag */ +int debug = 0; /* -v flag */ +unsigned long debugstart = 0; /* -D flag */ +int ea = 0; /* -e flag */ +unsigned long maxfilelen = 256 * 1024; /* -l flag */ +int sizechecks = 1; /* -n flag disables them */ +int maxoplen = 64 * 1024; /* -o flag */ +int quiet = 0; /* -q flag */ +unsigned long progressinterval = 0; /* -p flag */ +int readbdy = 1; /* -r flag */ +int style = 0; /* -s flag */ +int truncbdy = 1; /* -t flag */ +int writebdy = 1; /* -w flag */ +long monitorstart = -1; /* -m flag */ +long monitorend = -1; /* -m flag */ +int lite = 0; /* -L flag */ +long numops = -1; /* -N flag */ +int randomoplen = 1; /* -O flag disables it */ +int seed = 0; /* -S flag */ +int mapped_writes = 1; /* -W flag disables */ +int mapped_reads = 1; /* -R flag disables it */ +int logsize = DEFAULT_LOGSIZE; /* -G flag */ +int datasize = 4; /* -T flag */ +int modsize = 0; +int fsxgoodfd = -1; +FILE * fsxlogf = NULL; +int badoff = -1; +int closeopen = 0; +int sync_before_close = 0; /* -y flag enables it */ +int interactive = 0; /* -i flag interactive */ +int interactiveSince = -1; /* -I flag when to start interactive */ +int usehole = 1; // by default use hole (sparse file) +int slow_motion = 0; +long duration = 0; /* -d flag */ +unsigned int pinginterval = 10000; // About every 30sec? +#ifdef XILOG +XILogRef xilogref; +#endif +int gUseRandomNoCache = 0; /* -C randomly mix cached and un-cached r/w ops */ + +char *msgbuf; +int msgbuflen; + +void dotruncate(unsigned size); +void writefileimage(void); + +#define get_data_at(cp) \ + (((*(((unsigned char *)(cp)) + 0)) << 0) | \ + ((datasize < 2) ? 0 : \ + ((*(((unsigned char *)(cp)) + 1)) << 8)) | \ + ((datasize < 4) ? 0 : \ + (((*(((unsigned char *)(cp)) + 2)) << 16) | \ + ((*(((unsigned char *)(cp)) + 3)) << 24)))) + +#define set_data_at(cp, val) \ + do { \ + (*(((unsigned char *)(cp)) + 0)) = ((val) >> 0) & 0xff; \ + if (datasize < 2) break; \ + (*(((unsigned char *)(cp)) + 1)) = (((val) >> 8) & 0xff); \ + if (datasize < 4) break; \ + (*(((unsigned char *)(cp)) + 2)) = (((val) >> 16) & 0xff); \ + (*(((unsigned char *)(cp)) + 3)) = (((val) >> 24) & 0xff); \ + } while (0) + +#define SHOWLOGENTRY(OPSTART, OPEND) \ + (!quiet && \ + ((progressinterval && (testcalls % progressinterval == 0)) || \ + (debug && \ + ((monitorstart == -1) || \ + (((OPEND) > monitorstart) && \ + ((monitorend == -1) || ((OPSTART) <= monitorend))))))) + +void docloseopen(void); + +int parsetime(char *t) +{ + int i = 0; + int secs = 0; + char b[128]; bzero(b, 128); + + for (i=0; i < strlen(t); i++) { + switch (t[i]) { + case 's': + secs += atoi(b); + bzero(b, 128); + break; + case 'm': + secs += atoi(b) * 60; + bzero(b, 128); + break; + case 'h': + secs += atoi(b) * 60 * 60; + bzero(b, 128); + break; + case 'd': + secs += atoi(b) * 60 * 60 * 24; + bzero(b, 128); + break; + case 'w': + secs += atoi(b) * 60 * 60 * 24 * 7; + bzero(b, 128); + break; + case 'y': + secs += atoi(b) * 60 * 60 * 24 * 365; + bzero(b, 128); + break; + default: + sprintf(b, "%s%c", b, t[i]); + } + } + if (secs == 0) // maybe they just gave us a number? + secs = atoi(t); + return(secs); +} + + +void +mvwarnc(code, fmt, ap) + int code; + const char *fmt; + va_list ap; +{ + fprintf(stderr, "fsx: "); + if (fmt != NULL) { + vfprintf(stderr, fmt, ap); + fprintf(stderr, ": "); + } + fprintf(stderr, "%s\n", strerror(code)); +} + + +void +mwarn(const char * fmt, ...) +{ + va_list ap; + va_start(ap, fmt); +#ifdef XILOG + XILogMsg(fmt, ap); + XILogMsg("%s", strerror(errno)); + va_end(ap); + va_start(ap, fmt); +#endif + mvwarnc(errno, fmt, ap); + va_end(ap); +} + + +void +prt(char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); +#ifdef XILOG + XILogMsg(fmt, args); + va_end(args); + va_start(args, fmt); +#endif + vfprintf(stdout, fmt, args); + fflush(stdout); + va_end(args); + if (fsxlogf) { + va_start(args, fmt); + vfprintf(fsxlogf, fmt, args); + fflush(fsxlogf); + va_end(args); + } + fflush(stdout); +} + +void +prt2(char *fmt, ...) +{ + va_list args; + + va_start(args, fmt); + vfprintf(stdout, fmt, args); + va_end(args); + if (fsxlogf) { + va_start(args, fmt); + vfprintf(fsxlogf, fmt, args); + va_end(args); + } + fflush(stdout); +} + + +void +prterr(char *prefix) +{ +#ifdef XILOG + XILogErr("%s%s%s", prefix, prefix ? ": " : "", strerror(errno)); +#endif + prt2("%s%s%s\n", prefix, prefix ? ": " : "", strerror(errno)); +} + + +int +log4(int operation, int arg0, int arg1, int arg2) +{ + int logent = logptr; + struct log_entry *le = &oplog[logent]; + le->opnum = logcount + 1; + le->operation = operation; + if (closeopen) + le->operation = ~ le->operation; + le->args[0] = arg0; + le->args[1] = arg1; + le->args[2] = arg2; + logptr++; + logcount++; + if (msgbuflen) { + snprintf(msgbuf, msgbuflen+1, "%d", logcount); + } + if (logptr >= logsize) + logptr = 0; + return logent; +} + + +void +offset_last_mod(int offset, int *write, int *tdown, int *tup) +{ + int i, count, down, opnum, operation; + struct log_entry *lp; + + *write = *tdown = *tup = -1; + + opnum = logcount; + i = logptr - 1; + if (i < 0) + i = logsize - 1; + if (logcount < logsize) { + count = logcount; + } else { + count = logsize; + } + for ( ; count > 0; count--, opnum--) { + lp = &oplog[i]; + operation = lp->operation; + if ((closeopen = operation < 0)) + operation = ~ operation; + switch (operation) { + case OP_MAPWRITE: + case OP_WRITE: + if (*write != -1) + break; + if ((offset >= lp->args[0]) && (offset < (lp->args[0] + lp->args[1]))) + *write = opnum; + break; + case OP_TRUNCATE: + down = lp->args[0] < lp->args[1]; + if ((offset >= lp->args[!down]) && (offset < lp->args[!!down])) { + if (down && (*tdown == -1)) + *tdown = opnum; + else if (!down && (*tup == -1)) + *tup = opnum; + } + break; + } + if ((*write != -1) && (*tdown != -1) && (*tup != -1)) + return; + i--; + if (i < 0) + i = logsize - 1; + } +} + +void +logentrydump(int logent, int opnum) +{ + struct log_entry *lp = &oplog[logent]; + int down; + + if (modsize) + prt("%d(%d): ", opnum, opnum%modsize); + else + prt("%d: ", opnum); + if ((closeopen = lp->operation < 0)) + lp->operation = ~ lp->operation; + + switch (lp->operation) { + case OP_MAPREAD: + prt("%-15s 0x%x (%d) thru 0x%x (%d)\t(0x%x (%d) bytes)", "MAPREAD", + lp->args[0], lp->args[0], + lp->args[0] + lp->args[1] - 1, lp->args[0] + lp->args[1] - 1, + lp->args[1], lp->args[1]); + if ((badoff >= lp->args[0]) && (badoff < lp->args[0] + lp->args[1])) + { + prt("\t***RRRR***"); + } + break; + case OP_MAPWRITE: + prt("%-15s 0x%x (%d) thru 0x%x (%d)\t(0x%x (%d) bytes)", "MAPWRITE", + lp->args[0], lp->args[0], + lp->args[0] + lp->args[1] - 1, lp->args[0] + lp->args[1] - 1, + lp->args[1], lp->args[1]); + if ((badoff >= lp->args[0]) && (badoff < lp->args[0] + lp->args[1])) + { + prt("\t******WWWW"); + } + break; + case OP_READ: + prt("%-15s 0x%x (%d) thru 0x%x (%d)\t(0x%x (%d) bytes)", "READ", + lp->args[0], lp->args[0], + lp->args[0] + lp->args[1] - 1, lp->args[0] + lp->args[1] - 1, + lp->args[1], lp->args[1]); + if (badoff >= lp->args[0] && + badoff < lp->args[0] + lp->args[1]) + { + prt("\t***RRRR***"); + } + break; + case OP_WRITE: + prt("%-15s 0x%x (%d) thru 0x%x (%d)\t(0x%x (%d) bytes)", "WRITE", + lp->args[0], lp->args[0], + lp->args[0] + lp->args[1] - 1, lp->args[0] + lp->args[1] - 1, + lp->args[1], lp->args[1]); + if (lp->args[0] > lp->args[2]) + { + prt(" HOLE"); + } + else if ((lp->args[0] + lp->args[1]) > lp->args[2]) + { + prt(" EXTEND"); + } + if (((badoff >= lp->args[0]) || (badoff >= lp->args[2])) && + (badoff < (lp->args[0] + lp->args[1]))) + { + prt("\t***WWWW"); + } + break; + case OP_NOCACHEREAD: + prt("%-15s 0x%x (%d) thru 0x%x (%d)\t(0x%x (%d) bytes)", "NOCACHEREAD", + lp->args[0], lp->args[0], + lp->args[0] + lp->args[1] - 1, lp->args[0] + lp->args[1] - 1, + lp->args[1], lp->args[1]); + if (badoff >= lp->args[0] && + badoff < lp->args[0] + lp->args[1]) + { + prt("\t***RRRR***"); + } + break; + case OP_NOCACHEWRITE: + prt("%-15s 0x%x (%d) thru 0x%x (%d)\t(0x%x (%d) bytes)", "NOCACHEWRITE", + lp->args[0], lp->args[0], + lp->args[0] + lp->args[1] - 1, lp->args[0] + lp->args[1] - 1, + lp->args[1], lp->args[1]); + if (lp->args[0] > lp->args[2]) + { + prt(" HOLE"); + } + else if ((lp->args[0] + lp->args[1]) > lp->args[2]) + { + prt(" EXTEND"); + } + if (((badoff >= lp->args[0]) || (badoff >= lp->args[2])) && + (badoff < (lp->args[0] + lp->args[1]))) + { + prt("\t***WWWW"); + } + break; + case OP_TRUNCATE: + down = lp->args[0] < lp->args[1]; + prt("%-15s from 0x%x (%d) to 0x%x (%d)", + down ? "TRUNCATE DOWN" : "TRUNCATE UP", + lp->args[1], lp->args[1], + lp->args[0], lp->args[0]); + if ((badoff >= lp->args[!down]) && + (badoff < lp->args[!!down])) + { + prt("\t******WWWW"); + } + break; + case OP_SKIPPED: + prt("SKIPPED (no operation)"); + break; + default: + prt("BOGUS LOG ENTRY (operation code = %d)!", + lp->operation); + } + if (closeopen) + { + prt("\n\t\tCLOSE/OPEN"); + } + prt("\n"); +} + + +void +logdump(void) +{ + int i, count, opnum; + + // don't dump log if we've been logging ops via debug + if (debug) return; + + prt("LOG DUMP (%d total operations):\n", logcount); + if (logcount < logsize) { + i = 0; + count = logcount; + opnum = 1; + } else { + i = logptr; + count = logsize; + opnum = 1 + logcount - logsize; + } + for ( ; count > 0; count--, opnum++) { + logentrydump(i, opnum); + i++; + if (i == logsize) + i = 0; + } +} + + +void +save_buffer(char *buffer, off_t bufferlength, int fd) +{ + off_t ret; + ssize_t byteswritten; + + if (fd <= 0 || bufferlength == 0) + return; + + if (bufferlength > SSIZE_MAX) { + prt("fsx flaw: overflow in save_buffer\n"); + exit(67); + } + if (lite) { + off_t size_by_seek = lseek(fd, (off_t)0, SEEK_END); + if (size_by_seek == (off_t)-1) + prterr("save_buffer: lseek eof"); + else if (bufferlength > size_by_seek) { + mwarn("WARNING: save_buffer: .fsxgood file too short... will save 0x%llx bytes instead of 0x%llx\n", (unsigned long long)size_by_seek, + (unsigned long long)bufferlength); + bufferlength = size_by_seek; + } + } + + ret = lseek(fd, (off_t)0, SEEK_SET); + if (ret == (off_t)-1) + prterr("save_buffer: lseek 0"); + + byteswritten = write(fd, buffer, (size_t)bufferlength); + if (byteswritten != bufferlength) { + if (byteswritten == -1) + prterr("save_buffer write"); + else + mwarn("WARNING: save_buffer: short write, 0x%x bytes instead of 0x%llx\n", + (unsigned)byteswritten, + (unsigned long long)bufferlength); + } +} + + +void +failure(int status) *** DIFF OUTPUT TRUNCATED AT 1000 LINES ***