/ src / launchd / support / wait4path.c
wait4path.c
 1  /*
 2   * Copyright (c) 2005 Apple Computer, Inc. All rights reserved.
 3   *
 4   * @APPLE_APACHE_LICENSE_HEADER_START@
 5   * 
 6   * Licensed under the Apache License, Version 2.0 (the "License");
 7   * you may not use this file except in compliance with the License.
 8   * You may obtain a copy of the License at
 9   * 
10   *     http://www.apache.org/licenses/LICENSE-2.0
11   * 
12   * Unless required by applicable law or agreed to in writing, software
13   * distributed under the License is distributed on an "AS IS" BASIS,
14   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15   * See the License for the specific language governing permissions and
16   * limitations under the License.
17   * 
18   * @APPLE_APACHE_LICENSE_HEADER_END@
19   */
20  #include <sys/types.h>
21  #include <sys/stat.h>
22  #include <sys/event.h>
23  #include <sys/time.h>
24  #include <sys/param.h>
25  #include <stdlib.h>
26  #include <stdio.h>
27  #include <unistd.h>
28  #include <errno.h>
29  #include <string.h>
30  
31  int main(int argc, char *argv[])
32  {
33  	int kq = kqueue();
34  	struct kevent kev;
35  	struct stat sb;
36  
37  	if (argc != 2) {
38  		fprintf(stderr, "usage: %s <object on mount point>\n", argv[0]);
39  		exit(EXIT_FAILURE);
40  	}
41  
42  	EV_SET(&kev, 0, EVFILT_FS, EV_ADD, 0, 0, 0);
43  
44  	if (kevent(kq, &kev, 1, NULL, 0, NULL) == -1) {
45  		fprintf(stderr, "adding EVFILT_FS to kqueue failed: %s\n", strerror(errno));
46  		exit(EXIT_FAILURE);
47  	}
48  
49  	if (stat(argv[1], &sb) == 0) {
50  		exit(EXIT_SUCCESS);
51  	}
52  
53  	for (;;) {
54  		kevent(kq, NULL, 0, &kev, 1, NULL);
55  		if (stat(argv[1], &sb) == 0) {
56  			break;
57  		}
58  	}
59  
60  	exit(EXIT_SUCCESS);
61  }