From f078cd9d83c8486f314e8e8cb516854314b36352 Mon Sep 17 00:00:00 2001
From: "Rob Swindell (on Debian Linux)" <rob@synchro.net>
Date: Sun, 1 Dec 2024 21:15:11 -0800
Subject: [PATCH] Add -c and -R options

Really need to make the option order (arity) neutral
---
 src/xpdev/sopenfile.c | 15 ++++++++++++++-
 1 file changed, 14 insertions(+), 1 deletion(-)

diff --git a/src/xpdev/sopenfile.c b/src/xpdev/sopenfile.c
index ec778722b5..d2d70b86f4 100644
--- a/src/xpdev/sopenfile.c
+++ b/src/xpdev/sopenfile.c
@@ -8,11 +8,14 @@ int main(int argc, char** argv)
 	char* share = "NWA";
 	bool try_all = true;
 	bool loop = false;
+	bool rm = false;
 
 	if(argc < 2) {
 		printf("usage: sopenfile [-r] [-l] <path/filename> [share-mode]\n");
 		printf("\n");
 		printf("-r           open file read-only instead of read/write\n");
+		printf("-c           open file with create permissions\n");
+		printf("-R           remove file after open\n");
 		printf("-l           loop until failure\n");
 		printf("\n");
 		printf("share-mode:  N (deny-none)\n");
@@ -25,6 +28,14 @@ int main(int argc, char** argv)
 		access = O_RDONLY;
 		++argn;
 	}
+	if(strcmp(argv[argn], "-c") == 0) {
+		access |= O_CREAT;
+		++argv;
+	}
+	if(strcmp(argv[argn], "-R") == 0) {
+		rm = true;
+		++argn;
+	}
 	if(strcmp(argv[argn], "-l") == 0) {
 		loop = true;
 		++argn;
@@ -54,11 +65,13 @@ int main(int argc, char** argv)
 					return EXIT_FAILURE;
 			}
 			fprintf(stderr, "%s Deny-%c (share mode %x): ", path, toupper(share_flag), share_mode);
-			int file = sopen(path, access, share_mode);
+			int file = sopen(path, access, share_mode, DEFFILEMODE);
 			if(file < 0)
 				fprintf(stderr, "Error %d (%s)\n", errno, strerror(errno));
 			else {
 				printf("Success\n");
+				if(rm)
+					printf("remove(%s) = %d\n", path, unlink(path));
 				if(!try_all) {
 					fprintf(stderr, "Hit enter\n");
 					getchar();
-- 
GitLab