1// Copyright (c) 2013, the Dart project authors. Please see the AUTHORS file
2// for details. All rights reserved. Use of this source code is governed by a
3// BSD-style license that can be found in the LICENSE file.
4
5#ifndef RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
6#define RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
7
8#include <stdio.h>
9#include <stdlib.h>
10#include <string.h>
11#include <sys/types.h>
12
13#include "bin/builtin.h"
14#include "bin/dartutils.h"
15#include "bin/namespace.h"
16
17namespace dart {
18namespace bin {
19
20class FileSystemWatcher {
21 public:
22 enum EventType {
23 kCreate = 1 << 0,
24 kModifyContent = 1 << 1,
25 kDelete = 1 << 2,
26 kMove = 1 << 3,
27 kModefyAttribute = 1 << 4,
28 kDeleteSelf = 1 << 5,
29 kIsDir = 1 << 6
30 };
31
32 struct Event {
33 intptr_t path_id;
34 int event;
35 const char* filename;
36 int link;
37 };
38
39 static bool IsSupported();
40 static intptr_t Init();
41 static void Close(intptr_t id);
42 static intptr_t WatchPath(intptr_t id,
43 Namespace* namespc,
44 const char* path,
45 int events,
46 bool recursive);
47 static void UnwatchPath(intptr_t id, intptr_t path_id);
48 static intptr_t GetSocketId(intptr_t id, intptr_t path_id);
49 static Dart_Handle ReadEvents(intptr_t id, intptr_t path_id);
50
51 private:
52 DISALLOW_COPY_AND_ASSIGN(FileSystemWatcher);
53};
54
55} // namespace bin
56} // namespace dart
57
58#endif // RUNTIME_BIN_FILE_SYSTEM_WATCHER_H_
59