From ac2093c87d9e2d129dc7b9c411058d8f8a22fb56 Mon Sep 17 00:00:00 2001 From: Kelvin Sherlock Date: Mon, 8 Feb 2016 22:31:16 -0500 Subject: [PATCH] Delete -- add support for -c, -n -y. Of course, in testing, MPW ignores them. go figure. --- Delete.c | 42 +++++++++++++++++++++++++++++++++++++----- 1 file changed, 37 insertions(+), 5 deletions(-) diff --git a/Delete.c b/Delete.c index db70957..8eb6a6a 100644 --- a/Delete.c +++ b/Delete.c @@ -56,20 +56,20 @@ char *c2p(const char *cp) // 0 - no file // 1 - regular file // 2 - directory. -int mode(const char *path) +int mode(const char *pname) { - char *pname; + //char *pname; CInfoPBRec rec; OSErr status; memset(&rec, 0, sizeof(rec)); - pname = c2p(path); - if (!pname) return -1; + //pname = c2p(path); + //if (!pname) return -1; rec.hFileInfo.ioNamePtr = (unsigned char *)pname; status = PBGetCatInfo(&rec, false); - free(pname); + //free(pname); if (status) return 0; if (rec.hFileInfo.ioFlAttrib & kioFlAttribDirMask) @@ -78,6 +78,19 @@ int mode(const char *path) return 1; } +int prompt(const char *file) { + char ch; + char first; + + fprintf(stderr, "remove %s? ", file); + fflush(stderr); + + first = ch = getchar(); + while (ch != '\n' && ch != EOF) ch = getchar(); + if (first == 'y' || first == 'Y') return 1; + return 0; +} + static char error_message[255]; int main(int argc, char **argv) { @@ -86,21 +99,40 @@ int main(int argc, char **argv) { argc = FlagsParse(argc, argv); + if (flags._c + flags._n + flags._y > 1) { + fprintf(stderr, "### Delete - Conflicting options were specified.\n"); + FlagsHelp(); + return 1; + } + if (argc == 1) { FlagsHelp(); return 1; } + + pascalStrings = false; InitErrMgr(NULL, NULL, true); for (i = 1 ; i < argc; ++i) { OSErr err; + int m; + char *file = argv[i]; char *p = c2p(file); // todo -- y/n/c flags. + m = mode(p); + if (m == 2 && !flags._y) { + // directory... + if (flags._n) continue; + if (flags._c) { status = 4; break; } + + if (!prompt(file)) continue; + } + err = FSDelete((unsigned char *)p, 0); if (err && !flags._i) { fprintf(stderr, "### Delete - unable to delete %s\n", file);