Esempio n. 1
0
void main(void) {
    init_reg();
    unsigned int row, column;
    init_keyboard();
    while(1) {
        selectseg();
        writedec();
    }
}
Esempio n. 2
0
/* Write number in decimal format to file descriptor, printf() is BLOATED!!! */
static void writedec(int fd, int num)
{
	/* Special cases: zero and negative numbers (print neg.sign) */
	if (num == 0) {
		write(fd, "0", 1);
		return;
	}
	if (num < 0) {
		write(fd, "-", 1);
		num *= -1;
	}
	/*
	 * If num >= 10, print More Significant DigitS first by recursive call
	 * then we print Least Significatn Digit ourselves.
	 */
	int msds = num / 10;
	int lsd = num % 10;
	if (msds)
		writedec(fd, msds);
	char digit = '0' + lsd;
	write(fd, &digit, 1);
}
Esempio n. 3
0
int main(int argc, char *argv[]) {
	/* Client when called with u d r q options */
	if (argc > 1) {
		int cmdfd = open("/var/run/ovpnd.cmd", O_WRONLY|O_NONBLOCK);
		if (cmdfd < 0) {
			write(2, "Can't open /var/run/ovpnd.cmd\n", 31);
			return 10;
		}
		if (write(cmdfd, argv[1], 1) == 0) {
			write(2, "Can't write /var/run/ovpnd.cmd\n", 32);
			return 11;
		}
		return 0;
	}
	/* Fork the real daemon */
	pid_t pid = fork();
	if (pid < 0)
		return 1;
	if (pid > 0) {
		write(1, "ovpnd daemon started, PID ", 26);
		writedec(1, pid);
		write(1, "\n", 1);
		return 0;
	}
	/* umask and session ID */
	umask(0);
	pid_t sid = setsid();
	if (sid < 0)
		return 2;
	/* Run in erm... /var/run */
	if (chdir("/var/run/") < 0)
		return 3;
	/* Create log file as stdout and stderr */
	close(0);
	logfd = creat("ovpnd.stat", 0644);
	if (logfd < 0)
		return 4;
	close(1);
	logfd = dup(logfd);
	writedec(logfd, sid);
	if (write(logfd, " ovpnd started\n", 15) < 15)
		return 5;
	close(2);
	dup(logfd);
	/* Create and open FIFO for command input as stdin */
	unlink("ovpnd.cmd");
	write(logfd, "Deleted original ovpnd.cmd FIFO\n", 32);
	if (mknod("ovpnd.cmd", S_IFIFO | 0666, 0) < 0)
		return 6;
	write(logfd, "Created new ovpnd.cmd FIFO\n", 27);
	close(0);
	int cmdfd = open("ovpnd.cmd", O_RDONLY);
	if (cmdfd < 0)
		return 7;
	/* Main loop */
	char cmd;
	while (1) {
		/*
		 * If writing proc has closed the FIFO, we close it too.
		 * Next open() blocks until a new process opens write end.
		 */
		if (read(cmdfd, &cmd, 1) == 0) {
			close(cmdfd);
			int cmdfd = open("ovpnd.cmd", O_RDONLY);
			if (cmdfd < 0)
				return 7;
			write(logfd, "Opened ovpnd.cmd FIFO\n", 22);
			continue;
		}
		switch (cmd) {
		case 'u':
			if (service("start") != 0)
				return 8;
			break;
		case 'd':
			if (service("stop") != 0)
				return 8;
			break;
		case 'r':
			if (service("restart") != 0)
				return 8;
			break;
		case 'q':
			write(logfd, "Bye\n", 4);
			if (service("stop") != 0)
				return 8;
			return 0;
		default:
			break;
		}
	}
	return 0;
}