aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFRIGN <dev@frign.de>2014-04-11 12:47:37 +0200
committerFRIGN <dev@frign.de>2014-04-11 12:47:37 +0200
commit561a2fa77d29d3b797456ed92dc0f8f23798c0ea (patch)
tree7f99f4f987e41d7bf59e0cdd1df78695f8f09aa2
parent0d9f550bb48f49c11bbf7220d74b9453731149c6 (diff)
Fixing the obvious stuff by mar77i and fixing the obvious stuff he forgot.
-rw-r--r--lock.c43
1 files changed, 9 insertions, 34 deletions
diff --git a/lock.c b/lock.c
index 68245ac..1075628 100644
--- a/lock.c
+++ b/lock.c
@@ -1,4 +1,5 @@
/* See LICENSE for licence details. */
+#include <errno.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
@@ -6,47 +7,21 @@
#include <stdlib.h>
int main(int argc, char **argv){
- size_t pathlen, argvlen;
- char *path;
-
if(argc != 2){
fprintf(stderr, "Please supply one argument: the lock directory.\n");
return EXIT_FAILURE;
}
- if(access(argv[1], F_OK)){
- /* create lock */
- if(mkdir(argv[1], S_IRUSR | S_IXUSR)){
+ /* 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;
}
- return EXIT_SUCCESS;
- }
-
- /* prepare path */
- argvlen = strlen(argv[1]);
- pathlen = argvlen + sizeof("/..") + 1;
- path = malloc(pathlen);
- if(path == NULL) {
- fprintf(stderr, "malloc() failed\n");
- return EXIT_FAILURE;
- }
-
- memcpy(path, argv[1], argvlen);
- memcpy(path + argvlen, "/..\0", sizeof("/..") + 1);
-
- if(access(path, F_OK)){
- /* invalid lock */
- fprintf(stderr, "%s is not a lock directory.\n", argv[1]);
- free(path);
- return EXIT_FAILURE;
- }
-
- /* lock exists */
- for(; !access(path, F_OK) ;){
- sleep(1);
- }
-
- free(path);
+ /* lock exists */
+ for(; mkdir(argv[1], S_IRUSR); ){
+ sleep(1);
+ }
+ }
return EXIT_SUCCESS;
}