1*1caeb00aSHarry Fuecks#!/usr/bin/php -d short_open_tag=on 2*1caeb00aSHarry Fuecks<?php 3*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 4*1caeb00aSHarry Fuecksif(!defined('DOKU_INC')) define('DOKU_INC',realpath(dirname(__FILE__).'/../').'/'); 5*1caeb00aSHarry Fuecksrequire_once DOKU_INC.'inc/init.php'; 6*1caeb00aSHarry Fuecksrequire_once DOKU_INC.'inc/common.php'; 7*1caeb00aSHarry Fuecksrequire_once DOKU_INC.'inc/cliopts.php'; 8*1caeb00aSHarry Fuecks 9*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 10*1caeb00aSHarry Fuecksfunction usage($action) { 11*1caeb00aSHarry Fuecks switch ( $action ) { 12*1caeb00aSHarry Fuecks case 'checkout': 13*1caeb00aSHarry Fuecks print "Usage: dwpage.php [opts] checkout <wiki:page> [working_file] 14*1caeb00aSHarry Fuecks 15*1caeb00aSHarry Fuecks Checks out a file from the repository, using the wiki id and obtaining 16*1caeb00aSHarry Fuecks a lock for the page. 17*1caeb00aSHarry Fuecks If a working_file is specified, this is where the page is copied to. 18*1caeb00aSHarry Fuecks Otherwise defaults to the same as the wiki page in the current 19*1caeb00aSHarry Fuecks working directory. 20*1caeb00aSHarry Fuecks 21*1caeb00aSHarry Fuecks EXAMPLE 22*1caeb00aSHarry Fuecks $ ./dwpage.php checkout wiki:syntax ./new_syntax.txt 23*1caeb00aSHarry Fuecks 24*1caeb00aSHarry Fuecks OPTIONS 25*1caeb00aSHarry Fuecks -h, --help=<action>: get help 26*1caeb00aSHarry Fuecks -f: force obtaining a lock for the page (generally bad idea) 27*1caeb00aSHarry Fuecks"; 28*1caeb00aSHarry Fuecks break; 29*1caeb00aSHarry Fuecks case 'commit': 30*1caeb00aSHarry Fuecks print "Usage: dwpage.php [opts] -m \"Msg\" commit <working_file> <wiki:page> 31*1caeb00aSHarry Fuecks 32*1caeb00aSHarry Fuecks Checks in the working_file into the repository using the specified 33*1caeb00aSHarry Fuecks wiki id, archiving the previous version. 34*1caeb00aSHarry Fuecks 35*1caeb00aSHarry Fuecks EXAMPLE 36*1caeb00aSHarry Fuecks $ ./dwpage.php -m \"Some message\" commit ./new_syntax.txt wiki:syntax 37*1caeb00aSHarry Fuecks 38*1caeb00aSHarry Fuecks OPTIONS 39*1caeb00aSHarry Fuecks -h, --help=<action>: get help 40*1caeb00aSHarry Fuecks -f: force obtaining a lock for the page (generally bad idea) 41*1caeb00aSHarry Fuecks -m (required): Summary message describing the change 42*1caeb00aSHarry Fuecks"; 43*1caeb00aSHarry Fuecks break; 44*1caeb00aSHarry Fuecks case 'lock': 45*1caeb00aSHarry Fuecks print "Usage: dwpage.php [opts] lock <wiki:page> 46*1caeb00aSHarry Fuecks 47*1caeb00aSHarry Fuecks Obtains or updates a lock for a wiki page 48*1caeb00aSHarry Fuecks 49*1caeb00aSHarry Fuecks EXAMPLE 50*1caeb00aSHarry Fuecks $ ./dwpage.php lock wiki:syntax 51*1caeb00aSHarry Fuecks 52*1caeb00aSHarry Fuecks OPTIONS 53*1caeb00aSHarry Fuecks -h, --help=<action>: get help 54*1caeb00aSHarry Fuecks -f: force obtaining a lock for the page (generally bad idea) 55*1caeb00aSHarry Fuecks"; 56*1caeb00aSHarry Fuecks break; 57*1caeb00aSHarry Fuecks case 'unlock': 58*1caeb00aSHarry Fuecks print "Usage: dwpage.php [opts] unlock <wiki:page> 59*1caeb00aSHarry Fuecks 60*1caeb00aSHarry Fuecks Removes a lock for a wiki page. 61*1caeb00aSHarry Fuecks 62*1caeb00aSHarry Fuecks EXAMPLE 63*1caeb00aSHarry Fuecks $ ./dwpage.php unlock wiki:syntax 64*1caeb00aSHarry Fuecks 65*1caeb00aSHarry Fuecks OPTIONS 66*1caeb00aSHarry Fuecks -h, --help=<action>: get help 67*1caeb00aSHarry Fuecks -f: force obtaining a lock for the page (generally bad idea) 68*1caeb00aSHarry Fuecks"; 69*1caeb00aSHarry Fuecks break; 70*1caeb00aSHarry Fuecks default: 71*1caeb00aSHarry Fuecks print "Usage: dwpage.php [opts] <action> 72*1caeb00aSHarry Fuecks 73*1caeb00aSHarry Fuecks Utility to help command line Dokuwiki page editing, allow 74*1caeb00aSHarry Fuecks pages to be checked out for editing then committed after changes 75*1caeb00aSHarry Fuecks 76*1caeb00aSHarry Fuecks Normal operation would be; 77*1caeb00aSHarry Fuecks 78*1caeb00aSHarry Fuecks 79*1caeb00aSHarry Fuecks 80*1caeb00aSHarry Fuecks ACTIONS 81*1caeb00aSHarry Fuecks checkout: see $ dwpage.php --help checkout 82*1caeb00aSHarry Fuecks commit: see $ dwpage.php --help commit 83*1caeb00aSHarry Fuecks lock: see $ dwpage.php --help lock 84*1caeb00aSHarry Fuecks 85*1caeb00aSHarry Fuecks OPTIONS 86*1caeb00aSHarry Fuecks -h, --help=<action>: get help 87*1caeb00aSHarry Fuecks e.g. $ ./dwpage.php -hcommit 88*1caeb00aSHarry Fuecks e.g. $ ./dwpage.php --help=commit 89*1caeb00aSHarry Fuecks"; 90*1caeb00aSHarry Fuecks break; 91*1caeb00aSHarry Fuecks } 92*1caeb00aSHarry Fuecks} 93*1caeb00aSHarry Fuecks 94*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 95*1caeb00aSHarry Fuecksfunction getUser() { 96*1caeb00aSHarry Fuecks $user = getenv('USER'); 97*1caeb00aSHarry Fuecks if (empty ($username)) { 98*1caeb00aSHarry Fuecks $user = getenv('USERNAME'); 99*1caeb00aSHarry Fuecks } else { 100*1caeb00aSHarry Fuecks return $user; 101*1caeb00aSHarry Fuecks } 102*1caeb00aSHarry Fuecks if (empty ($username)) { 103*1caeb00aSHarry Fuecks $user = 'admin'; 104*1caeb00aSHarry Fuecks } 105*1caeb00aSHarry Fuecks return $user; 106*1caeb00aSHarry Fuecks} 107*1caeb00aSHarry Fuecks 108*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 109*1caeb00aSHarry Fuecksfunction getSuppliedArgument($OPTS, $short, $long) { 110*1caeb00aSHarry Fuecks $arg = $OPTS->get($short); 111*1caeb00aSHarry Fuecks if ( is_null($arg) ) { 112*1caeb00aSHarry Fuecks $arg = $OPTS->get($long); 113*1caeb00aSHarry Fuecks } 114*1caeb00aSHarry Fuecks return $arg; 115*1caeb00aSHarry Fuecks} 116*1caeb00aSHarry Fuecks 117*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 118*1caeb00aSHarry Fuecksfunction obtainLock($WIKI_ID) { 119*1caeb00aSHarry Fuecks 120*1caeb00aSHarry Fuecks global $USERNAME; 121*1caeb00aSHarry Fuecks 122*1caeb00aSHarry Fuecks if ( !file_exists(wikiFN($WIKI_ID)) ) { 123*1caeb00aSHarry Fuecks fwrite( STDERR, "$WIKI_ID does not yet exist\n"); 124*1caeb00aSHarry Fuecks } 125*1caeb00aSHarry Fuecks 126*1caeb00aSHarry Fuecks $_SERVER['REMOTE_USER'] = $USERNAME; 127*1caeb00aSHarry Fuecks if ( checklock($WIKI_ID) ) { 128*1caeb00aSHarry Fuecks fwrite( STDERR, "Page $WIKI_ID is already locked by another user\n"); 129*1caeb00aSHarry Fuecks exit(1); 130*1caeb00aSHarry Fuecks } 131*1caeb00aSHarry Fuecks 132*1caeb00aSHarry Fuecks lock($WIKI_ID); 133*1caeb00aSHarry Fuecks 134*1caeb00aSHarry Fuecks $_SERVER['REMOTE_USER'] = '_'.$USERNAME.'_'; 135*1caeb00aSHarry Fuecks 136*1caeb00aSHarry Fuecks if ( checklock($WIKI_ID) != $USERNAME ) { 137*1caeb00aSHarry Fuecks 138*1caeb00aSHarry Fuecks fwrite( STDERR, "Unable to obtain lock for $WIKI_ID\n" ); 139*1caeb00aSHarry Fuecks exit(1); 140*1caeb00aSHarry Fuecks 141*1caeb00aSHarry Fuecks } 142*1caeb00aSHarry Fuecks} 143*1caeb00aSHarry Fuecks 144*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 145*1caeb00aSHarry Fuecksfunction clearLock($WIKI_ID) { 146*1caeb00aSHarry Fuecks 147*1caeb00aSHarry Fuecks global $USERNAME ; 148*1caeb00aSHarry Fuecks 149*1caeb00aSHarry Fuecks if ( !file_exists(wikiFN($WIKI_ID)) ) { 150*1caeb00aSHarry Fuecks fwrite( STDERR, "$WIKI_ID does not yet exist\n"); 151*1caeb00aSHarry Fuecks } 152*1caeb00aSHarry Fuecks 153*1caeb00aSHarry Fuecks $_SERVER['REMOTE_USER'] = $USERNAME; 154*1caeb00aSHarry Fuecks if ( checklock($WIKI_ID) ) { 155*1caeb00aSHarry Fuecks fwrite( STDERR, "Page $WIKI_ID is locked by another user\n"); 156*1caeb00aSHarry Fuecks exit(1); 157*1caeb00aSHarry Fuecks } 158*1caeb00aSHarry Fuecks 159*1caeb00aSHarry Fuecks unlock($WIKI_ID); 160*1caeb00aSHarry Fuecks 161*1caeb00aSHarry Fuecks if ( file_exists(wikiFN($WIKI_ID).'.lock') ) { 162*1caeb00aSHarry Fuecks fwrite( STDERR, "Unable to clear lock for $WIKI_ID\n" ); 163*1caeb00aSHarry Fuecks exit(1); 164*1caeb00aSHarry Fuecks } 165*1caeb00aSHarry Fuecks 166*1caeb00aSHarry Fuecks} 167*1caeb00aSHarry Fuecks 168*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 169*1caeb00aSHarry Fuecksfunction deleteLock($WIKI_ID) { 170*1caeb00aSHarry Fuecks 171*1caeb00aSHarry Fuecks $wikiLockFN = wikiFN($WIKI_ID).'.lock'; 172*1caeb00aSHarry Fuecks 173*1caeb00aSHarry Fuecks if ( file_exists($wikiLockFN) ) { 174*1caeb00aSHarry Fuecks if ( !unlink($wikiLockFN) ) { 175*1caeb00aSHarry Fuecks fwrite( STDERR, "Unable to delete $wikiLockFN\n" ); 176*1caeb00aSHarry Fuecks exit(1); 177*1caeb00aSHarry Fuecks } 178*1caeb00aSHarry Fuecks } 179*1caeb00aSHarry Fuecks 180*1caeb00aSHarry Fuecks} 181*1caeb00aSHarry Fuecks 182*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 183*1caeb00aSHarry Fuecks$USERNAME = getUser(); 184*1caeb00aSHarry Fuecks$CWD = getcwd(); 185*1caeb00aSHarry Fuecks$SYSTEM_ID = '127.0.0.1'; 186*1caeb00aSHarry Fuecks 187*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 188*1caeb00aSHarry Fuecks$OPTS = Doku_Cli_Opts::getOptions( 189*1caeb00aSHarry Fuecks __FILE__, 190*1caeb00aSHarry Fuecks 'h::fm:u:s:', 191*1caeb00aSHarry Fuecks array( 192*1caeb00aSHarry Fuecks 'help==', 193*1caeb00aSHarry Fuecks 'user=', 194*1caeb00aSHarry Fuecks 'system=', 195*1caeb00aSHarry Fuecks ) 196*1caeb00aSHarry Fuecks); 197*1caeb00aSHarry Fuecks 198*1caeb00aSHarry Fuecksif ( $OPTS->isError() ) { 199*1caeb00aSHarry Fuecks print $OPTS->getMessage()."\n"; 200*1caeb00aSHarry Fuecks exit(1); 201*1caeb00aSHarry Fuecks} 202*1caeb00aSHarry Fuecks 203*1caeb00aSHarry Fuecksif ( $OPTS->has('h') or $OPTS->has('help') or !$OPTS->hasArgs() ) { 204*1caeb00aSHarry Fuecks usage(getSuppliedArgument($OPTS,'h','help')); 205*1caeb00aSHarry Fuecks exit(0); 206*1caeb00aSHarry Fuecks} 207*1caeb00aSHarry Fuecks 208*1caeb00aSHarry Fuecksif ( $OPTS->has('u') or $OPTS->has('user') ) { 209*1caeb00aSHarry Fuecks $USERNAME = getSuppliedArgument($OPTS,'u','user'); 210*1caeb00aSHarry Fuecks} 211*1caeb00aSHarry Fuecks 212*1caeb00aSHarry Fuecksif ( $OPTS->has('s') or $OPTS->has('system') ) { 213*1caeb00aSHarry Fuecks $SYSTEM_ID = getSuppliedArgument($OPTS,'s','system'); 214*1caeb00aSHarry Fuecks} 215*1caeb00aSHarry Fuecks 216*1caeb00aSHarry Fuecks#------------------------------------------------------------------------------ 217*1caeb00aSHarry Fuecksswitch ( $OPTS->arg(0) ) { 218*1caeb00aSHarry Fuecks 219*1caeb00aSHarry Fuecks #---------------------------------------------------------------------- 220*1caeb00aSHarry Fuecks case 'checkout': 221*1caeb00aSHarry Fuecks 222*1caeb00aSHarry Fuecks $WIKI_ID = $OPTS->arg(1); 223*1caeb00aSHarry Fuecks 224*1caeb00aSHarry Fuecks if ( !$WIKI_ID ) { 225*1caeb00aSHarry Fuecks fwrite( STDERR, "Wiki page ID required\n"); 226*1caeb00aSHarry Fuecks exit(1); 227*1caeb00aSHarry Fuecks } 228*1caeb00aSHarry Fuecks 229*1caeb00aSHarry Fuecks $WIKI_FN = wikiFN($WIKI_ID); 230*1caeb00aSHarry Fuecks 231*1caeb00aSHarry Fuecks if ( !file_exists($WIKI_FN) ) { 232*1caeb00aSHarry Fuecks fwrite( STDERR, "$WIKI_ID does not yet exist\n"); 233*1caeb00aSHarry Fuecks exit(1); 234*1caeb00aSHarry Fuecks } 235*1caeb00aSHarry Fuecks 236*1caeb00aSHarry Fuecks $TARGET_FN = $OPTS->arg(2); 237*1caeb00aSHarry Fuecks 238*1caeb00aSHarry Fuecks if ( empty($TARGET_FN) ) { 239*1caeb00aSHarry Fuecks $TARGET_FN = getcwd().'/'.basename($WIKI_FN); 240*1caeb00aSHarry Fuecks } 241*1caeb00aSHarry Fuecks 242*1caeb00aSHarry Fuecks if ( !file_exists(dirname($TARGET_FN)) ) { 243*1caeb00aSHarry Fuecks fwrite( STDERR, "Directory ".dirname($TARGET_FN)." does not exist\n"); 244*1caeb00aSHarry Fuecks exit(1); 245*1caeb00aSHarry Fuecks } 246*1caeb00aSHarry Fuecks 247*1caeb00aSHarry Fuecks if ( stristr( realpath(dirname($TARGET_FN)), realpath($conf['datadir']) ) !== FALSE ) { 248*1caeb00aSHarry Fuecks fwrite( STDERR, "Attempt to check out file into data directory - not allowed\n"); 249*1caeb00aSHarry Fuecks exit(1); 250*1caeb00aSHarry Fuecks } 251*1caeb00aSHarry Fuecks 252*1caeb00aSHarry Fuecks if ( $OPTS->has('f') ) { 253*1caeb00aSHarry Fuecks deleteLock($WIKI_ID); 254*1caeb00aSHarry Fuecks } 255*1caeb00aSHarry Fuecks 256*1caeb00aSHarry Fuecks obtainLock($WIKI_ID); 257*1caeb00aSHarry Fuecks 258*1caeb00aSHarry Fuecks # Need to lock the file first? 259*1caeb00aSHarry Fuecks if ( !copy($WIKI_FN, $TARGET_FN) ) { 260*1caeb00aSHarry Fuecks fwrite( STDERR, "Unable to copy $WIKI_FN to $TARGET_FN\n"); 261*1caeb00aSHarry Fuecks clearLock($WIKI_ID); 262*1caeb00aSHarry Fuecks exit(1); 263*1caeb00aSHarry Fuecks } 264*1caeb00aSHarry Fuecks 265*1caeb00aSHarry Fuecks print "$WIKI_ID > $TARGET_FN\n"; 266*1caeb00aSHarry Fuecks exit(0); 267*1caeb00aSHarry Fuecks 268*1caeb00aSHarry Fuecks break; 269*1caeb00aSHarry Fuecks 270*1caeb00aSHarry Fuecks #---------------------------------------------------------------------- 271*1caeb00aSHarry Fuecks case 'commit': 272*1caeb00aSHarry Fuecks 273*1caeb00aSHarry Fuecks $TARGET_FN = $OPTS->arg(1); 274*1caeb00aSHarry Fuecks 275*1caeb00aSHarry Fuecks if ( !$TARGET_FN ) { 276*1caeb00aSHarry Fuecks fwrite( STDERR, "Target filename required\n"); 277*1caeb00aSHarry Fuecks exit(1); 278*1caeb00aSHarry Fuecks } 279*1caeb00aSHarry Fuecks 280*1caeb00aSHarry Fuecks if ( !file_exists($TARGET_FN) ) { 281*1caeb00aSHarry Fuecks fwrite( STDERR, "$TARGET_FN does not exist\n"); 282*1caeb00aSHarry Fuecks exit(1); 283*1caeb00aSHarry Fuecks } 284*1caeb00aSHarry Fuecks 285*1caeb00aSHarry Fuecks if ( !is_readable($TARGET_FN) ) { 286*1caeb00aSHarry Fuecks fwrite( STDERR, "Cannot read from $TARGET_FN\n"); 287*1caeb00aSHarry Fuecks exit(1); 288*1caeb00aSHarry Fuecks } 289*1caeb00aSHarry Fuecks 290*1caeb00aSHarry Fuecks $WIKI_ID = $OPTS->arg(2); 291*1caeb00aSHarry Fuecks 292*1caeb00aSHarry Fuecks if ( !$WIKI_ID ) { 293*1caeb00aSHarry Fuecks fwrite( STDERR, "Wiki page ID required\n"); 294*1caeb00aSHarry Fuecks exit(1); 295*1caeb00aSHarry Fuecks } 296*1caeb00aSHarry Fuecks 297*1caeb00aSHarry Fuecks if ( !$OPTS->has('m') ) { 298*1caeb00aSHarry Fuecks fwrite( STDERR, "Summary message required\n"); 299*1caeb00aSHarry Fuecks exit(1); 300*1caeb00aSHarry Fuecks } 301*1caeb00aSHarry Fuecks 302*1caeb00aSHarry Fuecks if ( $OPTS->has('f') ) { 303*1caeb00aSHarry Fuecks deleteLock($WIKI_ID); 304*1caeb00aSHarry Fuecks } 305*1caeb00aSHarry Fuecks 306*1caeb00aSHarry Fuecks $_SERVER['REMOTE_USER'] = $USERNAME; 307*1caeb00aSHarry Fuecks if ( checklock($WIKI_ID) ) { 308*1caeb00aSHarry Fuecks fwrite( STDERR, "$WIKI_ID is locked by another user\n"); 309*1caeb00aSHarry Fuecks exit(1); 310*1caeb00aSHarry Fuecks } 311*1caeb00aSHarry Fuecks 312*1caeb00aSHarry Fuecks obtainLock($WIKI_ID); 313*1caeb00aSHarry Fuecks 314*1caeb00aSHarry Fuecks saveWikiText($WIKI_ID, file_get_contents($TARGET_FN), $OPTS->get('m')); 315*1caeb00aSHarry Fuecks 316*1caeb00aSHarry Fuecks clearLock($WIKI_ID); 317*1caeb00aSHarry Fuecks 318*1caeb00aSHarry Fuecks exit(0); 319*1caeb00aSHarry Fuecks 320*1caeb00aSHarry Fuecks break; 321*1caeb00aSHarry Fuecks 322*1caeb00aSHarry Fuecks #---------------------------------------------------------------------- 323*1caeb00aSHarry Fuecks case 'lock': 324*1caeb00aSHarry Fuecks 325*1caeb00aSHarry Fuecks $WIKI_ID = $OPTS->arg(1); 326*1caeb00aSHarry Fuecks 327*1caeb00aSHarry Fuecks if ( !$WIKI_ID ) { 328*1caeb00aSHarry Fuecks fwrite( STDERR, "Wiki page ID required\n"); 329*1caeb00aSHarry Fuecks exit(1); 330*1caeb00aSHarry Fuecks } 331*1caeb00aSHarry Fuecks 332*1caeb00aSHarry Fuecks if ( $OPTS->has('f') ) { 333*1caeb00aSHarry Fuecks deleteLock($WIKI_ID); 334*1caeb00aSHarry Fuecks } 335*1caeb00aSHarry Fuecks 336*1caeb00aSHarry Fuecks obtainLock($WIKI_ID); 337*1caeb00aSHarry Fuecks 338*1caeb00aSHarry Fuecks print "Locked : $WIKI_ID\n"; 339*1caeb00aSHarry Fuecks exit(0); 340*1caeb00aSHarry Fuecks 341*1caeb00aSHarry Fuecks break; 342*1caeb00aSHarry Fuecks 343*1caeb00aSHarry Fuecks #---------------------------------------------------------------------- 344*1caeb00aSHarry Fuecks case 'unlock': 345*1caeb00aSHarry Fuecks 346*1caeb00aSHarry Fuecks $WIKI_ID = $OPTS->arg(1); 347*1caeb00aSHarry Fuecks 348*1caeb00aSHarry Fuecks if ( !$WIKI_ID ) { 349*1caeb00aSHarry Fuecks fwrite( STDERR, "Wiki page ID required\n"); 350*1caeb00aSHarry Fuecks exit(1); 351*1caeb00aSHarry Fuecks } 352*1caeb00aSHarry Fuecks 353*1caeb00aSHarry Fuecks if ( $OPTS->has('f') ) { 354*1caeb00aSHarry Fuecks deleteLock($WIKI_ID); 355*1caeb00aSHarry Fuecks } else { 356*1caeb00aSHarry Fuecks clearLock($WIKI_ID); 357*1caeb00aSHarry Fuecks } 358*1caeb00aSHarry Fuecks 359*1caeb00aSHarry Fuecks print "Unlocked : $WIKI_ID\n"; 360*1caeb00aSHarry Fuecks exit(0); 361*1caeb00aSHarry Fuecks 362*1caeb00aSHarry Fuecks break; 363*1caeb00aSHarry Fuecks 364*1caeb00aSHarry Fuecks #---------------------------------------------------------------------- 365*1caeb00aSHarry Fuecks default: 366*1caeb00aSHarry Fuecks 367*1caeb00aSHarry Fuecks fwrite( STDERR, "Invalid action ".$OPTS->arg(0)."\n" ); 368*1caeb00aSHarry Fuecks exit(1); 369*1caeb00aSHarry Fuecks 370*1caeb00aSHarry Fuecks break; 371*1caeb00aSHarry Fuecks 372*1caeb00aSHarry Fuecks} 373*1caeb00aSHarry Fuecks 374