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