summaryrefslogtreecommitdiffstats
path: root/discover/paths.h
blob: 35673b7eaef6cc1228d95019fd6ccfe0f5302612 (plain)
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 */
OpenPOWER on IntegriCloud