This file is indexed.

/usr/lib/ats-anairiats-0.2.5/libc/SATS/dlfcn.sats is in ats-lang-anairiats 0.2.5-0ubuntu1.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  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
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
(***********************************************************************)
(*                                                                     *)
(*                         Applied Type System                         *)
(*                                                                     *)
(*                              Hongwei Xi                             *)
(*                                                                     *)
(***********************************************************************)

(*
**
** ATS - Unleashing the Potential of Types!
**
** Copyright (C) 2002-2010 Hongwei Xi, Boston University
**
** All rights reserved
**
** ATS is free software;  you can  redistribute it and/or modify it under
** the  terms of the  GNU General Public License as published by the Free
** Software Foundation; either version 2.1, or (at your option) any later
** version.
** 
** ATS is distributed in the hope that it will be useful, but WITHOUT ANY
** WARRANTY; without  even  the  implied  warranty  of MERCHANTABILITY or
** FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License
** for more details.
** 
** You  should  have  received  a  copy of the GNU General Public License
** along  with  ATS;  see the  file COPYING.  If not, please write to the
** Free Software Foundation,  51 Franklin Street, Fifth Floor, Boston, MA
** 02110-1301, USA.
*)

(* ****** ****** *)

// Author: Hongwei Xi (hwxi AT cs DOT bu DOT edu)
// Time: February, 2010

(* ****** ****** *)

%{#
#include "libc/CATS/dlfcn.cats"
%}

(* ****** ****** *)

absview dlopen_v (addr) // abstract view for [dlopen]

(* ****** ****** *)

abst@ype dlopen_flag_t = int
macdef RTLD_LAZY = $extval (dlopen_flag_t, "RTLD_LAZY")
macdef RTLD_NOW = $extval (dlopen_flag_t, "RTLD_NOW")

abst@ype dlopen_flagext_t = int
macdef RTLD_GLOBAL = $extval (dlopen_flagext_t, "RTLD_GLOBAL")
macdef RTLD_LOCAL = $extval (dlopen_flagext_t, "RTLD_LOCAL")

// since glibc-2.2
macdef RTLD_NODELETE = $extval (dlopen_flagext_t, "RTLD_NODELETE")

// since glibc-2.2
macdef RTLD_NOLOAD = $extval (dlopen_flagext_t, "RTLD_NOLOAD")

// since glibc-2.3.4
macdef RTLD_DEEPBIND = $extval (dlopen_flagext_t, "RTLD_DEEPBIND")

(* ****** ****** *)

fun lor_dlopen_flag_dlopen_flagext
  (flag: dlopen_flag_t, ext: dlopen_flagext_t):<> dlopen_flag_t
  = "atslib_lor_dlopen_flag_dlopen_flagext"
overload lor with lor_dlopen_flag_dlopen_flagext

(* ****** ****** *)

(*
void *dlopen(const char *filename, int flag);
*)
fun dlopen
  (filename: string, flag: dlopen_flag_t)
  :<> [l:addr] (option_v (dlopen_v l, l > null) | ptr l)
  = "mac#atslib_dlopen"
// end of [dlopen]

fun dlopen_exn
  (filename: string, flag: dlopen_flag_t)
  :<!exn> [l:agz] (dlopen_v l | ptr l)
  = "atslib_dlopen_exn" // this is a function
// end of [dlopen_exn]

(* ****** ****** *)

// success/failure: err = 0/1
fun dlclose {l:agz} (
    pf: !dlopen_v l >> option_v (dlopen_v l, i > 0) | handle: ptr l
  ) :<> #[i:int | i >= 0] int(i) (*err*)
  = "mac#atslib_dlclose"
// end of [dlclose]

fun dlclose_exn {l:agz}
  (pf: dlopen_v l | handle: ptr l):<!exn> void
  = "atslib_dlclose_exn" // this is a function
// end of [dlclose_exn]

(* ****** ****** *)
//
// HX:
// for reporting error;
// there is no error if the return is null
//
fun dlerror ()
  : [l:addr] (strptr (l) -<lin,prf> void | strptr (l))
  = "mac#atslib_dlerror"
// end of [dlerror]

fun dlerror_clr (): void // end of [dlerror_clr]

(* ****** ****** *)

fun dlsym {l:addr}
  (pf: !dlopen_v l | handle: ptr l, sym: string): ptr
  = "mac#atslib_dlsym"
// end of [dlsym]

(* ****** ****** *)

(* end of [dlfcn.sats] *)