#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <errno.h>

#include <sys/types.h>
#include <signal.h>


char *pidfile_default = "/var/run/autofs.pid";

int main(const int argc, char *const *argv) {
	int usage() {
		fprintf( stderr, ( "Usage: %s [ PIDFILE | PID ]\n"
			"Force-expire autmount shares.\nEither pidfile path"
			" (default: %s) or pid can be specified as a single argument.\n" ),
			argv[0], pidfile_default );
		return(1); };
	if (argc > 2 || (argc == 2 && ( !strcmp(argv[1], "-h")
		|| !strcmp(argv[1], "--help") ))) return usage();


	int pid = 0; char *pidfile_path = NULL;

	if (argc == 1) pidfile_path = pidfile_default;
	else if (!sscanf(argv[1], "%d", &pid)) pidfile_path = argv[1];

	if (pidfile_path) {
		FILE *pidfile;
		if (!(pidfile = fopen(pidfile_path, "r"))) {
			fprintf(stderr, "Error reading pidfile: %s\n", strerror(errno));
			return(1); }
		fscanf(pidfile, "%d", &pid); }

	if (!pid) {
		fprintf(stderr, "Unable to determine PID from file/agrv\n");
		return(1); }


	if (kill(pid, SIGUSR1)) {
		fprintf(stderr, "Failed to send signal: %s\n", strerror(errno));
		return(1); }
	else return(0);
}
