#ifdef UCERT_FULL
/*
* call usign -S ...
- * return WEXITSTATUS or -1 if fork or execv fails
+ * return WEXITSTATUS or -1 if fork fails
*/
int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bool quiet) {
pid_t pid;
if (!quiet)
perror("Failed to execute usign");
_exit(1);
-
- default:
- waitpid(pid, &status, 0);
- return WEXITSTATUS(status);
}
- return -1;
+ waitpid(pid, &status, 0);
+ return WIFEXITED(status) ? WEXITSTATUS(status) : -1;
}
#else
int usign_s(const char *msgfile, const char *seckeyfile, const char *sigfile, bool quiet) {
/*
* call usign -F ... and set fingerprint returned
- * return WEXITSTATUS or -1 if fork or execv fails
+ * return WEXITSTATUS or -1 if fork fails
*/
-static int usign_f(char *fingerprint, const char *pubkeyfile, const char *seckeyfile, const char *sigfile, bool quiet) {
+static int usign_f(char fingerprint[17], const char *pubkeyfile, const char *seckeyfile, const char *sigfile, bool quiet) {
int fds[2];
pid_t pid;
int status;
case 0:
dup2(fds[1], 1);
- close(0);
- close(2);
close(fds[0]);
close(fds[1]);
if (!quiet)
perror("Failed to execute usign");
_exit(1);
+ }
- default:
- waitpid(pid, &status, 0);
- status = WEXITSTATUS(status);
- if (fingerprint && !WEXITSTATUS(status)) {
- ssize_t r;
- memset(fingerprint, 0, 17);
- r = read(fds[0], fingerprint, 17);
- if (r < 16)
- status = -1;
+ close(fds[1]);
- fingerprint[16] = '\0';
+ waitpid(pid, &status, 0);
+ status = WIFEXITED(status) ? WEXITSTATUS(status) : -1;
- }
- close(fds[0]);
- close(fds[1]);
- return status;
- }
+ if (fingerprint && !status) {
+ ssize_t r;
+ memset(fingerprint, 0, 17);
+ r = read(fds[0], fingerprint, 17);
+ if (r < 16)
+ status = -1;
- return -1;
+ fingerprint[16] = '\0';
+
+ }
+ close(fds[0]);
+ return status;
}
/*
* call usign -F -p ...
*/
-int usign_f_pubkey(char *fingerprint, const char *pubkeyfile, bool quiet) {
+int usign_f_pubkey(char fingerprint[17], const char *pubkeyfile, bool quiet) {
return usign_f(fingerprint, pubkeyfile, NULL, NULL, quiet);
}
/*
* call usign -F -s ...
*/
-int usign_f_seckey(char *fingerprint, const char *seckeyfile, bool quiet) {
+int usign_f_seckey(char fingerprint[17], const char *seckeyfile, bool quiet) {
return usign_f(fingerprint, NULL, seckeyfile, NULL, quiet);
}
/*
* call usign -F -x ...
*/
-int usign_f_sig(char *fingerprint, const char *sigfile, bool quiet) {
+int usign_f_sig(char fingerprint[17], const char *sigfile, bool quiet) {
return usign_f(fingerprint, NULL, NULL, sigfile, quiet);
}
/*
* call usign -V ...
- * return WEXITSTATUS or -1 if fork or execv fails
+ * return WEXITSTATUS or -1 if fork fails
*/
int usign_v(const char *msgfile, const char *pubkeyfile,
const char *pubkeydir, const char *sigfile, bool quiet) {
if (!quiet)
perror("Failed to execute usign");
_exit(1);
-
- default:
- waitpid(pid, &status, 0);
- return WEXITSTATUS(status);
}
- return -1;
+ waitpid(pid, &status, 0);
+ return WIFEXITED(status) ? WEXITSTATUS(status) : -1;
}