-
Notifications
You must be signed in to change notification settings - Fork 0
/
realpath.c
43 lines (38 loc) · 902 Bytes
/
realpath.c
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
/**
* Copyright (c) 2014, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the "hack" directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*
*/
#include <caml/mlvalues.h>
#include <caml/memory.h>
#include <caml/alloc.h>
#include <limits.h>
#include <stdlib.h>
#define Val_none Val_int(0)
static value
Val_some( value v )
{
CAMLparam1( v );
CAMLlocal1( some );
some = caml_alloc(1, 0);
Store_field( some, 0, v );
CAMLreturn( some );
}
CAMLprim value
hh_realpath(value v) {
char *input;
char output[PATH_MAX];
char *result;
CAMLparam1(v);
input = String_val(v);
result = realpath(input, output);
if (result == NULL) {
CAMLreturn(Val_none);
} else {
CAMLreturn(Val_some(caml_copy_string(output)));
}
}