summaryrefslogtreecommitdiff
path: root/soltools
diff options
context:
space:
mode:
Diffstat (limited to 'soltools')
-rw-r--r--soltools/Executable_adjustvisibility.mk22
-rw-r--r--soltools/Executable_javadep.mk22
-rw-r--r--soltools/Executable_ldump4.mk17
-rw-r--r--soltools/Module_soltools.mk9
-rw-r--r--soltools/adjustvisibility/adjustvisibility.cxx305
-rw-r--r--soltools/javadep/javadep.c906
-rw-r--r--soltools/ldump/hashtbl.cxx438
-rw-r--r--soltools/ldump/hashtbl.hxx104
-rw-r--r--soltools/ldump/ldump.cxx745
-rw-r--r--soltools/ldump/ldump.hxx71
10 files changed, 0 insertions, 2639 deletions
diff --git a/soltools/Executable_adjustvisibility.mk b/soltools/Executable_adjustvisibility.mk
deleted file mode 100644
index 5880a723140d..000000000000
--- a/soltools/Executable_adjustvisibility.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_Executable_Executable,adjustvisibility))
-
-ifeq ($(COM),MSC)
-$(eval $(call gb_Executable_use_packages,adjustvisibility,\
- soltools_inc \
-))
-endif
-
-$(eval $(call gb_Executable_add_exception_objects,adjustvisibility,\
- soltools/adjustvisibility/adjustvisibility \
-))
-
-# vim:set noet sw=4 ts=4:
diff --git a/soltools/Executable_javadep.mk b/soltools/Executable_javadep.mk
deleted file mode 100644
index 77dd829eeff9..000000000000
--- a/soltools/Executable_javadep.mk
+++ /dev/null
@@ -1,22 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_Executable_Executable,javadep))
-
-ifeq ($(COM),MSC)
-$(eval $(call gb_Executable_use_packages,javadep,\
- soltools_inc \
-))
-endif
-
-$(eval $(call gb_Executable_add_cobjects,javadep,\
- soltools/javadep/javadep \
-))
-
-# vim:set noet sw=4 ts=4:
diff --git a/soltools/Executable_ldump4.mk b/soltools/Executable_ldump4.mk
deleted file mode 100644
index 6a3dda52e251..000000000000
--- a/soltools/Executable_ldump4.mk
+++ /dev/null
@@ -1,17 +0,0 @@
-# -*- Mode: makefile-gmake; tab-width: 4; indent-tabs-mode: t -*-
-#
-# This file is part of the LibreOffice project.
-#
-# This Source Code Form is subject to the terms of the Mozilla Public
-# License, v. 2.0. If a copy of the MPL was not distributed with this
-# file, You can obtain one at http://mozilla.org/MPL/2.0/.
-#
-
-$(eval $(call gb_Executable_Executable,ldump4))
-
-$(eval $(call gb_Executable_add_exception_objects,ldump4,\
- soltools/ldump/hashtbl \
- soltools/ldump/ldump \
-))
-
-# vim:set noet sw=4 ts=4:
diff --git a/soltools/Module_soltools.mk b/soltools/Module_soltools.mk
index 56fec5673d4e..9f304155b2da 100644
--- a/soltools/Module_soltools.mk
+++ b/soltools/Module_soltools.mk
@@ -12,21 +12,12 @@ $(eval $(call gb_Module_Module,soltools))
ifneq ($(CROSS_COMPILING),YES)
$(eval $(call gb_Module_add_targets,soltools,\
Executable_cpp \
- Executable_javadep \
Executable_makedepend \
))
-
-ifeq ($(OS)$(COM),SOLARISC52)
-$(eval $(call gb_Module_add_targets,soltools,\
- Executable_adjustvisibility \
-))
-endif # SOLARISC52
-
endif # CROSS_COMPILING
ifeq ($(OS)$(COM),WNTMSC)
$(eval $(call gb_Module_add_targets,soltools,\
- Executable_ldump4 \
Package_inc \
))
endif # WNTMSC
diff --git a/soltools/adjustvisibility/adjustvisibility.cxx b/soltools/adjustvisibility/adjustvisibility.cxx
deleted file mode 100644
index 82bd9f7e2063..000000000000
--- a/soltools/adjustvisibility/adjustvisibility.cxx
+++ /dev/null
@@ -1,305 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-/*
- * adjustvisibilty -- a tool to adjust the visibility of the so called
- * 'fix and continue' globalized symbols generated by
- * the Sun Studio 8 compiler from 'DEFAULT' to 'HIDDEN'
- *
- * References: "Linker and Libraries Guide", Solaris 9 documentation
- * "Stabs Interface", SunStudio 8 documentation
- */
-
-#include <string>
-#include <cstring>
-#include <iostream>
-#include <exception>
-#include <stdexcept>
-#include <cerrno>
-#include <fcntl.h>
-#include <unistd.h>
-#include <libelf.h>
-#include <gelf.h>
-#include <utime.h>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <limits>
-#include <stdio.h>
-
-// Note: There is no GELF_ST_VISIBILITY macro in gelf.h, we roll our own.
-#define GELF_ST_VISIBILITY(o) ((o)&0x3) // See "Linker and Libraries Guide".
-
-// See "Linker and Libraries Guide", ELF object format description.
-static const char* SymbolType[STT_NUM] = {
- "NOTYPE",
- "OBJECT",
- "FUNC ",
- "SECT ",
- "FILE ",
- "COMM ",
- "TLS "
-};
-
-static const char* SymbolBinding[STB_NUM] = {
- "LOCAL ",
- "GLOBAL",
- "WEAK "
-};
-
-static const char* SymbolVisibility[4] = { // Note: There is no STV_NUM macro
- "DEFAULT ",
- "INTERNAL ",
- "HIDDEN ",
- "PROTECTED"
-};
-
-class ElfError : public std::exception
-{
- public:
- ElfError(const std::string& rFile, const std::string& rMessage);
- ~ElfError() throw() {};
- virtual const char* what() const throw() { return m_sMessage.c_str(); }
-
- private:
- std::string m_sMessage;
-};
-
-ElfError::ElfError(const std::string& rFile, const std::string& rMessage)
-{
- if ( rFile != "" ) {
- m_sMessage = rFile;
- m_sMessage += ": ";
- }
- m_sMessage += rMessage;
- const char *pElfMsg = elf_errmsg(0);
- if ( pElfMsg ) {
- m_sMessage += ": ";
- m_sMessage += pElfMsg;
- }
-}
-
-void initElfLib()
-{
- if ( elf_version(EV_CURRENT) == EV_NONE) {
- throw ElfError("", "elf_version() failed");
- }
- return;
-}
-
-bool isFixAndContinueSymbol(const std::string& rSymbol)
-{
- // The globalized 'fix and continue' symbols have the following
- // form, see "Stabs interface", page 164:
- // {.$}X{ABC}uniquepattern[.function_name][EQUIVn][.variable_name]
- char c0 = rSymbol[0];
- char c1 = rSymbol[1];
- char c2 = rSymbol[2];
- if ( c0 == '.' || c0 == '$' ) {
- if ( c1 == 'X' ) {
- if ( c2 == 'A' || c2 == 'B' || c2 == 'C' || c2 == 'D' ) {
- return true;
- }
- }
- }
- return false;
-}
-
-void adjustVisibility( const std::string& rFile, int fd, bool bVerbose)
-{
- if ( bVerbose ) {
- std::cout << "File: " << rFile << ": adjusting 'fix and continue' symbol visibility\n";
- }
-
- try {
- Elf* pElf;
- if ((pElf = elf_begin(fd, ELF_C_RDWR, 0)) == NULL) {
- throw ElfError(rFile, "elf_begin() failed");
- }
- // Check if file is ELF file.
- if ( elf_kind(pElf) != ELF_K_ELF ) {
- throw ElfError(rFile, "elf_kind() failed, file is not an ELF object file");
- }
-
- // Iterate over sections.
- Elf_Scn* pScn = 0;
- while ( (pScn = elf_nextscn(pElf, pScn)) != 0 ) {
- GElf_Shdr aShdr;
- if ( gelf_getshdr(pScn, &aShdr) == 0 ) {
- throw ElfError(rFile, "gelf_getshdr() failed");
- }
- if ( aShdr.sh_type != SHT_SYMTAB ) {
- continue;
- }
- // Section is a symbol section. Get the assiociated data.
- Elf_Data* pSymbolData;
- if ( (pSymbolData = elf_getdata(pScn, 0)) == NULL ) {
- throw ElfError(rFile, "elf_getdata() failed");
- }
- // Iterate over symbol table.
- GElf_Xword nSymbols = aShdr.sh_size / aShdr.sh_entsize;
- if ( nSymbols > std::numeric_limits< int >::max() )
- {
- throw ElfError(rFile, "too many symbols");
- }
- for ( int nIndex = 0; nIndex < nSymbols; ++nIndex) {
- // Get symbol.
- GElf_Sym aSymbol;
- if ( gelf_getsym(pSymbolData, nIndex, &aSymbol) == NULL )
- {
- throw ElfError(rFile, "gelf_getsym() failed");
- }
- std::string sSymbolName(elf_strptr(pElf, aShdr.sh_link, aSymbol.st_name));
- if ( isFixAndContinueSymbol(sSymbolName) ) {
- // Get the symbol visibility.
- unsigned int nSymbolVisibility = GELF_ST_VISIBILITY(aSymbol.st_other);
- if ( bVerbose ) {
- // Get the symbol type and binding.
- unsigned int nSymbolType = GELF_ST_TYPE(aSymbol.st_info);
- unsigned int nSymbolBind = GELF_ST_BIND(aSymbol.st_info);
- std::cout << "Symbol: " << sSymbolName << ", "
- << "Type: ";
- if ( SymbolType[nSymbolType] ) {
- std::cout << SymbolType[nSymbolType];
- } else {
- std::cout << nSymbolType;
- }
- std::cout << ", Binding: ";
- if ( SymbolBinding[nSymbolBind] ) {
- std::cout << SymbolBinding[nSymbolBind];
- } else {
- std::cout << nSymbolBind;
- }
- std::cout << ", Visibility: ";
- if ( SymbolVisibility[nSymbolVisibility] ) {
- std::cout << SymbolVisibility[nSymbolVisibility];
- } else {
- std::cout << nSymbolVisibility;
- }
- std::cout << "-> " << SymbolVisibility[STV_HIDDEN] << "\n";
- }
- // Toggle visibility to "hidden".
- aSymbol.st_other = GELF_ST_VISIBILITY(STV_HIDDEN);
- // Write back symbol data to underlying structure.
- if ( gelf_update_sym(pSymbolData, nIndex, &aSymbol) == NULL )
- {
- throw ElfError(rFile, "gelf_update_sym() failed");
- }
- }
- }
- }
- // Write changed object file to disk.
- if ( elf_update(pElf, ELF_C_WRITE) == -1 ) {
- throw ElfError(rFile, "elf_update() failed");
- }
- elf_end(pElf);
-
- } catch (const ElfError& e) {
- close(fd);
- throw;
- }
- return;
-}
-
-void processObject(const std::string& rFile, bool bPreserve, bool bVerbose)
-{
- int fd;
- struct stat aStatBuf;
-
- if ((fd = open(rFile.c_str(), O_RDWR)) == -1) {
- std::string sMessage("adjustVisibilty() failed: can't open file ");
- sMessage += rFile;
- sMessage += ": ";
- sMessage += std::strerror(errno);
- throw std::runtime_error(sMessage);
- }
-
- if ( bPreserve ) {
- if ( fstat(fd, &aStatBuf) == -1) {
- close(fd);
- std::string sMessage("adjustVisibilty() failed: can't stat file ");
- sMessage += rFile;
- sMessage += ": ";
- sMessage += std::strerror(errno);
- throw std::runtime_error(sMessage);
- }
- }
-
- adjustVisibility(rFile, fd, bVerbose);
-
- close(fd);
-
- if ( bPreserve ) {
- struct utimbuf aUtimBuf = {aStatBuf.st_atime, aStatBuf.st_mtime};
- if ( utime(rFile.c_str(), &aUtimBuf) == -1 ) {
- std::string sMessage("adjustVisibilty() failed: can't reset timestamp ");
- sMessage += rFile;
- sMessage += ": ";
- sMessage += std::strerror(errno);
- throw std::runtime_error(sMessage);
- }
- }
- return;
-}
-
-int main(int argc, char* argv[])
-{
- int c;
- bool bPreserve = false;
- bool bVerbose = false;
-
- while ( (c = getopt(argc, argv, "pv")) != -1 ) {
- switch(c) {
- case 'p':
- bPreserve = true;
- break;
- case 'v':
- bVerbose = true;
- break;
- case '?':
- std::cerr << "Unrecognized option: -" << optopt << "\n";
- break;
- default:
- break;
- }
- }
-
- if ( optind == argc ) {
- std::cout << "usage: " << argv[0] << " [-pv] <elf-object> ...\n";
- std::cout << " -p preserve time stamps\n";
- std::cout << " -v verbose\n";
- return 1;
- }
-
- try {
- initElfLib();
-
- for ( ; optind < argc; optind++ ) {
- processObject(std::string(argv[optind]), bPreserve, bVerbose);
- }
-
- } catch (const std::exception& e) {
- std::cerr << argv[0] << ": " << e.what() << "\n";
- return 1;
- }
-
- return 0;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/soltools/javadep/javadep.c b/soltools/javadep/javadep.c
deleted file mode 100644
index beaf393b509f..000000000000
--- a/soltools/javadep/javadep.c
+++ /dev/null
@@ -1,906 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-/* All Java Virtual Machine Specs are from
- * "The Java Virtual Machine Specification", T. Lindholm, F. Yellin
- * (JVMS)
- */
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <limits.h>
-
-#if defined(UNX)
-#include <unistd.h>
-#include <netinet/in.h> /* ntohl(), ntohs() */
-#elif defined(WNT)
-#include <io.h>
-#define access _access
-#define vsnprintf _vsnprintf
-#define CDECL _cdecl
-#define F_OK 00
-#define PATH_MAX _MAX_PATH
-#define ntohl(x) ((((x) & 0xff000000) >> 24) | (((x) & 0x00ff0000) >> 8) | \
- (((x) & 0x0000ff00) << 8) | (((x) & 0x000000ff) << 24))
-
-#define ntohs(x) ((((x) >> 8) & 0xff) | (((x) & 0xff) << 8))
-#endif
-
-/* max. length of line in response file */
-#define RES_FILE_BUF 65536
-
-struct file {
- char *pname;
- FILE *pfs;
-};
-
-struct growable {
- int ncur;
- int nmax;
- char **parray;
-};
-
-typedef struct file file_t;
-typedef unsigned char uint8;
-typedef unsigned short uint16;
-typedef unsigned int uint32;
-
-struct utf8 {
- uint16 nlen;
- void *pdata;
-};
-
-typedef struct utf8 utf8_t;
-
-/* The contents of the Constant_pool is described in JVMS p. 93
- */
-enum {
- CONSTANT_Class = 7,
- CONSTANT_Fieldref = 9,
- CONSTANT_Methodref = 10,
- CONSTANT_InterfaceMethodref = 11,
- CONSTANT_String = 8,
- CONSTANT_Integer = 3,
- CONSTANT_Float = 4,
- CONSTANT_Long = 5,
- CONSTANT_Double = 6,
- CONSTANT_NameAndType = 12,
- CONSTANT_Utf8 = 1
-};
-
-enum { NGROW_INIT = 10, NGROW = 2 };
-
-static char *pprogname = "javadep";
-static char csep = ';';
-#if defined (UNX)
-#define CDECL
-static char cpathsep = '/';
-#elif defined (WNT)
-static char cpathsep = '\\';
-#endif
-static FILE *pfsout = NULL;
-static char *pout_file = NULL;
-
-
-/* prototypes */
-uint8 read_uint8(const file_t *pfile);
-uint16 read_uint16(const file_t *pfile);
-uint32 read_uint32(const file_t *pfile);
-void skip_bytes(const file_t *pfile, const long nnum);
-char *escape_slash(const char *pstr);
-int is_inner(const char *pstr);
-void print_dependencies(const struct growable *pdep,
- const char* pclass_file);
-void process_class_file(const char *pfilenamem,
- const struct growable *pfilt);
-char *utf8tolatin1(const utf8_t a_utf8);
-void *xmalloc(size_t size);
-void *xcalloc(size_t nmemb, size_t size);
-void *xrealloc(void *ptr, size_t size);
-void grow_if_needed (struct growable *pgrow);
-int append_to_growable(struct growable *, char *);
-struct growable *allocate_growable(void);
-void free_growable(struct growable *pgrowvoid);
-void create_filters(struct growable *pfilt, const struct growable *pinc);
-void usage(void);
-void err_quit(const char *, ...);
-void silent_quit(void);
-
-#ifdef WNT
-/* poor man's getopt() */
-int simple_getopt(char *pargv[], const char *poptstring);
-char *optarg = NULL;
-int optind = 1;
-int optopt = 0;
-int opterr = 0;
-#endif
-
-uint8
-read_uint8(const file_t *pfile)
-{
- /* read a byte from classfile */
- size_t nread;
- uint8 ndata;
- nread = fread(&ndata, sizeof(uint8), 1, pfile->pfs);
- if ( !nread ) {
- fclose(pfile->pfs);
- err_quit("%s: truncated class file", pfile->pname);
- }
- return ndata;
-}
-
-uint16
-read_uint16(const file_t *pfile)
-{
- /* read a short from classfile and convert it to host format */
- size_t nread;
- uint16 ndata;
- nread = fread(&ndata, sizeof(uint16), 1, pfile->pfs);
- if ( !nread ) {
- fclose(pfile->pfs);
- err_quit("%s: truncated class file", pfile->pname);
- }
- ndata = ntohs(ndata);
- return ndata;
-}
-
-uint32
-read_uint32(const file_t *pfile)
-{
- /* read an int from classfile and convert it to host format */
- size_t nread;
- uint32 ndata;
- nread = fread(&ndata, sizeof(uint32), 1, pfile->pfs);
- if ( !nread ) {
- fclose(pfile->pfs);
- err_quit("%s: truncated class file", pfile->pname);
- }
- ndata = ntohl(ndata);
- return ndata;
-}
-
-utf8_t
-read_utf8(const file_t *pfile)
-{
- /* Read a java utf-8-string with uint16 length prependend
- * from class file. Returns utf8 struct
- * with fresh allocated datablock,
- * caller is responsible for freeing.
- * Data is still in network byteorder
- */
-
- utf8_t a_utf8;
- size_t nread;
-
- a_utf8.pdata = NULL;
-
- a_utf8.nlen = read_uint16(pfile);
- if (a_utf8.nlen > 0) {
- a_utf8.pdata = xmalloc(a_utf8.nlen*sizeof(char));
- nread = fread(a_utf8.pdata, a_utf8.nlen*sizeof(char), 1, pfile->pfs);
- if ( !nread ) {
- fclose(pfile->pfs);
- err_quit("%s: truncated class file", pfile->pname);
- }
- }
-
- return a_utf8;
-}
-
-char *utf8tolatin1(const utf8_t a_utf8)
-{
- /* function returns fresh allocated zero terminated string,
- * caller is responsible for freeing
- */
-
- /* JVMS p. 101: the null byte is encoded using a two byte format,
- * Java Virtual Machine Utf8 strings differ in this respect from
- * standard UTF-8 strings
- */
-
- /* Multibyte data is in network byte order */
-
- char *p;
- char *pp;
- char *pstr;
-
- pstr = pp = xmalloc((a_utf8.nlen+1) * sizeof(char));
-
- for ( p = (char*)a_utf8.pdata;
- p < (char*)a_utf8.pdata+a_utf8.nlen;
- p++ ) {
- if ( *p & 0x80 ) {
- err_quit("sorry, real UTF8 decoding not yet implemented\n");
- } else {
- *pp++ = *p;
- }
- }
- *pp = '\0';
-
- return pstr;
-}
-
-
-void
-skip_bytes(const file_t *pfile, const long nnumber)
-{
- /* skip a nnumber of bytes in classfile */
- if ( fseek(pfile->pfs, nnumber, SEEK_CUR) == -1 )
- err_quit("%s: %s", pfile->pname, strerror(errno));
-}
-
-void
-add_to_dependencies(struct growable *pdep,
- const struct growable *pfilt,
- char *pdepstr,
- const char *pclass_file)
-{
- /* create dependencies */
- int i;
- size_t nlen_filt, nlen_str, nlen_pdepstr;
- char *pstr, *ptrunc;
- char path[PATH_MAX+1];
- char cnp_class_file[PATH_MAX+1];
- char cnp_str[PATH_MAX+1];
-
- nlen_pdepstr = strlen(pdepstr);
- pstr = xmalloc((nlen_pdepstr+6+1)*sizeof(char));
- memcpy(pstr, pdepstr, nlen_pdepstr+1);
- strncat(pstr, ".class", 6);
-
- if ( pfilt->ncur == 0 ) { /* no filters */
- if ( access(pstr, F_OK) == 0 ) {
- append_to_growable(pdep, strdup(pstr));
- }
- } else {
- nlen_str = strlen(pstr);
- for ( i = 0; i < pfilt->ncur; i++ ) {
- nlen_filt = strlen(pfilt->parray[i]);
- if ( nlen_filt + 1 + nlen_str > PATH_MAX )
- err_quit("path to long");
- memcpy(path, pfilt->parray[i], nlen_filt);
- path[nlen_filt] = '/';
- memcpy( path+nlen_filt+1, pstr, nlen_str+1);
-
- if ( access(path, F_OK) != 0 ) {
- free(pstr);
- pstr = NULL;
- return; /* path doesn't represent a real file, don't bother */
- }
-
- /* get the canonical path */
-#if defined (UNX)
- if ( !(realpath(pclass_file, cnp_class_file)
- && realpath(path, cnp_str) ) ) {
- err_quit("can't get the canonical path");
- }
-#else
- if ( !(_fullpath(cnp_class_file, pclass_file, sizeof(cnp_class_file))
- && _fullpath(cnp_str, path, sizeof(cnp_str)) ) ) {
- err_quit("can't get the canonical path");
- }
-#endif
-
- /* truncate so that only the package prefix remains */
- ptrunc = strrchr(cnp_str, cpathsep);
- *ptrunc = '\0';
- ptrunc = strrchr(cnp_class_file, cpathsep);
- *ptrunc = '\0';
-
- if ( !strcmp(cnp_str, cnp_class_file) ) {
- free(pstr);
- pstr = NULL;
- return; /* identical, don't bother with this one */
- }
-
- append_to_growable(pdep, strdup(path));
- }
- }
- free(pstr);
- return;
-}
-
-char *
-escape_slash(const char *pstr)
-{
- /* returns a fresh allocated string with all cpathsep escaped exchanged
- * with "$/"
- *
- * caller is responsible for freeing
- */
-
- const char *pp = pstr;
- char *p, *pnp;
- char *pnew_str;
- size_t nlen_pnp, nlen_pp;
- int i = 0;
-
- while ( (p=strchr(pp, cpathsep)) != NULL ) {
- ++i;
- pp = ++p;
- }
-
- nlen_pnp = strlen(pstr) + i;
- pnp = pnew_str = xmalloc((nlen_pnp+1) * sizeof(char));
-
- pp = pstr;
-
- if ( i > 0 ) {
- while ( (p=strchr(pp, cpathsep)) != NULL ) {
- memcpy(pnp, pp, p-pp);
- pnp += p-pp;
- *pnp++ = '$';
- *pnp++ = '/';
- pp = ++p;
- }
- }
- nlen_pp = strlen(pp);
- memcpy(pnp, pp, nlen_pp+1);
-
- return pnew_str;
-}
-
-
-void
-print_dependencies(const struct growable *pdep, const char* pclass_file)
-{
- char *pstr;
- int i;
-
- pstr = escape_slash(pclass_file);
- fprintf(pfsout, "%s:", pstr);
- free(pstr);
-
- for( i=0; i<pdep->ncur; ++i) {
- fprintf(pfsout, " \\\n");
- pstr=escape_slash(pdep->parray[i]);
- fprintf(pfsout, "\t%s", pstr);
- free(pstr);
- }
-
- fprintf(pfsout,"\n\n");
- return;
-}
-
-int
-is_inner(const char *pstr)
-{
- /* return true if character '$' is found in classname */
-
- /*
- * note that a '$' in a classname is not an exact indicator
- * for an inner class. Java identifier may legally contain
- * this chararcter, and so may classnames. In the context
- * of javadep this doesn't matter since the makefile system
- * can't cope with classfiles with '$'s in the filename
- * anyway.
- *
- */
-
- if ( strchr(pstr, '$') != NULL )
- return 1;
-
- return 0;
-}
-
-void
-process_class_file(const char *pfilename, const struct growable *pfilt)
-{
- /* read class file and extract object information
- * java class files are in bigendian data format
- * (JVMS, p. 83)
- */
- int i;
- uint32 nmagic;
- uint16 nminor, nmajor;
- uint16 ncnt;
- uint16 nclass_cnt;
- utf8_t* pc_pool;
- uint16* pc_class;
- file_t file;
-
- struct growable *pdepen;
-
- file.pname = (char*)pfilename;
-
- file.pfs = fopen(file.pname,"rb");
- if ( !file.pfs )
- silent_quit();
-
- nmagic = read_uint32(&file);
-
- if ( nmagic != 0xCAFEBABE ) {
- fclose(file.pfs);
- err_quit("%s: invalid magic", file.pname);
- }
-
- nminor = read_uint16(&file);
- nmajor = read_uint16(&file);
-
- /* get number of entries in constant pool */
- ncnt = read_uint16(&file);
-
-#ifdef DEBUG
- printf("Magic: %x\n", nmagic);
- printf("Major %d, Minor %d\n", nmajor, nminor);
- printf("Const_pool_count %d\n", ncnt);
-#else
- (void)nmajor;
- (void)nminor;
-#endif
-
- /* There can be ncount entries in the constant_pool table
- * so at most ncount-1 of them can be of type CONSTANT_Class
- * (at leat one CONSTANT_Utf8 entry must exist).
- * Usually way less CONSTANT_Class entries exists, of course
- */
-
- pc_pool = xcalloc(ncnt,sizeof(utf8_t));
- pc_class = xmalloc((ncnt-1)*sizeof(uint16));
-
- /* pc_pool[0] is reserved to the java virtual machine and does
- * not exist in the class file
- */
-
- nclass_cnt = 0;
-
- for (i = 1; i < ncnt; i++) {
- uint8 ntag;
- uint16 nindex;
- utf8_t a_utf8;
-
- ntag = read_uint8(&file);
-
- /* we are only interested in CONSTANT_Class entries and
- * Utf8 string entries, because they might belong to
- * CONSTANT_Class entries
- */
- switch(ntag) {
- case CONSTANT_Class:
- nindex = read_uint16(&file);
- pc_class[nclass_cnt++] = nindex;
- break;
- case CONSTANT_Fieldref:
- case CONSTANT_Methodref:
- case CONSTANT_InterfaceMethodref:
- skip_bytes(&file, 4L);
- break;
- case CONSTANT_String:
- skip_bytes(&file, 2L);
- break;
- case CONSTANT_Integer:
- case CONSTANT_Float:
- skip_bytes(&file, 4L);
- break;
- case CONSTANT_Long:
- case CONSTANT_Double:
- skip_bytes(&file, 8L);
- /* Long and Doubles take 2(!)
- * entries in constant_pool_table
- */
- i++;
- break;
- case CONSTANT_NameAndType:
- skip_bytes(&file, 4L);
- break;
- case CONSTANT_Utf8:
- a_utf8 = read_utf8(&file);
- pc_pool[i] = a_utf8;
- break;
- default:
- /* Unknown Constant_pool entry, this means we are
- * in trouble
- */
- err_quit("corrupted class file\n");
- break;
-
- }
- }
-
- fclose(file.pfs);
-
- pdepen = allocate_growable();
-
- for (i = 0; i < nclass_cnt; i++) {
- char *pstr, *ptmpstr;
- pstr = ptmpstr = utf8tolatin1(pc_pool[pc_class[i]]);
- /* we are not interested in inner classes */
- if ( is_inner(pstr) ) {
- free(pstr);
- pstr = NULL;
- continue;
- }
- /* strip off evt. array indicators */
- if ( *ptmpstr == '[' ) {
- while ( *ptmpstr == '[' )
- ptmpstr++;
- /* we only interested in obj. arrays, which are marked with 'L' */
- if ( *ptmpstr == 'L' ) {
- char *p = pstr;
- pstr = strdup(++ptmpstr);
- /* remove final ';' from object array name */
- pstr[strlen(pstr)-1] = '\0';
- free(p);
- } else {
- free(pstr);
- pstr = NULL;
- }
- }
-
- if (pstr) {
- add_to_dependencies(pdepen, pfilt, pstr, file.pname);
- free(pstr);
- }
- }
-
- print_dependencies(pdepen, file.pname);
- free_growable(pdepen);
- pdepen = NULL;
-
- for (i = 0; i < ncnt; i++)
- free(pc_pool[i].pdata);
-
- free(pc_class);
- free(pc_pool);
-}
-
-void *
-xmalloc(size_t size)
-{
- void *ptr;
-
- ptr = malloc(size);
-
- if ( !ptr )
- err_quit("out of memory");
-
- return ptr;
-}
-
-
-void *
-xcalloc(size_t nmemb, size_t size)
-{
- void *ptr;
-
- ptr = calloc(nmemb, size);
-
- if ( !ptr )
- err_quit("out of memory");
-
- return ptr;
-}
-
-void *
-xrealloc(void *ptr, size_t size)
-{
- void *newptr = realloc(ptr, size);
-
- if (newptr)
- ptr = newptr;
- else
- err_quit("out of memory");
-
- return ptr;
-}
-
-void
-err_quit(const char* fmt, ...)
-{
- /* No dependency file must be generated for any error condition,
- * just print message and exit.
- */
- va_list args;
- char buffer[PATH_MAX];
-
- va_start(args, fmt);
-
- if ( pprogname )
- fprintf(stderr, "%s: ", pprogname);
- vsnprintf(buffer, sizeof(buffer), fmt, args);
- fputs(buffer, stderr);
- fputc('\n', stderr);
-
- va_end(args);
-
- /* clean up */
- if ( pfsout && pfsout != stdout ) {
- fclose(pfsout);
- unlink(pout_file);
- }
- exit(1);
-}
-
-void
-silent_quit()
-{
- /* In some cases we should just do a silent exit */
-
- /* clean up */
- if ( pfsout && pfsout != stdout ) {
- fclose(pfsout);
- unlink(pout_file);
- }
- exit(0);
-}
-
-int append_to_growable(struct growable *pgrow, char *pstr)
-{
- /* append an element pstr to pgrow,
- * return new number of elements
- */
- grow_if_needed(pgrow);
- pgrow->parray[pgrow->ncur++] = pstr;
- return pgrow->ncur;
-}
-
-void
-grow_if_needed(struct growable *pgrow)
-{
- /* grow growable arrays */
-
- if ( pgrow->ncur >= pgrow->nmax ) {
- pgrow->parray = xrealloc(pgrow->parray,
- (NGROW*pgrow->nmax)*sizeof(char*));
- pgrow->nmax *= NGROW;
- }
- return;
-}
-
-struct growable *allocate_growable(void)
-{
- /* allocate an growable array,
- * initialize with NGROW_INIT elements
- */
-
- struct growable *pgrow;
-
- pgrow = xmalloc(sizeof(struct growable));
- pgrow->parray = xmalloc(NGROW_INIT*sizeof(char *));
- pgrow->nmax = NGROW_INIT;
- pgrow->ncur = 0;
- return pgrow;
-}
-
-void
-free_growable(struct growable *pgrow)
-{
- int i;
- for( i = 0; i < pgrow->ncur; i++ )
- free(pgrow->parray[i]);
- free(pgrow->parray);
- free(pgrow);
-}
-
-void
-create_filters(struct growable *pfilt, const struct growable *pinc)
-{
- char *p, *pp, *pstr;
- int i;
- size_t nlen, nlen_pstr;
- /* break up includes into filter list */
- for ( i = 0; i < pinc->ncur; i++ ) {
- pp = pinc->parray[i];
-
- while ( (p = strchr(pp, csep)) != NULL) {
- nlen = p - pp;
- pstr = xmalloc((nlen+1)*sizeof(char*));
- memcpy(pstr, pp, nlen);
- pstr[nlen] = '\0';
- append_to_growable(pfilt, pstr);
- pp = p + 1;
- }
- nlen_pstr = strlen(pp);
- pstr = xmalloc((nlen_pstr+1)*sizeof(char*));
- memcpy(pstr, pp, nlen_pstr+1);
- append_to_growable(pfilt, pstr);
- }
-
-}
-
-void
-usage()
-{
- fprintf(stderr,
- "usage: %s [-i|-I includepath ... -s|-S seperator "
- "-o|-O outpath -v|-V -h|-H] <file> ....\n",
- pprogname);
-}
-
-#ifdef WNT
-/* my very simple minded implementation of getopt()
- * it's to sad that getopt() is not available everywhere
- * note: this is not a full POSIX conforming getopt()
- */
-int simple_getopt(char *pargv[], const char *poptstring)
-{
- char *parg = pargv[optind];
-
- /* skip all response file arguments */
- if ( parg ) {
- while ( *parg == '@' )
- parg = pargv[++optind];
-
- if ( parg[0] == '-' && parg[1] != '\0' ) {
- char *popt;
- int c = parg[1];
- if ( (popt = strchr(poptstring, c)) == NULL ) {
- optopt = c;
- if ( opterr )
- fprintf(stderr, "Unknown option character `\\x%x'.\n", optopt);
- return '?';
- }
- if ( *(++popt) == ':') {
- if ( parg[2] != '\0' ) {
- optarg = ++parg;
- } else {
- optarg = pargv[++optind];
- }
- } else {
- optarg = NULL;
- }
- ++optind;
- return c;
- }
- }
- return -1;
-}
-#endif
-
-int CDECL
-main(int argc, char *argv[])
-{
- int bv_flag = 0;
- struct growable *presp, *pincs, *pfilters;
- int c, i, nall_argc;
- char **pall_argv;
-
- presp = allocate_growable();
-
- /* FIXME: cleanup the option parsing */
- /* search for response file, read it */
- for ( i = 1; i < argc; i++ ) {
- char *parg = argv[i];
- char buffer[RES_FILE_BUF];
-
- if ( *parg == '@' ) {
- FILE *pfile = fopen(++parg, "r");
- if ( !pfile )
- err_quit("%s: %s", parg, strerror(errno));
- while ( !feof(pfile) ) {
- char *p, *token;
-
- if ( fgets(buffer, RES_FILE_BUF, pfile) ) {;
- p = buffer;
- while ( (token = strtok(p, " \t\n")) != NULL ) {
- p = NULL;
- append_to_growable(presp, strdup(token));
- }
- }
- }
- fclose(pfile);
- }
- }
-
- /* copy all arguments incl. response file in one array
- * for parsing with getopt
- */
- nall_argc = argc + presp->ncur;
- pall_argv = xmalloc((nall_argc+1)*sizeof(char *));
- memcpy(pall_argv, argv, argc*sizeof(char *));
- memcpy(pall_argv+argc, presp->parray, presp->ncur*sizeof(char *));
- *(pall_argv+argc+presp->ncur) = '\0'; /* terminate */
-
- opterr = 0;
- pincs = allocate_growable();
-
-#ifdef WNT
- while( (c = simple_getopt(pall_argv, ":i:I:s:S:o:OhHvV")) != -1 ) {
-#else
- while( (c = getopt(nall_argc, pall_argv, ":i:I:s:S:o:OhHvV")) != -1 ) {
-#endif
- switch(c) {
- case 'i':
- case 'I':
- append_to_growable(pincs, strdup(optarg));
- break;
- case 's':
- case 'S':
- csep = optarg[0];
- break;
- case 'o':
- case 'O':
- pout_file = optarg;
- break;
- case 'h':
- case 'H':
- usage();
- return 0;
- break;
- case 'v':
- case 'V':
- bv_flag = 1;
- break;
- case '?':
- if (isprint (optopt))
- fprintf (stderr,
- "Unknown option `-%c'.\n", optopt);
- else
- fprintf (stderr,
- "Unknown option character `\\x%x'.\n",
- optopt);
- usage();
- return 1;
- break;
- case ':':
- fprintf(stderr, "Missing parameter.\n");
- usage();
- return 1;
- break;
- default:
- usage();
- return 1;
- break;
- }
- }
-
- pfilters = allocate_growable();
- create_filters(pfilters, pincs);
- free_growable(pincs);
- pincs = NULL;
-
- if ( pout_file ) {
- pfsout = fopen(pout_file, "w");
- if ( !pfsout )
- err_quit("%s: %s", pout_file, strerror(errno));
- } else {
- pfsout = stdout;
- }
-
- /* the remaining arguments are either class file
- * names or response files, ignore response file
- * since they have already been included
- */
- for ( i = optind; i < nall_argc; i++ ) {
- char *parg = pall_argv[i];
- if ( *parg != '@' ) {
- process_class_file(parg, pfilters);
- if ( pfsout != stdout ) {
- if ( bv_flag )
- printf("Processed %s ...\n", parg);
- }
- }
- }
-
- free_growable(pfilters);
- pfilters = NULL;
- free(pall_argv);
- pall_argv = NULL;
- free_growable(presp);
- presp = NULL;
-
- fclose(pfsout);
- exit(0);
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/soltools/ldump/hashtbl.cxx b/soltools/ldump/hashtbl.cxx
deleted file mode 100644
index 8cee5204d228..000000000000
--- a/soltools/ldump/hashtbl.cxx
+++ /dev/null
@@ -1,438 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include "hashtbl.hxx"
-#include <string.h>
-
-// -------------------------------------------------------------
-// class HashItem
-//
-class HashItem
-{
- enum ETag { TAG_EMPTY, TAG_USED, TAG_DELETED };
-
- void* m_pObject;
- ETag m_Tag;
- char* m_Key;
-
-public:
- HashItem() { m_Tag = TAG_EMPTY; m_Key = NULL; m_pObject = NULL; }
- ~HashItem() { delete [] m_Key; }
-
- bool IsDeleted() const
- { return m_Tag == TAG_DELETED; }
-
- bool IsEmpty() const
- { return m_Tag == TAG_DELETED || m_Tag == TAG_EMPTY; }
-
- bool IsFree() const
- { return m_Tag == TAG_EMPTY; }
-
- bool IsUsed() const
- { return m_Tag == TAG_USED; }
-
- void Delete()
- { m_Tag = TAG_DELETED; delete [] m_Key; m_Key = new char[ 1 ]; m_Key[ 0 ] = 0; m_pObject = NULL; }
-
- const char *GetKey() const
- { return m_Key; }
-
- void* GetObject() const
- { return m_pObject; }
-
- void SetObject(const char * Key, void *pObject)
- { m_Tag = TAG_USED; delete [] m_Key; m_Key = new char[ strlen( Key ) + 1 ]; strcpy( m_Key, Key ); m_pObject = pObject; }
-};
-
-#define MIN(a,b) (a)<(b)?(a):(b)
-#define MAX(a,b) (a)>(b)?(a):(b)
-
-// -------------------------------------------------------------
-// class HashTable
-//
-
-/*static*/ double HashTable::m_defMaxLoadFactor = 0.5;
-/*static*/ double HashTable::m_defDefGrowFactor = 2.0;
-
-HashTable::HashTable(unsigned long lSize, bool bOwner, double dMaxLoadFactor, double dGrowFactor)
-{
- m_lSize = lSize;
- m_bOwner = bOwner;
- m_lElem = 0;
- m_dMaxLoadFactor = MAX(0.5,MIN(1.0,dMaxLoadFactor)); // 0.5 ... 1.0
- m_dGrowFactor = MAX(2.0,MIN(5.0,dGrowFactor)); // 1.3 ... 5.0
- m_pData = new HashItem [lSize];
-}
-
-HashTable::~HashTable()
-{
- // Wenn die HashTable der Owner der Objecte ist,
- // müssen die Destruktoren separat gerufen werden.
- // Dies geschieht über die virtuelle Methode OnDeleteObject()
- //
- // Problem: Virtuelle Funktionen sind im Destructor nicht virtuell!!
- // Der Code muß deshalb ins Macro
-
- // Speicher für HashItems freigeben
- delete [] m_pData;
-}
-
-void* HashTable::GetObjectAt(unsigned long lPos) const
-// Gibt Objekt zurück, wenn es eines gibt, sonst NULL;
-{
- HashItem *pItem = &m_pData[lPos];
-
- return pItem->IsUsed() ? pItem->GetObject() : NULL;
-}
-
-void HashTable::OnDeleteObject(void*)
-{
-}
-
-unsigned long HashTable::Hash(const char *Key) const
-{
- // Hashfunktion von P.J. Weinberger
- // aus dem "Drachenbuch" von Aho/Sethi/Ullman
- unsigned long i,n;
- unsigned long h = 0;
- unsigned long g = 0;
-
- for (i=0,n=strlen( Key ); i<n; i++)
- {
- h = (h<<4) + (unsigned long)(unsigned short)Key[i];
- g = h & 0xf0000000;
-
- if (g != 0)
- {
- h = h ^ (g >> 24);
- h = h ^ g;
- }
- }
-
- return h % m_lSize;
-}
-
-unsigned long HashTable::DHash(const char* Key, unsigned long lOldHash) const
-{
- unsigned long lHash = lOldHash;
- unsigned long i,n;
-
- for (i=0,n=strlen( Key ); i<n; i++)
- {
- lHash *= 256L;
- lHash += (unsigned long)(unsigned short)Key[i];
- lHash %= m_lSize;
- }
- return lHash;
-}
-
-unsigned long HashTable::Probe(unsigned long lPos) const
-// gibt den Folgewert von lPos zurück
-{
- lPos++; if (lPos==m_lSize) lPos=0;
- return lPos;
-}
-
-bool HashTable::IsFull() const
-{
- return m_lElem>=m_lSize;
-}
-
-bool HashTable::Insert(const char * Key, void* pObject)
-// pre: Key ist nicht im Dictionary enthalten, sonst return FALSE
-// Dictionary ist nicht voll, sonst return FALSE
-// post: pObject ist unter Key im Dictionary; m_nElem wurde erhöht
-{
- SmartGrow();
-
- if (IsFull())
- {
- return false;
- }
-
- if (FindPos(Key) != NULL )
- return false;
-
- unsigned long lPos = Hash(Key);
- HashItem *pItem = &m_pData[lPos];
-
- // first hashing
- //
- if (pItem->IsEmpty())
- {
- pItem->SetObject(Key, pObject);
- m_lElem++;
-
- return true;
- }
-
- // double hashing
- //
- lPos = DHash(Key,lPos);
- pItem = &m_pData[lPos];
-
- if (pItem->IsEmpty())
- {
- pItem->SetObject(Key, pObject);
- m_lElem++;
-
- return true;
- }
-
- // linear probing
- //
- do
- {
- lPos = Probe(lPos);
- pItem = &m_pData[lPos];
- }
- while(!pItem->IsEmpty());
-
- pItem->SetObject(Key, pObject);
- m_lElem++;
- return true;
-}
-
-HashItem* HashTable::FindPos(const char * Key) const
-// sucht den Key; gibt Refrenz auf den Eintrag (gefunden)
-// oder NULL (nicht gefunden) zurück
-//
-// pre: -
-// post: -
-{
- // first hashing
- //
- unsigned long lPos = Hash(Key);
- HashItem *pItem = &m_pData[lPos];
-
- if (pItem->IsUsed()
- && !(strcmp( pItem->GetKey(), Key )))
- {
- return pItem;
- }
-
- // double hashing
- //
- if (pItem->IsDeleted() || pItem->IsUsed())
- {
- lPos = DHash(Key,lPos);
- pItem = &m_pData[lPos];
-
- if (pItem->IsUsed()
- && (!strcmp( pItem->GetKey(), Key)))
- {
- return pItem;
- }
-
- // linear probing
- //
- if (pItem->IsDeleted() || pItem->IsUsed())
- {
- unsigned long n = 0;
- bool bFound = false;
- bool bEnd = false;
-
- do
- {
- n++;
- lPos = Probe(lPos);
- pItem = &m_pData[lPos];
-
- bFound = pItem->IsUsed()
- && !( strcmp( pItem->GetKey(), Key ));
-
- bEnd = !(n<m_lSize || pItem->IsFree());
- }
- while(!bFound && !bEnd);
-
- return bFound ? pItem : NULL;
- }
- }
-
- // nicht gefunden
- //
- return NULL;
-}
-
-void* HashTable::Find(const char *Key) const
-// Gibt Verweis des Objektes zurück, das unter Key abgespeichert ist,
-// oder NULL wenn nicht vorhanden.
-//
-// pre: -
-// post: -
-{
- HashItem *pItem = FindPos(Key);
-
- if (pItem != NULL
- && ( !strcmp( pItem->GetKey(), Key )))
- return pItem->GetObject();
- else
- return NULL;
-}
-
-void* HashTable::Delete( const char * Key)
-// Löscht Objekt, das unter Key abgespeichert ist und gibt Verweis
-// darauf zurück.
-// Gibt NULL zurück, wenn Key nicht vorhanden ist.
-//
-// pre: -
-// post: Objekt ist nicht mehr enthalten; m_lElem dekrementiert
-// Wenn die HashTable der Owner ist, wurde das Object gelöscht
-{
- HashItem *pItem = FindPos(Key);
-
- if (pItem != NULL
- && ( !strcmp( pItem->GetKey(), Key )))
- {
- void* pObject = pItem->GetObject();
-
- if (m_bOwner)
- OnDeleteObject(pObject);
-
- pItem->Delete();
- m_lElem--;
- return pObject;
- }
- else
- {
- return NULL;
- }
-}
-
-double HashTable::CalcLoadFactor() const
-// prozentuale Belegung der Hashtabelle berechnen
-{
- return double(m_lElem) / double(m_lSize);
-}
-
-void HashTable::SmartGrow()
-// Achtung: da die Objekte umkopiert werden, darf die OnDeleteObject-Methode
-// nicht gerufen werden
-{
- double dLoadFactor = CalcLoadFactor();
-
- if (dLoadFactor <= m_dMaxLoadFactor)
- return; // nothing to grow
-
- unsigned long lOldSize = m_lSize; // alte Daten sichern
- HashItem* pOldData = m_pData;
-
- m_lSize = (unsigned long) (m_dGrowFactor * m_lSize); // neue Größe
- m_pData = new HashItem[m_lSize]; // neue Daten holen
-
- // kein Speicher:
- // Zustand "Tabelle voll" wird in Insert abgefangen
- //
- if (m_pData == NULL)
- {
- m_lSize = lOldSize;
- m_pData = pOldData;
- return;
- }
-
- m_lElem = 0; // noch keine neuen Daten
-
- // Umkopieren der Daten
- //
- for (unsigned long i=0; i<lOldSize; i++)
- {
- HashItem *pItem = &pOldData[i];
-
- if (pItem->IsUsed())
- Insert(pItem->GetKey(),pItem->GetObject());
- }
-
- delete [] pOldData;
-}
-
-// Iterator ---------------------------------------------------------
-//
-
-HashTableIterator::HashTableIterator(HashTable const& aTable)
-: m_aTable(aTable)
-{
- m_lAt = 0;
-}
-
-void* HashTableIterator::GetFirst()
-{
- m_lAt = 0;
- return FindValidObject(true /* forward */);
-}
-
-void* HashTableIterator::GetLast()
-{
- m_lAt = m_aTable.GetSize() -1;
- return FindValidObject(false /* backward */);
-}
-
-void* HashTableIterator::GetNext()
-{
- if (m_lAt+1 >= m_aTable.GetSize())
- return NULL;
-
- m_lAt++;
- return FindValidObject(true /* forward */);
-}
-
-void* HashTableIterator::GetPrev()
-{
- if (m_lAt)
- {
- --m_lAt;
- return FindValidObject(false /* backward */);
- }
- return NULL;
-}
-
-void* HashTableIterator::FindValidObject(bool bForward)
-// Sucht nach einem vorhandenen Objekt ab der aktuellen
-// Position.
-//
-// pre: ab inkl. m_lAt soll die Suche beginnen
-// post: if not found then
-// if bForward == TRUE then
-// m_lAt == m_aTable.GetSize() -1
-// else
-// m_lAt == 0
-// else
-// m_lAt ist die gefundene Position
-{
- void *pObject = m_aTable.GetObjectAt(m_lAt);
-
- if (pObject != NULL)
- return pObject;
-
- while (pObject == NULL
- && (bForward ? ((m_lAt+1) < m_aTable.GetSize())
- : m_lAt > 0))
- {
- if (bForward)
- m_lAt++;
- else
- m_lAt--;
-
- pObject = m_aTable.GetObjectAt(m_lAt);
- }
-
- return pObject;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/soltools/ldump/hashtbl.hxx b/soltools/ldump/hashtbl.hxx
deleted file mode 100644
index 9dade31b97bd..000000000000
--- a/soltools/ldump/hashtbl.hxx
+++ /dev/null
@@ -1,104 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#ifndef _HASHTBL_HXX
-#define _HASHTBL_HXX
-
-// ADT hash table
-//
-// Invariante:
-// 1. m_lElem < m_lSize
-// 2. die Elemente in m_Array wurden double-hashed erzeugt
-//
-class HashItem;
-
-class HashTable
-{
- unsigned long m_lSize;
- unsigned long m_lElem;
- HashItem *m_pData;
- double m_dMaxLoadFactor;
- double m_dGrowFactor;
- bool m_bOwner;
-
- unsigned long Hash(const char *cKey) const;
- unsigned long DHash(const char *cKey , unsigned long lHash) const;
- unsigned long Probe(unsigned long lPos) const;
-
- HashItem* FindPos(const char *cKey) const;
- void SmartGrow();
- double CalcLoadFactor() const;
-
-protected:
- friend class HashTableIterator;
-
- virtual void OnDeleteObject(void* pObject);
-
- void* GetObjectAt(unsigned long lPos) const;
-
-// Default-Werte
-public:
- static double m_defMaxLoadFactor;
- static double m_defDefGrowFactor;
-
-public:
- HashTable
- (
- unsigned long lSize,
- bool bOwner,
- double dMaxLoadFactor = HashTable::m_defMaxLoadFactor /* 0.8 */,
- double dGrowFactor = HashTable::m_defDefGrowFactor /* 2.0 */
- );
-
- virtual ~HashTable();
-
- bool IsFull() const;
- unsigned long GetSize() const { return m_lSize; }
-
- void* Find (const char *cKey ) const;
- bool Insert (const char *cKey , void* pObject);
- void* Delete (const char *cKey);
-};
-
-// ADT hash table iterator
-//
-// Invariante: 0 <= m_lAt < m_aTable.GetCount()
-//
-class HashTableIterator
-{
- unsigned long m_lAt;
- HashTable const& m_aTable;
-
- void operator =(HashTableIterator &); // not defined
-
- void* FindValidObject(bool bForward);
-
-protected:
- void* GetFirst(); // Interation _ohne_ Sortierung
- void* GetNext();
- void* GetLast();
- void* GetPrev();
-
-public:
- HashTableIterator(HashTable const&);
-};
-
-#endif // _HASHTBL_HXX
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/soltools/ldump/ldump.cxx b/soltools/ldump/ldump.cxx
deleted file mode 100644
index 778fc8a3994d..000000000000
--- a/soltools/ldump/ldump.cxx
+++ /dev/null
@@ -1,745 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-
-#include <string.h>
-#include <direct.h>
-#include <stdio.h>
-#include <stdlib.h>
-
-#include "ldump.hxx"
-#include "hashtbl.hxx"
-
-#define MAXSYM 65536
-#define MAXBASE 98304
-#define MAX_MAN 4096
-
-int bFilter = 0;
-int bLdump3 = 0;
-int bUseDirectives = 0;
-int bVerbose = 0;
-int bExportByName = 0;
-
-class ExportSet : public HashTable
-{
-public:
- ExportSet
- (
- unsigned long lSize,
- double dMaxLoadFactor = HashTable::m_defMaxLoadFactor,
- double dGrowFactor = HashTable::m_defDefGrowFactor
- )
- : HashTable(lSize,false,dMaxLoadFactor,dGrowFactor) {}
-
- virtual ~ExportSet() {}
-
- LibExport * Find (char * const& Key) const
- { return (LibExport *) HashTable::Find((char *) Key); }
-
- bool Insert (char * const& Key, LibExport * Object)
- { return HashTable::Insert((char *) Key, (void*) Object); }
-
- LibExport * Delete (char * const&Key)
- { return (LibExport *) HashTable::Delete ((char *) Key); }
-};
-
-LibDump::LibDump( char *cFileName, int bExportByName )
- : cBName( NULL ),
- cAPrefix( NULL ),
- cLibName( NULL ),
- cFilterName( NULL ),
- cModName( NULL )
-{
- fprintf( stderr, "LIB-NT File Dumper v4.00 (C) 2000 Sun Microsystems, Inc.\n\n" );
- fprintf( stderr, "%s ", cFileName );
-
- bExportName = bExportByName;
-
- unsigned long nSlots = 0xfffff;
- pBaseTab = new ExportSet( nSlots );
- pIndexTab = new ExportSet( nSlots );
- pFilterLines = new char * [MAXFILT];
- CheckLibrary(cFileName);
- bBase = 0;
- bAll = false;
- nDefStart = 0;
- nBaseLines = 0;
- nFilterLines = 0;
- bDef = true;
- cAPrefix = new char[ 1 ];
- cAPrefix[ 0 ] = 0;
- if (!bExportName)
- CheckDataBase();
-}
-
-bool LibDump::Dump()
-{
- FILE *pList;
- char aBuf[MAX_MAN];
- int nLen;
- char aName[MAX_MAN];
-
- pList = fopen( cLibName, "rb");
- if (!pList)
- DumpError(10);
-
- // forget about offset when working on linker directives
- if ( !bUseDirectives )
- {
- // calculating offset for name section
- unsigned char TmpBuffer[4];
- fread( TmpBuffer, 1, 4, pList);
- // anzahl bigendian mal laenge + ueberspringen der naechsten laengenangabe
- unsigned long nOffSet = (unsigned long) ( TmpBuffer[2] * 256 + TmpBuffer[3] ) * 4 + 4;
- fseek( pList, (long) nOffSet, 0);
- }
-
- char aTmpBuf[4096];
- // reading file containing symbols
- while( !feof( pList ) )
- {
- int i = 0;
- if ( !bUseDirectives )
- {
- // symbol komplett einlesen
- for (;;)
- {
- int c = fgetc( pList );
- if ( c == '\0' )
- {
- break;
- }
- if ( ((c >= 33) && (c <= 126)) && ( c!=40 && c!=41) )
- aBuf[i] = static_cast< char >(c);
- else
- {
- aBuf[0] = '\0';
- break;
- }
- i++;
- }
- // Namen found
- aBuf[i] = '\0';
- }
- else
- {
- fgets( aTmpBuf, 4096, pList );
- char * pEnd = 0;
- char *pFound = 0;
- aBuf[0] = '\0';
- pFound = strchr( aTmpBuf, 'E' );
- while ( pFound )
- {
- if ( strncmp( "EXPORT:", pFound, 7) == 0 )
- {
- pFound += 7;
- pEnd = strchr( pFound, ',');
- if ( pEnd )
- *pEnd = '\0';
- strncpy( aBuf, pFound, strlen( pFound));
- aBuf[ strlen( pFound) ] = '\0';
- break;
- }
- else
- {
- pFound++;
- pFound = strchr( pFound, 'E' );
- }
- }
- }
-
- if (aBuf[0] =='?')
- {
- nLen = (int) strlen(aBuf);
- memset( aName, 0, sizeof( aName ) );
- int nName = 0;
- for( i = 0; i < nLen; i++ )
- {
- if ( (aBuf[i] != '\n') && (aBuf[i] != '\r') )
- {
- aName[nName] = aBuf[i];
- nName++;
- }
- }
- // und raus damit
- PrintSym( aName, bExportByName );
- }
- else if ( bAll == true &&
- strncmp(aBuf, "__real@", 7) != 0 &&
- strncmp(aBuf, "__CT",4) != 0 &&
- strncmp(aBuf, "__TI3?", 6) != 0 )
- {
- int nPreLen = (int) strlen( cAPrefix );
-
- nLen = (int) strlen(aBuf);
- memset( aName, 0, sizeof( aName ) );
- int nName = 0;
-
- for( i = 0; i < nLen; i++ )
- {
- if ( (aBuf[i] != '\n') && (aBuf[i] != '\r') )
- {
- aName[nName] = aBuf[i];
- nName++;
- }
- }
- // den ersten _ raus
- nLen = (int) strlen(aName);
-#ifndef _WIN64
- if (aName[0] == '_')
- strcpy( aBuf , &aName[1] );
-#endif
- strncpy ( aTmpBuf, aBuf, (size_t) nPreLen );
- aTmpBuf[nPreLen] = '\0';
- if ( !strcmp( aTmpBuf, cAPrefix ))
- {
- if ( bLdump3 ) {
- int nChar = '@';
- char *pNeu = strchr( aBuf, nChar );
- size_t nPos = pNeu - aBuf + 1;
- if ( nPos > 0 )
- {
- char aOldBuf[MAX_MAN];
- strcpy( aOldBuf, aBuf );
- char pChar[MAX_MAN];
- strncpy( pChar, aBuf, nPos - 1 );
- pChar[nPos-1] = '\0';
- strcpy( aBuf, pChar );
- strcat( aBuf, "=" );
- strcat( aBuf, aOldBuf );
- strcpy( pChar, "" );
- }
- }
- // und raus damit
- PrintSym( aBuf, true );
- }
- }
- }
- fclose(pList);
- return true;
-}
-
-bool LibDump::ReadFilter( char * cFilterName )
-{
- FILE* pfFilter = 0;
- char aBuf[MAX_MAN];
- char* pStr;
- int nLen;
-
- pfFilter = fopen( cFilterName, "r" );
-
- if ( !pfFilter )
- {
- ::bFilter = 0;
- DumpError( 500 );
- }
-
- while( fgets( aBuf, MAX_MAN, pfFilter ) != 0 )
- {
- nLen = (int) strlen(aBuf);
- pStr = new char[(unsigned int) nLen];
- if ( !pStr )
- DumpError( 98 );
- memcpy( pStr, aBuf, (unsigned int) nLen );
- if ( *(pStr+nLen-1) == '\n' )
- *(pStr+nLen-1) = '\0';
- pFilterLines[nFilterLines] = pStr;
- nFilterLines++;
- if ( nFilterLines >= MAXFILT )
- DumpError( 510 );
- }
-
- fclose( pfFilter );
- return true;
-}
-
-bool LibDump::PrintSym(char *pName, bool bName )
-{
- LibExport *pData;
-
-
- // Filter auswerten
- if ( Filter( pName ) )
- {
- if ( strlen( pName ) > 3 )
- {
- if ( bDef )
- {
- if (!bBase)
- if (bExportName) {
- fprintf( stdout, "\t%s\n", pName );
- } else {
- fprintf( stdout, "\t%s\t\t@%lu\n", pName, nDefStart );
- }
- else
- {
- pData = pBaseTab->Find( pName );
- if ( pData )
- {
- pData->bExport = true;
- if ( bName )
- pData->bByName = true;
- else
- pData->bByName = false;
- if ( bVerbose )
- fprintf(stderr,".");
- }
- else
- {
- // neuen Export eintragen
- pData = new LibExport;
- pData->cExportName = new char[ strlen( pName ) + 1 ];
- strcpy( pData->cExportName, pName );
- pData->nOrdinal = nBaseLines++;
- pData->bExport = true;
- if ( bName )
- pData->bByName = true;
- else
- pData->bByName = false;
- pBaseTab->Insert( pData->cExportName, pData );
- char *cBuffer = new char[ 30 ];
- sprintf( cBuffer, "%lu", pData->nOrdinal );
- pIndexTab->Insert( cBuffer, pData );
- delete [] cBuffer;
- if ( bVerbose )
- fprintf(stderr,"n");
- }
- }
- }
- else
- printf( "%s\n", pName );
- nDefStart++;
- }
- }
- return true;
-}
-
-bool LibDump::IsFromAnonymousNamespace (char *pExportName) {
- char* pattern1 = "@?A0x";
-
- if (strstr(pExportName, pattern1)) {
- return true;
- };
- return false;
-};
-
-bool LibDump::Filter(char *pExportName)
-{
- unsigned long i;
- char pTest[256];
-
- // filter out symbols from anonymous namespaces
- if (IsFromAnonymousNamespace (pExportName))
- return false;
-
- // Kein Filter gesetzt
- if ( ::bFilter == 0 )
- return true;
-
- for ( i=0; i<nFilterLines; i++ )
- {
- //Zum vergleichen muá das Plus abgeschnitteb werden
- if(pFilterLines[i][0] != '+')
- {
- if ( strstr( pExportName, pFilterLines[i]))
- return false;
- }
- else
- {
- strcpy(pTest,&pFilterLines[i][1]);
- if ( strstr( pExportName, pTest))
- return true;
- }
- }
- return true;
-}
-
-bool LibDump::SetFilter(char * cFilterName)
-{
- ReadFilter( cFilterName );
- return true;
-}
-
-bool LibDump::CheckLibrary(char * cName)
-{
- delete [] cLibName;
- cLibName = new char[ strlen( cName ) + 1 ];
- strcpy( cLibName, cName );
- return true;
-}
-
-bool LibDump::ReadDataBase()
-{
- FILE* pfBase = 0;
- char aBuf[MAX_MAN];
- char* pStr;
- char cBuffer[ 30 ];
- int nLen;
- LibExport *pData;
-
- pfBase = fopen( cBName, "r" );
-
- if ( !pfBase )
- {
- bBase = 0;
- DumpError( 600 );
- }
-
- bool bRet = true;
- while( fgets( aBuf, MAX_MAN, pfBase ) != 0 )
- {
- nLen = (int) strlen(aBuf);
- pStr = new char[(unsigned int) nLen];
- if ( !pStr )
- DumpError( 98 );
- memcpy( pStr, aBuf, (size_t) nLen );
- if ( *(pStr+nLen-1) == '\n' )
- *(pStr+nLen-1) = '\0';
- pData = new LibExport;
- pData->cExportName = pStr;
- pData->nOrdinal = nBaseLines;
- pData->bExport=false;
-
- if (pBaseTab->Insert(pData->cExportName, pData ) == NULL)
- bRet = false;
- ltoa( (long) pData->nOrdinal, cBuffer, 10 );
- if (pIndexTab->Insert( cBuffer, pData ) == NULL)
- bRet = false;
- nBaseLines++;
- if ( nBaseLines >= MAXBASE )
- DumpError( 610 );
- }
- fclose( pfBase );
- return bRet;
-}
-
-class ExportSetIter : public HashTableIterator
-{
-public:
- ExportSetIter(HashTable const& aTable)
- : HashTableIterator(aTable) {}
-
- LibExport * GetFirst()
- { return (LibExport *)HashTableIterator::GetFirst(); }
- LibExport * GetNext()
- { return (LibExport *)HashTableIterator::GetNext(); }
- LibExport * GetLast()
- { return (LibExport *)HashTableIterator::GetLast(); }
- LibExport * GetPrev()
- { return (LibExport *)HashTableIterator::GetPrev(); }
-
-private:
- void operator =(ExportSetIter &); // not defined
-};
-
-bool LibDump::PrintDataBase()
-{
- if (bExportName)
- return true;
- FILE *pFp;
- pFp = fopen (cBName,"w+");
- if (!pFp)
- fprintf( stderr, "Error opening DataBase File\n" );
-
- LibExport *pData;
- for ( unsigned long i=0; i < nBaseLines+10; i++ )
- {
- char * cBuffer = new char[ 30 ];
- sprintf( cBuffer, "%lu", i );
- pData = pIndexTab->Find( cBuffer );
- delete [] cBuffer;
- if ( pData )
- fprintf(pFp,"%s\n",pData->cExportName);
- }
- fclose(pFp);
- return true;
-}
-
-bool LibDump::PrintDefFile()
-{
-#ifdef FAST
- ExportSetIter aIterator( *pBaseTab );
- for ( LibExport *pData = aIterator.GetFirst(); pData != NULL;
- pData = aIterator.GetNext() )
- {
- if ( pData->bExport )
- {
- if ( pData->bByName )
- {
- fprintf(stdout,"\t%s\n",
- pData->sExportName.GetBuffer());
- }
- else
- {
- fprintf(stdout,"\t%s\t\t@%d NONAME\n",
- pData->sExportName.GetBuffer(), pData->nOrdinal+nBegin);
- }
- }
- }
-#else
- // sortiert nach Ordinals;
- LibExport *pData;
- for ( unsigned long i=0; i<nBaseLines+1; i++)
- {
- char * cBuffer = new char[ 30 ];
- sprintf( cBuffer, "%lu", i );
- pData = pIndexTab->Find( cBuffer );
- delete [] cBuffer;
- if ( pData )
- if ( pData->bExport )
- {
- if ( pData->bByName )
- {
- if ( strlen( pData->cExportName ))
- fprintf(stdout,"\t%s\n",
- pData->cExportName);
- }
- else
- {
- if ( strlen( pData->cExportName ))
- fprintf(stdout,"\t%s\t\t@%d NONAME\n",
- pData->cExportName, pData->nOrdinal+nBegin);
- }
- }
- }
-#endif
- return true;
-}
-
-bool LibDump::CheckDataBase()
-{
- // existiert eine Datenbasis ?
- if (!bBase)
- {
- cBName = new char[ 2048 ];
- char *pTmp = "defs\\";
-
- FILE *fp;
- _mkdir ("defs");
- strcpy(cBName,pTmp);
- strcat(cBName,getenv ("COMP_ENV"));
-
- fp = fopen (cBName,"r");
- if (fp)
- {
- bBase = true;
- }
- else
- {
- fp = fopen (cBName,"w+");
- bBase = true;
- }
- fclose (fp);
- }
- // lese Datenbasis !
- if (bBase)
- {
- ReadDataBase();
- }
- return true;
-}
-
-LibDump::~LibDump()
-{
- delete [] cBName;
- delete [] cAPrefix;
- delete [] cFilterName;
- delete [] cModName;
-}
-
-void LibDump::SetCExport( char* pName )
-{
- delete [] cAPrefix;
- cAPrefix = new char[ strlen( pName ) + 1 ];
- strcpy( cAPrefix, pName );bAll = true;
-}
-
-//******************************************************************
-//* Error() - Gibt Fehlermeldumg aus
-//******************************************************************
-
-void LibDump::DumpError( unsigned long n )
-{
- char *p;
-
- switch (n)
- {
- case 1: p = "Input error in library file"; break;
- case 2: p = "Position error in library file (no THEADR set)"; break;
- case 3: p = "Overflow of symbol table"; break;
-#ifdef WNT
- case 10: p = "EXP file not found"; break;
- case 11: p = "No valid EXP file"; break;
-#else
- case 10: p = "Library file not found"; break;
- case 11: p = "No valid library file"; break;
-#endif
- case 98: p = "Out of memory"; break;
- case 99: p = "LDUMP [-LD3] [-D] [-N] [-A] [-E nn] [-F name] Filename[.LIB]\n"
- "-LD3 : Supports feature set of ldump3 (default: ldump/ldump2)\n"
- "-A : all symbols (default: only C++)\n"
- "-E nn : gerenration of export table beginning with number nn\n"
- "-F name: Filter file\n"
- "-D : file contains \"dumpbin\" directives\n"
- "-N : export by name\n"
- "-V : be verbose\n"; break;
- case 500: p = "Unable to open filter file\n"; break;
- case 510: p = "Overflow of filter table\n"; break;
- case 600: p = "Unable to open base database file\n"; break;
- case 610: p = "Overflow in base database table\n"; break;
- default: p = "Unspecified error";
- }
- fprintf( stdout, "%s\n", p );
- exit (1);
-}
-
-/*********************************************************************
- Test Funktionen
-*********************************************************************/
-
-
-void usage()
-{
- LibDump::DumpError(99);
-}
-
-#define STATE_NON 0x0000
-#define STATE_BEGIN 0x0001
-#define STATE_FILTER 0x0002
-#define STATE_CEXPORT 0x0003
-
-int
-#ifdef WNT
-__cdecl
-#endif
-main( int argc, char **argv )
-{
- char *pLibName = NULL, *pFilterName = NULL, *pCExport= NULL;
- unsigned short nBegin=1;
-
- unsigned short nState = STATE_NON;
-
- if ( argc == 1 ) {
- usage();
- }
-
- for ( int i = 1; i < argc; i++ ) {
- if (( !strcmp( argv[ i ], "-H" )) ||
- ( !strcmp( argv[ i ], "-h" )) ||
- ( !strcmp( argv[ i ], "-?" )))
- {
- usage();
- }
- else if (( !strcmp( argv[ i ], "-LD3" )) ||
- ( !strcmp( argv[ i ], "-Ld3" )) ||
- ( !strcmp( argv[ i ], "-ld3" )) ||
- ( !strcmp( argv[ i ], "-lD3" )))
- {
- if ( nState != STATE_NON ) {
- usage();
- }
- bLdump3 = 1;
- }
- else if (( !strcmp( argv[ i ], "-E" )) || ( !strcmp( argv[ i ], "-e" ))) {
- if ( nState != STATE_NON ) {
- usage();
- }
- nState = STATE_BEGIN;
- }
- else if (( !strcmp( argv[ i ], "-F" )) || ( !strcmp( argv[ i ], "-f" ))) {
- if ( nState != STATE_NON ) {
- usage();
- }
- nState = STATE_FILTER;
- }
- else if (( !strcmp( argv[ i ], "-A" )) || ( !strcmp( argv[ i ], "-a" ))) {
- if ( nState != STATE_NON ) {
- usage();
- }
- nState = STATE_CEXPORT;
- pCExport = new char[ 1 ];
- pCExport[ 0 ] = 0;
- }
- else if (( !strcmp( argv[ i ], "-D" )) || ( !strcmp( argv[ i ], "-d" ))) {
- if ( nState != STATE_NON ) {
- usage();
- }
- bUseDirectives = 1;
- }
- else if (( !strcmp( argv[ i ], "-N" )) || ( !strcmp( argv[ i ], "-n" ))) {
- if ( nState != STATE_NON ) {
- usage();
- }
- bExportByName = 1;
- }
- else if (( !strcmp( argv[ i ], "-V" )) || ( !strcmp( argv[ i ], "-v" ))) {
- if ( nState != STATE_NON ) {
- usage();
- }
- bVerbose = 1;
- }
- else {
- switch ( nState ) {
- case STATE_BEGIN:
- nBegin = static_cast< unsigned short >(atoi( argv[ i ] ));
- nState = STATE_NON;
- break;
- case STATE_FILTER:
- pFilterName = new char[ strlen( argv[ i ] ) + 1 ];
- strcpy( pFilterName, argv[ i ] );
- bFilter = 1;
- nState = STATE_NON;
- break;
- case STATE_CEXPORT:
- delete [] pCExport;
- pCExport = new char[ strlen( argv[ i ] ) + 1 ];
- strcpy( pCExport, argv[ i ] );
- nState = STATE_NON;
- break;
- default:
- pLibName = new char[ strlen( argv[ i ] ) + 1 ];
- strcpy( pLibName, argv[ i ] );
- break;
- }
- }
- }
-
- if ( !pLibName ) {
- usage();
- }
-
- LibDump *pDump = new LibDump( pLibName, bExportByName );
- pDump->SetBeginExport(nBegin);
- if ( bFilter != 0 )
- pDump->SetFilter( pFilterName );
- if ( pCExport )
- pDump->SetCExport( pCExport );
- else {
- char *pEmpty = "";
- pDump->SetCExport( pEmpty );
- }
- pDump->Dump();
- pDump->PrintDefFile();
- pDump->PrintDataBase();
- delete pDump;
- delete [] pLibName;
- return 0;
-}
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
diff --git a/soltools/ldump/ldump.hxx b/soltools/ldump/ldump.hxx
deleted file mode 100644
index 63327cc39356..000000000000
--- a/soltools/ldump/ldump.hxx
+++ /dev/null
@@ -1,71 +0,0 @@
-/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
-/*
- * This file is part of the LibreOffice project.
- *
- * This Source Code Form is subject to the terms of the Mozilla Public
- * License, v. 2.0. If a copy of the MPL was not distributed with this
- * file, You can obtain one at http://mozilla.org/MPL/2.0/.
- *
- * This file incorporates work covered by the following license notice:
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements. See the NOTICE file distributed
- * with this work for additional information regarding copyright
- * ownership. The ASF licenses this file to you under the Apache
- * License, Version 2.0 (the "License"); you may not use this file
- * except in compliance with the License. You may obtain a copy of
- * the License at http://www.apache.org/licenses/LICENSE-2.0 .
- */
-
-#include "hashtbl.hxx"
-
-#define MAXFILT 200
-
-struct LibExport
-{
- char *cExportName; // zu exportierende Fkt.
- unsigned long nOrdinal; // Nummer der zu export. Fkt.
- bool bByName; // NONAME anhaengen
- bool bExport; // exportieren oder nicht ?
-};
-
-class ExportSet;
-class LibDump
-{
- ExportSet *pBaseTab; // Zugriff auf gemangelte Namen
- ExportSet *pIndexTab; // Zugriff auf die Ordinals
- char *cBName; // Name der Datenbasis
- char *cAPrefix; // Prefix fuer C-Fkts.
- char *cLibName; // Name der zu untersuchenden Lib
- char *cFilterName; // Name der Filterdatei
- char *cModName; // Modulname
- unsigned short nBegin; // Nummer des ersten Exports
- unsigned long nBaseLines; // Line in Datenbasis
- unsigned long nFilterLines; // Line in FilterTabelle
- char **pFilterLines; // Filtertabelle
- unsigned long nDefStart;
- bool bBase; // Existenz der DatenBasis;
- bool bAll; // Alle Fkts exportieren
- bool bDef; // DefFile schreiben ( bei -E )
- int bExportName; // 0 - export by ordinal; 1 - export by name
-
- bool CheckDataBase();
- bool CheckLibrary(char * cName);
- bool ReadDataBase();
- bool ReadFilter(char *);
- bool PrintSym(char *, bool bName = true );
-public:
- LibDump( char *cFileName, int bExportByName );
- ~LibDump();
- bool Dump();
- bool SetFilter(char *cFilterName);
- void SetBeginExport(unsigned short nVal){nBegin = nVal;}
- void SetCExport( char* pName );
- bool Filter(char *pName);
- bool IsFromAnonymousNamespace(char *pName);
- bool PrintDefFile();
- bool PrintDataBase();
- static void DumpError(unsigned long nError);
-};
-
-/* vim:set shiftwidth=4 softtabstop=4 expandtab: */