1/*
2 * Copyright 2015, Axel D��rfler, axeld@pinc-software.de.
3 * Distributed under the terms of the MIT License.
4 */
5
6
7#include "AbstractEmptyDirectoryJob.h"
8
9#include <stdio.h>
10
11#include <Directory.h>
12#include <Entry.h>
13
14
15AbstractEmptyDirectoryJob::AbstractEmptyDirectoryJob(const BString& name)
16	:
17	BJob(name)
18{
19}
20
21
22status_t
23AbstractEmptyDirectoryJob::CreateAndEmpty(const char* path) const
24{
25	BEntry entry(path);
26	if (!entry.Exists()) {
27		create_directory(path, 0777);
28
29		status_t status = entry.SetTo(path);
30		if (status != B_OK) {
31			fprintf(stderr, "Cannot create directory \"%s\": %s\n", path,
32				strerror(status));
33			return status;
34		}
35	}
36
37	return _EmptyDirectory(entry, false);
38}
39
40
41status_t
42AbstractEmptyDirectoryJob::_EmptyDirectory(BEntry& directoryEntry,
43	bool remove) const
44{
45	BDirectory directory(&directoryEntry);
46	BEntry entry;
47	while (directory.GetNextEntry(&entry) == B_OK) {
48		if (entry.IsDirectory())
49			_EmptyDirectory(entry, true);
50		else
51			entry.Remove();
52	}
53
54	return remove ? directoryEntry.Remove() : B_OK;
55}
56