aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorCalvin Morrison <mutantturkey@gmail.com>2014-04-11 08:14:19 -0400
committerCalvin Morrison <mutantturkey@gmail.com>2014-04-11 08:14:19 -0400
commit7afe66fc6864c7b7a5fc1b0379cf2be29a22c057 (patch)
tree5beaf3d3281d4c57388b58a9d9d8a14225e8f76d
parent0d9f550bb48f49c11bbf7220d74b9453731149c6 (diff)
parented2589219056458a20aa399d128e06394f632e15 (diff)
Merge pull request #1 from mar77i/master
Obvious fixes.
-rw-r--r--lock.c39
-rwxr-xr-xlock.sh2
2 files changed, 11 insertions, 30 deletions
diff --git a/lock.c b/lock.c
index 68245ac..aaac35a 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>
@@ -14,39 +15,19 @@ int main(int argc, char **argv){
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 | S_IXUSR)){
+ 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 | S_IXUSR);){
+ sleep(1);
+ }
+ return EXIT_SUCCESS;
+ } else
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);
- return EXIT_SUCCESS;
}
diff --git a/lock.sh b/lock.sh
index 22191fe..9a9cdd6 100755
--- a/lock.sh
+++ b/lock.sh
@@ -11,7 +11,7 @@ lock() {
echo "lock $1 found, waiting for unlock" >&2
while true; do
sleep 2;
- if [[ ! -d "$1" ]]; then
+ if mkdir "$1" &>/dev/null; then
return
fi
done