forked from bakkeby/slock-flexipatch
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Add arg.h and fix usage Given slock is suid we don't want to have half-measures in place to parse the arguments in case the code is changed in the future with somebody not paying enough attention. Also, fix the usage string output to be more consistent across the suckless toolbase and make it reflect the manpage entry. - Comments Use proper block comments and add/change them where necessary to help in studying the code. - Error messages Consistently prepend them with "slock:" and fix wording and do a proper cleanup before quitting (XCloseDisplay and free the locks), making the die() semantics consistent with st's. - getpwuid() error reporting Properly present an error message if getpwuid() fails. - fork() error reporting Properly present an error message if fork() fails. If we cannot close the connection within the fork context we abort the operation and report an error. - execvp() error handling If execvp fails, we cannot call die() afterwards as this implies calling exit(). We must use _exit() to prevent the libc from doing now "illegal" cleanup-work.
- Loading branch information
Showing
2 changed files
with
119 additions
and
31 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,65 @@ | ||
/* | ||
* Copy me if you can. | ||
* by 20h | ||
*/ | ||
|
||
#ifndef ARG_H__ | ||
#define ARG_H__ | ||
|
||
extern char *argv0; | ||
|
||
/* use main(int argc, char *argv[]) */ | ||
#define ARGBEGIN for (argv0 = *argv, argv++, argc--;\ | ||
argv[0] && argv[0][0] == '-'\ | ||
&& argv[0][1];\ | ||
argc--, argv++) {\ | ||
char argc_;\ | ||
char **argv_;\ | ||
int brk_;\ | ||
if (argv[0][1] == '-' && argv[0][2] == '\0') {\ | ||
argv++;\ | ||
argc--;\ | ||
break;\ | ||
}\ | ||
for (brk_ = 0, argv[0]++, argv_ = argv;\ | ||
argv[0][0] && !brk_;\ | ||
argv[0]++) {\ | ||
if (argv_ != argv)\ | ||
break;\ | ||
argc_ = argv[0][0];\ | ||
switch (argc_) | ||
|
||
/* Handles obsolete -NUM syntax */ | ||
#define ARGNUM case '0':\ | ||
case '1':\ | ||
case '2':\ | ||
case '3':\ | ||
case '4':\ | ||
case '5':\ | ||
case '6':\ | ||
case '7':\ | ||
case '8':\ | ||
case '9' | ||
|
||
#define ARGEND }\ | ||
} | ||
|
||
#define ARGC() argc_ | ||
|
||
#define ARGNUMF() (brk_ = 1, estrtonum(argv[0], 0, INT_MAX)) | ||
|
||
#define EARGF(x) ((argv[0][1] == '\0' && argv[1] == NULL)?\ | ||
((x), abort(), (char *)0) :\ | ||
(brk_ = 1, (argv[0][1] != '\0')?\ | ||
(&argv[0][1]) :\ | ||
(argc--, argv++, argv[0]))) | ||
|
||
#define ARGF() ((argv[0][1] == '\0' && argv[1] == NULL)?\ | ||
(char *)0 :\ | ||
(brk_ = 1, (argv[0][1] != '\0')?\ | ||
(&argv[0][1]) :\ | ||
(argc--, argv++, argv[0]))) | ||
|
||
#define LNGARG() &argv[0][0] | ||
|
||
#endif |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters