63 lines
1.8 KiB
C
63 lines
1.8 KiB
C
|
/****************************************************************
|
||
|
* *
|
||
|
* Copyright 2001, 2009 Fidelity Information Services, Inc *
|
||
|
* *
|
||
|
* This source code contains the intellectual property *
|
||
|
* of its copyright holder(s), and is made available *
|
||
|
* under a license. If you do not know the terms of *
|
||
|
* the license, please stop and do not read further. *
|
||
|
* *
|
||
|
****************************************************************/
|
||
|
|
||
|
#include "mdef.h"
|
||
|
|
||
|
#include "gtm_string.h"
|
||
|
|
||
|
#include "io.h"
|
||
|
#include "ident.h"
|
||
|
#include "mmemory.h"
|
||
|
|
||
|
GBLREF io_log_name *io_root_log_name;
|
||
|
|
||
|
#define LOGNAME_LEN 255
|
||
|
|
||
|
io_log_name *get_log_name(mstr *v, bool insert)
|
||
|
{
|
||
|
io_log_name *l, *prev, *new;
|
||
|
int4 stat;
|
||
|
short index, v_len;
|
||
|
unsigned char buf[LOGNAME_LEN];
|
||
|
error_def (ERR_INVSTRLEN);
|
||
|
|
||
|
assert (io_root_log_name != 0);
|
||
|
assert(io_root_log_name->len == 0);
|
||
|
v_len = v->len;
|
||
|
if (v_len == 0)
|
||
|
return io_root_log_name;
|
||
|
if (v_len > LOGNAME_LEN)
|
||
|
rts_error(VARLSTCNT(4) ERR_INVSTRLEN, 2, v_len, LOGNAME_LEN);
|
||
|
CONVERT_IDENT(buf, v->addr, v_len);
|
||
|
for (prev = io_root_log_name, l = prev->next; l != 0; prev = l, l = l->next)
|
||
|
{
|
||
|
stat = memvcmp(l->dollar_io, l->len, buf, v_len);
|
||
|
if (stat == 0)
|
||
|
return l;
|
||
|
if (stat > 0)
|
||
|
break;
|
||
|
}
|
||
|
if (insert == INSERT)
|
||
|
{
|
||
|
assert(prev != 0);
|
||
|
new =(io_log_name *) malloc(SIZEOF(*new) + v_len);
|
||
|
memset(new, 0, SIZEOF(*new) - 1);
|
||
|
new->len = v_len;
|
||
|
memcpy(new->dollar_io, buf, v_len);
|
||
|
new->dollar_io[v_len] = 0;
|
||
|
prev->next = new;
|
||
|
new->next = l;
|
||
|
return new;
|
||
|
}
|
||
|
assert(insert == NO_INSERT);
|
||
|
return 0;
|
||
|
}
|