File: _dl_queue.c

package info (click to toggle)
dietlibc 0.34~cvs20160606-10
  • links: PTS, VCS
  • area: main
  • in suites: buster
  • size: 11,336 kB
  • sloc: ansic: 71,631; asm: 13,006; cpp: 1,860; makefile: 799; sh: 292; perl: 62
file content (41 lines) | stat: -rw-r--r-- 880 bytes parent folder | download | duplicates (10)
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
#include <dlfcn.h>
#include "_dl_int.h"

#define MAX_QUEUE 64

static int _dl_queue_start=0;
static int _dl_queue_stop=0;

static struct {
  const char*name;
  int flags;
} _dl_queue[MAX_QUEUE];

#ifdef __DIET_LD_SO__
static
#endif
int _dl_queue_lib(const char*name,int flags) {
  struct _dl_handle*ret;
  if ((ret=_dl_find_lib(name))) ++(ret->lnk_count);
  else {
    register int tmp;
    if ((tmp=_dl_queue_stop+1)>=MAX_QUEUE) tmp=0;
    if (tmp==_dl_queue_start) return -1;
    _dl_queue[_dl_queue_stop].name=name;
    _dl_queue[_dl_queue_stop].flags=flags;
    _dl_queue_stop=tmp;
  }
  return 0;
}

#ifdef __DIET_LD_SO__
static
#endif
int _dl_open_dep() {
  while (_dl_queue_start!=_dl_queue_stop) {
    int tmp=_dl_queue_start;
    if (++_dl_queue_start>=MAX_QUEUE) _dl_queue_start=0;
    if (!_dlopen(_dl_queue[tmp].name,_dl_queue[tmp].flags)) return 1;
  }
  return 0;
}