/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*- * * The contents of this file are subject to the Netscape Public License * Version 1.0 (the "NPL"); you may not use this file except in * compliance with the NPL. You may obtain a copy of the NPL at * http://www.mozilla.org/NPL/ * * Software distributed under the NPL is distributed on an "AS IS" basis, * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL * for the specific language governing rights and limitations under the * NPL. * * The Initial Developer of this code under the NPL is Netscape * Communications Corporation. Portions created by Netscape are * Copyright (C) 1998 Netscape Communications Corporation. All Rights * Reserved. */ #include #include #include void usage( char *pMsg ){ if( pMsg ){ fprintf( stderr, "waitfor: %s\n\n", pMsg ); } fprintf( stderr, "waitfor - wait for a file to exist\n" "\n" "usage: waitfor [-a] [..] \n" "\n" " Waits for file to exist and returns 0, if more than one file is\n" " specified, waitfor waits for the first one found.\n" "\n" "Parameters:" "\n" " -a Waits for all files to be created \n" ); exit(-1); } #define FILEMAX 300 void waitfor( int iFileCount, char**ppFiles, int bAll ){ int bDone = 0; while( !bDone ){ struct stat statbuf; int i = 0; while( i < iFileCount ){ if( stat( ppFiles[i], &statbuf ) == 0 ){ if( !bAll ){ bDone = 1; } } else { goto SLEEP; } i++; } bDone = 1; SLEEP: if( !bDone ){ _sleep( 100 * 1 ); } } } int main( int argc, char** argv ){ if( argc == 0 ){ usage(0); } int bAll = 0; int i = 1; char* ppFiles[FILEMAX]; int iFileCount = 0; while( i < argc ){ if( argv[i][0] == '-' ){ switch( argv[i][1] ){ case 'a': bAll = 1; defaut: usage("Unknown option"); } } else { ppFiles[iFileCount] = argv[i]; iFileCount++; } if( iFileCount >= FILEMAX || iFileCount == 0 ){ usage("Too many files"); } i++; } waitfor( iFileCount, ppFiles, bAll ); return 0; }