Delete the unnecessary ERR and ERRC lines in makefiles, add some functionality
to error code script: it can now find untranslatable function codes (usually because the function is static and not defined in a header: occasionally because of a typo...) and unreferenced function and reason codes. To see this try: perl util/mkerr.pl -recurse -debug Also fixed some typos in crypto/pkcs12 that this found :-) Also tidy up some error calls that had to be all on one line: the old error script couldn't find codes unless the call was all on one line.
This commit is contained in:
parent
ad38bedbac
commit
6e781e8e07
3
CHANGES
3
CHANGES
@ -13,7 +13,8 @@
|
||||
aren't needed for error creation any more) and do a better job of
|
||||
translating function codes into names. The old 'ASN1 error code imbedded
|
||||
in a comment' is no longer necessary and it doesn't use .err files which
|
||||
have now been deleted.
|
||||
have now been deleted. Also the error code call doesn't have to appear all
|
||||
on one line (which resulted in some large lines...).
|
||||
[Steve Henson]
|
||||
|
||||
*) Change #include filenames from <foo.h> to <openssl/foo.h>.
|
||||
|
@ -20,8 +20,6 @@ EX_LIBS=
|
||||
|
||||
CFLAGS= $(INCLUDE) $(CFLAG) -DCFLAGS="\"$(CC) $(CFLAG)\"" -DPLATFORM="\"$(PLATFORM)\""
|
||||
|
||||
ERR=crypto
|
||||
ERRC=cpt_err
|
||||
|
||||
LIBS=
|
||||
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=asn1
|
||||
ERRC=asn1_err
|
||||
GENERAL=Makefile README
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=bio
|
||||
ERRC=bio_err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -19,8 +19,6 @@ BN_ASM= bn_asm.o
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=bn
|
||||
ERRC=bn_err
|
||||
GENERAL=Makefile
|
||||
TEST=bntest.c exptest.c
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=buffer
|
||||
ERRC=buf_err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=comp
|
||||
ERRC=comp_err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=conf
|
||||
ERRC=conf_err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=dh
|
||||
ERRC=dh_err
|
||||
GENERAL=Makefile
|
||||
TEST= dhtest.c
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=dsa
|
||||
ERRC=dsa_err
|
||||
GENERAL=Makefile
|
||||
TEST=dsatest.c
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=evp
|
||||
ERRC=evp_err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=objects
|
||||
ERRC=obj_err
|
||||
GENERAL=Makefile README
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=pem
|
||||
ERRC=pem_err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=pkcs12
|
||||
ERRC=pk12err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -91,7 +91,7 @@ PKCS12_SAFEBAG *PKCS12_MAKE_KEYBAG (PKCS8_PRIV_KEY_INFO *p8)
|
||||
{
|
||||
PKCS12_SAFEBAG *bag;
|
||||
if (!(bag = PKCS12_SAFEBAG_new())) {
|
||||
PKCS12err(PKCS12_F_PKCS12_MAKE_SAFEBAG, ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_MAKE_KEYBAG,ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
bag->type = OBJ_nid2obj(NID_keyBag);
|
||||
@ -128,12 +128,12 @@ PKCS7 *PKCS12_pack_p7data (STACK *sk)
|
||||
{
|
||||
PKCS7 *p7;
|
||||
if (!(p7 = PKCS7_new())) {
|
||||
PKCS12err(PKCS12_F_PKCS12_PACK_P7_DATA, ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
p7->type = OBJ_nid2obj(NID_pkcs7_data);
|
||||
if (!(p7->d.data = ASN1_OCTET_STRING_new())) {
|
||||
PKCS12err(PKCS12_F_PKCS12_PACK_P7_DATA, ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_PACK_P7DATA, ERR_R_MALLOC_FAILURE);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
|
@ -151,7 +151,8 @@ int PKCS12_add_friendlyname_asc (PKCS12_SAFEBAG *bag, const char *name,
|
||||
unsigned char *uniname;
|
||||
int ret, unilen;
|
||||
if (!asc2uni(name, &uniname, &unilen)) {
|
||||
PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_ASC,ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
ret = PKCS12_add_friendlyname_uni (bag, uniname, unilen);
|
||||
@ -169,34 +170,40 @@ int PKCS12_add_friendlyname_uni (PKCS12_SAFEBAG *bag,
|
||||
/* Zap ending double null if included */
|
||||
if(!name[namelen - 1] && !name[namelen - 2]) namelen -= 2;
|
||||
if (!(fname = ASN1_TYPE_new ())) {
|
||||
PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
fname->type = V_ASN1_BMPSTRING;
|
||||
if (!(bmp = ASN1_BMPSTRING_new())) {
|
||||
PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
if (!(bmp->data = Malloc (namelen))) {
|
||||
PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
memcpy (bmp->data, name, namelen);
|
||||
bmp->length = namelen;
|
||||
fname->value.bmpstring = bmp;
|
||||
if (!(attrib = X509_ATTRIBUTE_new ())) {
|
||||
PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI,ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
attrib->object = OBJ_nid2obj(NID_friendlyName);
|
||||
if (!(attrib->value.set = sk_new(NULL))) {
|
||||
PKCS12err(PKCS12_F_ADD_FRIENDLYNAME,ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
sk_push (attrib->value.set, (char *)fname);
|
||||
attrib->set = 1;
|
||||
if (!bag->attrib && !(bag->attrib = sk_new (NULL))) {
|
||||
PKCS12err(PKCS12_F_ADD_FRIENDLYNAME_UNI, ERR_R_MALLOC_FAILURE);
|
||||
PKCS12err(PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,
|
||||
ERR_R_MALLOC_FAILURE);
|
||||
return 0;
|
||||
}
|
||||
sk_push (bag->attrib, (char *)attrib);
|
||||
|
@ -123,15 +123,15 @@ int PKCS12_set_mac (PKCS12 *p12, const char *pass, int passlen,
|
||||
if (!md_type) md_type = EVP_sha1();
|
||||
if (PKCS12_setup_mac (p12, iter, salt, saltlen, md_type) ==
|
||||
PKCS12_ERROR) {
|
||||
PKCS12err(PKCS12_F_PKCS12_SET_MAC, PKCS12_R_MAC_SETUP_ERROR);
|
||||
PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_SETUP_ERROR);
|
||||
return 0;
|
||||
}
|
||||
if (!PKCS12_gen_mac (p12, pass, passlen, mac, &maclen)) {
|
||||
PKCS12err(PKCS12_F_PKCS12_SET_MAC, PKCS12_R_MAC_GENERATION_ERROR);
|
||||
PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_GENERATION_ERROR);
|
||||
return 0;
|
||||
}
|
||||
if (!(ASN1_OCTET_STRING_set (p12->mac->dinfo->digest, mac, maclen))) {
|
||||
PKCS12err(PKCS12_F_PKCS12_PKCS12_SET_MAC,PKCS12_R_MAC_STRING_SET_ERROR);
|
||||
PKCS12err(PKCS12_F_PKCS12_SET_MAC,PKCS12_R_MAC_STRING_SET_ERROR);
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
|
@ -65,13 +65,14 @@
|
||||
#ifndef NO_ERR
|
||||
static ERR_STRING_DATA PKCS12_str_functs[]=
|
||||
{
|
||||
{ERR_PACK(0,PKCS12_F_ADD_FRIENDLYNAME,0), "ADD_FRIENDLYNAME"},
|
||||
{ERR_PACK(0,PKCS12_F_ADD_FRIENDLYNAME_ASC,0), "ADD_FRIENDLYNAME_ASC"},
|
||||
{ERR_PACK(0,PKCS12_F_ADD_FRIENDLYNAME_UNI,0), "ADD_FRIENDLYNAME_UNI"},
|
||||
{ERR_PACK(0,PKCS12_F_PARSE_BAGS,0), "PARSE_BAGS"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_ADD_FRIENDLYNAME,0), "PKCS12_ADD_FRIENDLYNAME"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC,0), "PKCS12_add_friendlyname_asc"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI,0), "PKCS12_add_friendlyname_uni"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_ADD_LOCALKEYID,0), "PKCS12_add_localkeyid"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_CREATE,0), "PKCS12_create"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_DECRYPT_D2I,0), "PKCS12_decrypt_d2i"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_FRIENDLYNAME_ASC,0), "PKCS12_FRIENDLYNAME_ASC"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_GEN_MAC,0), "PKCS12_gen_mac"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_I2D_ENCRYPT,0), "PKCS12_i2d_encrypt"},
|
||||
{ERR_PACK(0,PKCS12_F_PKCS12_INIT,0), "PKCS12_init"},
|
||||
@ -122,17 +123,46 @@ static ERR_STRING_DATA PKCS12_str_reasons[]=
|
||||
|
||||
#endif
|
||||
|
||||
void ERR_load_PKCS12_strings(void)
|
||||
#ifdef PKCS12_LIB_NAME
|
||||
static ERR_STRING_DATA PKCS12_lib_name[]=
|
||||
{
|
||||
{0 ,PKCS12_LIB_NAME},
|
||||
{0,NULL}
|
||||
};
|
||||
#endif
|
||||
|
||||
|
||||
int PKCS12_lib_error_code=0;
|
||||
|
||||
void ERR_load_PKCS12_strings()
|
||||
{
|
||||
static int init=1;
|
||||
|
||||
if (PKCS12_lib_error_code == 0)
|
||||
PKCS12_lib_error_code=ERR_get_next_error_library();
|
||||
|
||||
if (init)
|
||||
{
|
||||
init=0;
|
||||
#ifndef NO_ERR
|
||||
ERR_load_strings(ERR_LIB_PKCS12,PKCS12_str_functs);
|
||||
ERR_load_strings(ERR_LIB_PKCS12,PKCS12_str_reasons);
|
||||
ERR_load_strings(PKCS12_lib_error_code,PKCS12_str_functs);
|
||||
ERR_load_strings(PKCS12_lib_error_code,PKCS12_str_reasons);
|
||||
#endif
|
||||
|
||||
#ifdef PKCS12_LIB_NAME
|
||||
PKCS12_lib_name->error = ERR_PACK(PKCS12_lib_error_code,0,0);
|
||||
ERR_load_strings(0,PKCS12_lib_name);
|
||||
#endif;
|
||||
}
|
||||
}
|
||||
|
||||
void ERR_PKCS12_error(function,reason,file,line)
|
||||
int function;
|
||||
int reason;
|
||||
char *file;
|
||||
int line;
|
||||
{
|
||||
if (PKCS12_lib_error_code == 0)
|
||||
PKCS12_lib_error_code=ERR_get_next_error_library();
|
||||
ERR_PUT_error(PKCS12_lib_error_code,function,reason,file,line);
|
||||
}
|
||||
|
@ -321,10 +321,10 @@ PKCS12 *d2i_PKCS12_fp();
|
||||
/* Error codes for the PKCS12 functions. */
|
||||
|
||||
/* Function codes. */
|
||||
#define PKCS12_F_ADD_FRIENDLYNAME 100
|
||||
#define PKCS12_F_ADD_FRIENDLYNAME_ASC 101
|
||||
#define PKCS12_F_ADD_FRIENDLYNAME_UNI 102
|
||||
#define PKCS12_F_PARSE_BAGS 103
|
||||
#define PKCS12_F_PKCS12_ADD_FRIENDLYNAME 100
|
||||
#define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_ASC 127
|
||||
#define PKCS12_F_PKCS12_ADD_FRIENDLYNAME_UNI 102
|
||||
#define PKCS12_F_PKCS12_ADD_LOCALKEYID 104
|
||||
#define PKCS12_F_PKCS12_CREATE 105
|
||||
#define PKCS12_F_PKCS12_DECRYPT_D2I 106
|
||||
@ -333,16 +333,14 @@ PKCS12 *d2i_PKCS12_fp();
|
||||
#define PKCS12_F_PKCS12_INIT 109
|
||||
#define PKCS12_F_PKCS12_KEY_GEN_ASC 110
|
||||
#define PKCS12_F_PKCS12_KEY_GEN_UNI 111
|
||||
#define PKCS12_F_PKCS12_MAKE_SAFEBAG 112
|
||||
#define PKCS12_F_PKCS12_MAKE_KEYBAG 112
|
||||
#define PKCS12_F_PKCS12_MAKE_SHKEYBAG 113
|
||||
#define PKCS12_F_PKCS12_PACK_P7DATA 114
|
||||
#define PKCS12_F_PKCS12_PACK_P7ENCDATA 115
|
||||
#define PKCS12_F_PKCS12_PACK_P7_DATA 116
|
||||
#define PKCS12_F_PKCS12_PACK_SAFEBAG 117
|
||||
#define PKCS12_F_PKCS12_PARSE 118
|
||||
#define PKCS12_F_PKCS12_PBE_CRYPT 119
|
||||
#define PKCS12_F_PKCS12_PBE_KEYIVGEN 120
|
||||
#define PKCS12_F_PKCS12_PKCS12_SET_MAC 121
|
||||
#define PKCS12_F_PKCS12_SETUP_MAC 122
|
||||
#define PKCS12_F_PKCS12_SET_MAC 123
|
||||
#define PKCS12_F_PKCS8_ADD_KEYUSAGE 124
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=pkcs7
|
||||
ERRC=pkcs7err
|
||||
GENERAL=Makefile README
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=rsa
|
||||
ERRC=rsa_err
|
||||
GENERAL=Makefile
|
||||
TEST=rsa_oaep_test.c
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=x509
|
||||
ERRC=x509_err
|
||||
GENERAL=Makefile README
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=x509v3
|
||||
ERRC=v3err
|
||||
GENERAL=Makefile README
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=rsaref
|
||||
ERRC=rsar_err
|
||||
GENERAL=Makefile
|
||||
TEST=
|
||||
APPS=
|
||||
|
@ -15,8 +15,6 @@ AR= ar r
|
||||
|
||||
CFLAGS= $(INCLUDES) $(CFLAG)
|
||||
|
||||
ERR=ssl
|
||||
ERRC=ssl_err
|
||||
GENERAL=Makefile README
|
||||
TEST=ssltest.c
|
||||
APPS=
|
||||
|
@ -167,6 +167,8 @@ while (($lib, $hdr) = each %hinc)
|
||||
# oddly named structure BIO_F_CTX which needs to be ignored.
|
||||
# If a code doesn't exist in list compiled from headers then mark it
|
||||
# with the value "X" as a place holder to give it a value later.
|
||||
# Store all function and reason codes found in %ufcodes and %urcodes
|
||||
# so all those unreferenced can be printed out.
|
||||
|
||||
|
||||
foreach $file (@source) {
|
||||
@ -174,16 +176,19 @@ foreach $file (@source) {
|
||||
next if exists $cskip{$file};
|
||||
open(IN, "<$file") || die "Can't open source file $file\n";
|
||||
while(<IN>) {
|
||||
if(/(([A-Z0-9]+)_F_[A-Z0-9_]+)/) {
|
||||
if(/(([A-Z0-9]+)_F_([A-Z0-9_]+))/) {
|
||||
next unless exists $csrc{$2};
|
||||
next if($1 eq "BIO_F_BUFFER_CTX");
|
||||
$ufcodes{$1} = 1;
|
||||
if(!exists $fcodes{$1}) {
|
||||
$fcodes{$1} = "X";
|
||||
$fnew{$2}++;
|
||||
}
|
||||
$notrans{$1} = 1 unless exists $ftrans{$3};
|
||||
}
|
||||
if(/(([A-Z0-9]+)_R_[A-Z0-9_]+)/) {
|
||||
next unless exists $csrc{$2};
|
||||
$urcodes{$1} = 1;
|
||||
if(!exists $rcodes{$1}) {
|
||||
$rcodes{$1} = "X";
|
||||
$rnew{$2}++;
|
||||
@ -353,8 +358,6 @@ EOF
|
||||
$fn = $1;
|
||||
if(exists $ftrans{$fn}) {
|
||||
$fn = $ftrans{$fn};
|
||||
} else {
|
||||
push @notrans, $i;
|
||||
}
|
||||
print OUT "{ERR_PACK(0,$i,0),\t\"$fn\"},\n";
|
||||
}
|
||||
@ -452,9 +455,35 @@ EOF
|
||||
|
||||
}
|
||||
|
||||
if($debug && defined(@notrans)) {
|
||||
if($debug && defined(%notrans)) {
|
||||
print STDERR "The following function codes were not translated:\n";
|
||||
foreach(@notrans)
|
||||
foreach(sort keys %notrans)
|
||||
{
|
||||
print STDERR "$_\n";
|
||||
}
|
||||
}
|
||||
|
||||
# Make a list of unreferenced function and reason codes
|
||||
|
||||
foreach (keys %fcodes) {
|
||||
push (@funref, $_) unless exists $ufcodes{$_};
|
||||
}
|
||||
|
||||
foreach (keys %rcodes) {
|
||||
push (@runref, $_) unless exists $urcodes{$_};
|
||||
}
|
||||
|
||||
if($debug && defined(@funref) ) {
|
||||
print STDERR "The following function codes were not referenced:\n";
|
||||
foreach(sort @funref)
|
||||
{
|
||||
print STDERR "$_\n";
|
||||
}
|
||||
}
|
||||
|
||||
if($debug && defined(@runref) ) {
|
||||
print STDERR "The following reason codes were not referenced:\n";
|
||||
foreach(sort @runref)
|
||||
{
|
||||
print STDERR "$_\n";
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user