diff options
| -rw-r--r-- | lock.c | 65 | 
1 files changed, 38 insertions, 27 deletions
| @@ -1,27 +1,38 @@ -/* See LICENSE for licence details. */
 -#include <errno.h>
 -#include <string.h>
 -#include <stdio.h>
 -#include <unistd.h>
 -#include <sys/stat.h>
 -#include <stdlib.h>
 -
 -int main(int argc, char **argv){
 -	if(argc != 2){
 -		fprintf(stderr, "Please supply one argument: the lock directory.\n");
 -		return EXIT_FAILURE;
 -	}
 -
 -	/* create lock */
 -	if(mkdir(argv[1], S_IRUSR)){
 -		if(errno && errno != EEXIST) {
 -			fprintf(stderr, "Failed to create lock %s.\n", argv[1]);
 -			return EXIT_FAILURE;
 -		}
 -		/* lock exists */
 -		for(; mkdir(argv[1], S_IRUSR); ){
 -			sleep(1);
 -		}
 -	}	
 -	return EXIT_SUCCESS;
 -}
 +/* See LICENSE for licence details. */ +#include <errno.h> +#include <string.h> +#include <stdio.h> +#include <unistd.h> +#include <sys/stat.h> +#include <stdlib.h> + +int try_mkdir(const char *dn) { +	int ret; + +	errno = 0; +	ret = 0; + +	ret = mkdir(dn, S_IRUSR); +	if(errno && errno != EEXIST) { +		fprintf(stderr, "Failed to create lock %s.\n", dn); +		exit(EXIT_FAILURE); +	} +		return ret; + +} + +int main(int argc, char **argv){ +	if(argc != 2){ +		fprintf(stderr, "Please supply one argument: the lock directory.\n"); +		return EXIT_FAILURE; +	} + +	/* create lock */ +	if(try_mkdir(argv[1])){ +		/* lock exists */ +		for(; try_mkdir(argv[1]); ){ +			sleep(1); +		} +	} +	return EXIT_SUCCESS; +} | 
