1 /* c_delete.c
2  *
3  * Copyright (c) 1996-2005 Mike Gleason, NcFTP Software.
4  * All rights reserved.
5  *
6  */
7 
8 #include "syshdrs.h"
9 #ifdef PRAGMA_HDRSTOP
10 #	pragma hdrstop
11 #endif
12 
13 int
FTPDelete(const FTPCIPtr cip,const char * const pattern,const int recurse,const int doGlob)14 FTPDelete(const FTPCIPtr cip, const char *const pattern, const int recurse, const int doGlob)
15 {
16 	FTPLineList fileList;
17 	FTPLinePtr filePtr;
18 	char *file;
19 	int onceResult, batchResult;
20 
21 	if (cip == NULL)
22 		return (kErrBadParameter);
23 	if (strcmp(cip->magic, kLibraryMagic))
24 		return (kErrBadMagic);
25 
26 	batchResult = FTPRemoteGlob(cip, &fileList, pattern, doGlob);
27 	if (batchResult != kNoErr)
28 		return (batchResult);
29 
30 	for (batchResult = kNoErr, filePtr = fileList.first;
31 		filePtr != NULL;
32 		filePtr = filePtr->next)
33 	{
34 		file = filePtr->line;
35 		if (file == NULL) {
36 			batchResult = kErrBadLineList;
37 			cip->errNo = kErrBadLineList;
38 			break;
39 		}
40 		onceResult = FTPCmd(cip, "DELE %s", file);
41 		if (onceResult < 0) {
42 			batchResult = onceResult;
43 			break;
44 		}
45 		if (onceResult != 2) {
46 			if (recurse != kRecursiveYes) {
47 				batchResult = kErrDELEFailed;
48 				cip->errNo = kErrDELEFailed;
49 			} else {
50 				onceResult = FTPCmd(cip, "RMD %s", file);
51 				if (onceResult < 0) {
52 					batchResult = onceResult;
53 					break;
54 				}
55 				if (onceResult != 2) {
56 					onceResult = FTPRmdirRecursive(cip, file);
57 					if (onceResult < 0) {
58 						batchResult = kErrRMDFailed;
59 						cip->errNo = kErrRMDFailed;
60 					}
61 				}
62 			}
63 		}
64 	}
65 	DisposeLineListContents(&fileList);
66 	return (batchResult);
67 }	/* FTPDelete */
68