/*
 *	scritto da zero per CloseBSD, Estate 2026
 */

// sistema verifica bitmask

#include <errno.h>
#include <stdio.h>
#include <string.h>
#include <sys/stat.h>
#include <sys/syscall.h>
#include <unistd.h>

int main(int argc, char *argv[])
{
	struct stat st;

	if (argc < 2) {
		printf("Nessun argomento\n");
		return 1;
	}

	for (int i = 1; i < argc; i++) {
		if (stat(argv[i], &st) == -1) {
			perror(argv[i]);
			return 1;
		}

		if ((strcmp(argv[0], "blinda")) == 0) {
			if (st.st_flags == 0) {
				switch (chflags(argv[i], SF_IMMUTABLE)) {
					case 0:
						printf("%s: blindato!\n", argv[i]);
						break;
					case -1:
						perror(argv[i]);
						break;
				}
			}

			else if (st.st_flags == 131072)
				printf("%s: gia' blindato\n", argv[i]);
		}

		if ((strcmp(argv[0], "sblinda")) == 0) {
			if (st.st_flags == 131072) {
				switch (chflags(argv[i], !SF_IMMUTABLE)) {
					case 0:
						printf("%s: sbloccato\n", argv[i]);
						break;
					case -1:
						perror(argv[i]);
						break;
				}
			}

			else if (st.st_flags == 0)
				printf("%s: non blindato\n", argv[i]);
		}
	}

	return 0;
}
