1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
#ifndef PATHS_H
#define PATHS_H
#include <url/url.h>
#include <waiter/waiter.h>
#include <process/process.h>
/**
* Utility function for joining two paths. Adds a / between a and b if
* required.
*
* Returns a newly-allocated string.
*/
char *join_paths(void *alloc_ctx, const char *a, const char *b);
/**
* Returns the base path for mount points
*/
const char *mount_base(void);
struct load_task;
struct load_url_result {
enum {
LOAD_OK, /* load complete. other members should only be
accessed if status == LOAD_OK */
LOAD_ERROR, /* only signalled to async loaders
* (sync will see a NULL result) */
LOAD_ASYNC, /* async load still in progress */
LOAD_CANCELLED,
} status;
struct pb_url *url;
const char *local;
bool cleanup_local;
struct load_task *task;
};
/* callback type for asynchronous loads. The callback implementation is
* responsible for freeing result.
*/
typedef void (*load_url_complete)(struct load_url_result *result, void *data);
/* Load a (potentially remote) file, and return a guaranteed-local name */
struct load_url_result *load_url_async(void *ctx, struct pb_url *url,
load_url_complete complete, void *data,
waiter_cb stdout_cb, void *stdout_data);
/* Cancel a pending load */
void load_url_async_cancel(struct load_url_result *res);
struct load_url_result *load_url(void *ctx, struct pb_url *url);
#endif /* PATHS_H */
|