Skip to content
Projeler
Gruplar
Parçacıklar
Yardım
Yükleniyor...
Oturum aç / Kaydol
Gezinmeyi değiştir
C
core
Proje
Proje
Ayrıntılar
Etkinlik
Cycle Analytics
Depo (repository)
Depo (repository)
Dosyalar
Kayıtlar (commit)
Dallar (branch)
Etiketler
Katkıda bulunanlar
Grafik
Karşılaştır
Grafikler
Konular (issue)
0
Konular (issue)
0
Liste
Pano
Etiketler
Kilometre Taşları
Birleştirme (merge) Talepleri
0
Birleştirme (merge) Talepleri
0
CI / CD
CI / CD
İş akışları (pipeline)
İşler
Zamanlamalar
Grafikler
Paketler
Paketler
Wiki
Wiki
Parçacıklar
Parçacıklar
Üyeler
Üyeler
Collapse sidebar
Close sidebar
Etkinlik
Grafik
Grafikler
Yeni bir konu (issue) oluştur
İşler
Kayıtlar (commit)
Konu (issue) Panoları
Kenar çubuğunu aç
LibreOffice
core
Commits
416010c7
Kaydet (Commit)
416010c7
authored
Şub 22, 2012
tarafından
Caolán McNamara
Dosyalara gözat
Seçenekler
Dosyalara Gözat
İndir
Eposta Yamaları
Sade Fark
ditch useless, duplicated or non-recoverable workben files
üst
331b377c
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
0 additions
and
847 deletions
+0
-847
fstest.cxx
tools/workben/fstest.cxx
+0
-95
hashtbl.cxx
tools/workben/hashtbl.cxx
+0
-0
hashtbl.hxx
tools/workben/hashtbl.hxx
+0
-205
helloworld.c
tools/workben/helloworld.c
+0
-36
makefile.mk
tools/workben/makefile.mk
+0
-68
mempooltest.cxx
tools/workben/mempooltest.cxx
+0
-21
solar.c
tools/workben/solar.c
+0
-422
No files found.
tools/workben/fstest.cxx
deleted
100644 → 0
Dosyayı görüntüle @
331b377c
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org 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 Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#define _FSTEST_CXX
#include <tools/solar.h>
#include <stdio.h>
#include <tools/stream.hxx>
#include <tools/fsys.hxx>
#include <tools/date.hxx>
#include <tools/time.hxx>
void
CheckTimes
(
DirEntry
aDE
);
/*
* main.
*/
int
main
(
int
argc
,
char
**
argv
)
{
DirEntry
aDir
;
if
(
aDir
.
Exists
())
{
aDir
.
ToAbs
();
String
sTmp
(
aDir
.
GetFull
(
FSYS_STYLE_HOST
));
printf
(
"Directory = %s
\n
"
,
sTmp
.
GetStr
());
CheckTimes
(
aDir
);
DirEntry
aFile
=
aDir
+
DirEntry
(
"testfile.txt"
,
FSYS_STYLE_HOST
);
SvFileStream
aStream
;
aStream
.
Open
(
aFile
.
GetFull
(
FSYS_STYLE_HOST
),
STREAM_WRITE
);
aStream
<<
"Test"
;
aStream
.
Close
();
ULONG
i
,
nWaitFor
=
2000
+
Time
::
GetSystemTicks
();
for
(
i
=
Time
::
GetSystemTicks
();
i
<
nWaitFor
;
i
=
Time
::
GetSystemTicks
())
;
CheckTimes
(
aDir
);
nWaitFor
=
2000
+
Time
::
GetSystemTicks
();
for
(
i
=
Time
::
GetSystemTicks
();
i
<
nWaitFor
;
i
=
Time
::
GetSystemTicks
())
;
aFile
.
Kill
();
}
else
puts
(
"MakeDir failed!"
);
return
0
;
}
void
CheckTimes
(
DirEntry
aDE
)
{
FileStat
aDirStat
(
aDE
);
aDirStat
.
Update
(
aDE
);
Date
aDateCreated
(
aDirStat
.
DateCreated
());
Date
aDateModified
(
aDirStat
.
DateModified
());
Time
aTimeCreated
(
aDirStat
.
TimeCreated
());
Time
aTimeModified
(
aDirStat
.
TimeModified
());
printf
(
"DirDateCreated = %i, DirTimeCreated = %i
\n
"
,
aDateCreated
.
GetDate
(),
aTimeCreated
.
GetTime
());
printf
(
"DirDateModified = %i, DirTimeModified = %i
\n
"
,
aDateModified
.
GetDate
(),
aTimeModified
.
GetTime
());
return
;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
tools/workben/hashtbl.cxx
deleted
100644 → 0
Dosyayı görüntüle @
331b377c
This diff is collapsed.
Click to expand it.
tools/workben/hashtbl.hxx
deleted
100644 → 0
Dosyayı görüntüle @
331b377c
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org 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 Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#ifndef _HASHTBL_HXX
#define _HASHTBL_HXX
#include <tlgen.hxx>
// ADT hash table
//
// Invariante:
// 1. m_lElem < m_lSize
// 2. die Elemente in m_Array wurden double-hashed erzeugt
//
class
HashItem
;
class
HashTable
{
ULONG
m_lSize
;
ULONG
m_lElem
;
HashItem
*
m_pData
;
double
m_dMaxLoadFactor
;
double
m_dGrowFactor
;
BOOL
m_bOwner
;
ULONG
Hash
(
String
const
&
Key
)
const
;
ULONG
DHash
(
String
const
&
Key
,
ULONG
lHash
)
const
;
ULONG
Probe
(
ULONG
lPos
)
const
;
HashItem
*
FindPos
(
String
const
&
Key
)
const
;
void
SmartGrow
();
double
CalcLoadFactor
()
const
;
// Statistik
#ifdef DBG_UTIL
private
:
struct
{
ULONG
m_lSingleHash
;
ULONG
m_lDoubleHash
;
ULONG
m_lProbe
;
}
m_aStatistic
;
#endif
protected
:
friend
class
HashTableIterator
;
virtual
void
OnDeleteObject
(
void
*
pObject
);
void
*
GetObjectAt
(
ULONG
lPos
)
const
;
// Default-Werte
public
:
static
double
m_defMaxLoadFactor
;
static
double
m_defDefGrowFactor
;
public
:
HashTable
(
ULONG
lSize
,
BOOL
bOwner
,
double
dMaxLoadFactor
=
HashTable
::
m_defMaxLoadFactor
/* 0.8 */
,
double
dGrowFactor
=
HashTable
::
m_defDefGrowFactor
/* 2.0 */
);
~
HashTable
();
BOOL
IsFull
()
const
;
ULONG
GetSize
()
const
{
return
m_lSize
;
}
void
*
Find
(
String
const
&
Key
)
const
;
BOOL
Insert
(
String
const
&
Key
,
void
*
pObject
);
void
*
Delete
(
String
const
&
Key
);
};
// ADT hash table iterator
//
// Invariante: 0 <= m_lAt < m_aTable.GetCount()
//
class
HashTableIterator
{
ULONG
m_lAt
;
HashTable
const
&
m_aTable
;
void
*
FindValidObject
(
BOOL
bForward
);
protected
:
void
*
GetFirst
();
// Interation _ohne_ Sortierung
void
*
GetNext
();
void
*
GetLast
();
void
*
GetPrev
();
public
:
HashTableIterator
(
HashTable
const
&
);
};
// typsichere Makros ---------------------------------------------------
#define DECLARE_HASHTABLE_INTERN(ClassName,Owner,KeyType,ObjType) \
class ClassName : public HashTable \
{ \
public: \
ClassName \
( \
ULONG lSize, \
double dMaxLoadFactor = HashTable::m_defMaxLoadFactor, \
double dGrowFactor = HashTable::m_defDefGrowFactor \
) \
: HashTable(lSize,Owner,dMaxLoadFactor,dGrowFactor) {} \
\
ObjType Find (KeyType const& Key) const \
{ return (ObjType) HashTable::Find(String(Key)); } \
\
BOOL Insert (KeyType const& Key, ObjType Object) \
{ return HashTable::Insert(String(Key), (void*) Object); } \
\
ObjType Delete (KeyType const&Key) \
{ return (ObjType) HashTable::Delete (String(Key)); } \
};
// HashTable OHNE Owner-Verhalten
#define DECLARE_HASHTABLE(ClassName,KeyType,ObjType) \
DECLARE_HASHTABLE_INTERN(ClassName,FALSE,KeyType,ObjType)
// HashTable MIT Owner-Verhalten
#define DECLARE_HASHTABLE_OWNER(ClassName,KeyType,ObjType) \
DECLARE_HASHTABLE_INTERN(ClassName##2,TRUE,KeyType,ObjType) \
class ClassName : public ClassName##2 \
{ \
protected: \
virtual void OnDeleteObject(void* pObject); \
public: \
ClassName \
( \
ULONG lSize, \
double dMaxLoadFactor = HashTable::m_defMaxLoadFactor, \
double dGrowFactor = HashTable::m_defDefGrowFactor \
) \
: ClassName##2(lSize,dMaxLoadFactor,dGrowFactor) {} \
~ClassName(); \
};
#define IMPLEMENT_HASHTABLE_OWNER(ClassName,KeyType,ObjType) \
void ClassName::OnDeleteObject(void* pObject) \
{ delete (ObjType) pObject; } \
\
ClassName::~ClassName() \
{ \
for (ULONG i=0; i<GetSize(); i++) \
{ \
void *pObject = GetObjectAt(i); \
if (pObject != NULL) \
OnDeleteObject(pObject); \
} \
}
// Iterator-Makros --------------------------------------------------
#define DECLARE_HASHTABLE_ITERATOR(ClassName,ObjType) \
class ClassName : public HashTableIterator \
{ \
public: \
ClassName(HashTable const& aTable) \
: HashTableIterator(aTable) {} \
\
ObjType GetFirst() \
{ return (ObjType)HashTableIterator::GetFirst(); } \
ObjType GetNext() \
{ return (ObjType)HashTableIterator::GetNext(); } \
ObjType GetLast() \
{ return (ObjType)HashTableIterator::GetLast(); } \
ObjType GetPrev() \
{ return (ObjType)HashTableIterator::GetPrev(); } \
};
#endif // _HASHTBL_HXX
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
tools/workben/helloworld.c
deleted
100644 → 0
Dosyayı görüntüle @
331b377c
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org 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 Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include <stdlib.h>
#include <io.h>
main
(
)
{
printf
(
"%s
\n
"
,
"hello world"
);
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
tools/workben/makefile.mk
deleted
100644 → 0
Dosyayı görüntüle @
331b377c
#*************************************************************************
#
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# Copyright 2000, 2010 Oracle and/or its affiliates.
#
# OpenOffice.org - a multi-platform office productivity suite
#
# This file is part of OpenOffice.org.
#
# OpenOffice.org is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License version 3
# only, as published by the Free Software Foundation.
#
# OpenOffice.org 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 Lesser General Public License version 3 for more details
# (a copy is included in the LICENSE file that accompanied this code).
#
# You should have received a copy of the GNU Lesser General Public License
# version 3 along with OpenOffice.org. If not, see
# <http://www.openoffice.org/license.html>
# for a copy of the LGPLv3 License.
#
#*************************************************************************
PRJ
=
..
PRJNAME
=
tools
TARGET
=
workben
LIBTARGET
=
NO
TARGETTYPE
=
CUI
ENABLE_EXCEPTIONS
=
TRUE
.INCLUDE
:
settings.mk
OBJFILES
=
\
$(OBJ)$/
solar.obj
\
$(OBJ)$/
urltest.obj
\
$(OBJ)$/
inetmimetest.obj
\
$(OBJ)$/
mempooltest.obj
APP1TARGET
=
solar
APP1OBJS
=
$(OBJ)$/
solar.obj
.IF
"$(GUI)"
==
"UNX"
APP1STDLIBS
=
$(TOOLSLIB)
.ELSE
APP1LIBS
=
$(LB)$/
itools.lib
.ENDIF
APP2TARGET
=
urltest
APP2OBJS
=
$(OBJ)$/
urltest.obj
.IF
"$(GUI)"
==
"UNX"
APP2STDLIBS
=
$(TOOLSLIB)
$(VOSLIB)
$(SALLIB)
$(CPPULIB)
$(CPPUHELPERLIB)
.ELSE
APP2STDLIBS
=
$(LB)$/
itools.lib
$(VOSLIB)
$(SALLIB)
$(CPPULIB)
$(CPPUHELPERLIB)
.ENDIF
APP3TARGET
=
inetmimetest
APP3OBJS
=
$(OBJ)$/
inetmimetest.obj
APP3STDLIBS
=
$(SALLIB)
$(TOOLSLIB)
APP4TARGET
=
mempooltest
APP4OBJS
=
$(OBJ)$/
mempooltest.obj
APP4STDLIBS
=
$(TOOLSLIB)
APP4RPATH
=
UREBIN
.INCLUDE
:
target.mk
tools/workben/mempooltest.cxx
deleted
100644 → 0
Dosyayı görüntüle @
331b377c
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
#include "tools/mempool.hxx"
struct
MempoolTest
{
int
m_int
;
DECL_FIXEDMEMPOOL_NEWDEL
(
MempoolTest
);
};
IMPL_FIXEDMEMPOOL_NEWDEL
(
MempoolTest
);
int
main
()
{
MempoolTest
*
p
=
new
MempoolTest
();
if
(
p
!=
0
)
delete
p
;
return
1
;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
tools/workben/solar.c
deleted
100644 → 0
Dosyayı görüntüle @
331b377c
/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
/*************************************************************************
*
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
*
* Copyright 2000, 2010 Oracle and/or its affiliates.
*
* OpenOffice.org - a multi-platform office productivity suite
*
* This file is part of OpenOffice.org.
*
* OpenOffice.org is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser General Public License version 3
* only, as published by the Free Software Foundation.
*
* OpenOffice.org 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 Lesser General Public License version 3 for more details
* (a copy is included in the LICENSE file that accompanied this code).
*
* You should have received a copy of the GNU Lesser General Public License
* version 3 along with OpenOffice.org. If not, see
* <http://www.openoffice.org/license.html>
* for a copy of the LGPLv3 License.
*
************************************************************************/
#include <stdio.h>
#include <stdlib.h>
typedef
enum
{
t_char
,
t_short
,
t_int
,
t_long
,
t_double
}
Type
;
typedef
int
(
*
TestFunc
)(
Type
,
void
*
);
struct
Description
;
int
IsBigEndian
(
void
);
int
IsStackGrowingDown_2
(
int
*
pI
);
int
IsStackGrowingDown
(
void
);
int
GetStackAlignment_3
(
char
*
p
,
long
l
,
int
i
,
short
s
,
char
b
,
char
c
,
...
);
int
GetStackAlignment_2
(
char
*
p
,
long
l
,
int
i
,
short
s
,
char
b
,
char
c
);
int
GetStackAlignment
(
void
);
void
PrintArgs
(
int
p
,
...
);
int
check
(
TestFunc
func
,
Type
eT
,
void
*
p
);
#if defined (UNX) || defined (WNT)
#ifdef UNX
#include <unistd.h>
#endif
#include <sys/types.h>
#define I_STDARG
#ifdef I_STDARG
#include <stdarg.h>
#else
#include <varargs.h>
#endif
#define NO_USE_FORK_TO_CHECK
#ifdef USE_FORK_TO_CHECK
#include <sys/wait.h>
#else
#include <signal.h>
#include <setjmp.h>
#endif
#else
#endif
#define printTypeSize(Type,Name) printf( "sizeof(%s)\t= %d\n", Name, \
sizeof (Type) )
#define isSignedType(Type) (((Type)-1) < 0)
#define printTypeSign(Type,Name) printf( "%s\t= %s %s\n", Name, \
( isSignedType(Type) ? "unsigned" : "signed" ), Name )
int
IsBigEndian
()
{
long
l
=
1
;
return
!
*
(
char
*
)
&
l
;
}
int
IsStackGrowingDown_2
(
int
*
pI
)
{
int
i
=
1
;
return
((
unsigned
long
)
&
i
)
<
(
unsigned
long
)
pI
;
}
int
IsStackGrowingDown
()
{
int
i
=
1
;
return
IsStackGrowingDown_2
(
&
i
);
}
int
GetStackAlignment_3
(
char
*
p
,
long
l
,
int
i
,
short
s
,
char
b
,
char
c
,
...
)
{
(
void
)
p
;
(
void
)
l
;
(
void
)
i
;
(
void
)
s
;
/* unused */
if
(
IsStackGrowingDown
()
)
return
&
c
-
&
b
;
else
return
&
b
-
&
c
;
}
int
GetStackAlignment_2
(
char
*
p
,
long
l
,
int
i
,
short
s
,
char
b
,
char
c
)
{
(
void
)
p
;
(
void
)
l
;
(
void
)
i
;
(
void
)
s
;
/* unused */
if
(
IsStackGrowingDown
()
)
return
&
c
-
&
b
;
else
return
&
b
-
&
c
;
}
int
GetStackAlignment
()
{
int
nStackAlignment
=
GetStackAlignment_3
(
0
,
1
,
2
,
3
,
4
,
5
);
if
(
nStackAlignment
!=
GetStackAlignment_2
(
0
,
1
,
2
,
3
,
4
,
5
)
)
printf
(
"Pascal calling convention
\n
"
);
return
nStackAlignment
;
}
#if defined (UNX) || defined (WNT)
#ifdef I_STDARG
void
PrintArgs
(
int
p
,
...
)
#else
void
PrintArgs
(
p
,
va_alist
)
int
p
;
va_dcl
#endif
{
int
value
;
va_list
ap
;
#ifdef I_STDARG
va_start
(
ap
,
p
);
#else
va_start
(
ap
);
#endif
printf
(
"value = %d"
,
p
);
while
(
(
value
=
va_arg
(
ap
,
int
)
)
!=
0
)
printf
(
" %d"
,
value
);
printf
(
"
\n
"
);
va_end
(
ap
);
}
#ifndef USE_FORK_TO_CHECK
static
jmp_buf
check_env
;
static
int
bSignal
;
void
SAL_CALL
SignalHandler
(
int
sig
)
{
bSignal
=
1
;
/*
fprintf( stderr, "Signal %d caught\n", sig );
signal( sig, SignalHandler );
*/
longjmp
(
check_env
,
sig
);
}
#endif
int
check
(
TestFunc
func
,
Type
eT
,
void
*
p
)
{
#ifdef USE_FORK_TO_CHECK
pid_t
nChild
=
fork
();
if
(
nChild
)
{
int
exitVal
;
wait
(
&
exitVal
);
if
(
exitVal
&
0xff
)
return
-
1
;
else
return
exitVal
>>
8
;
}
else
{
exit
(
func
(
eT
,
p
)
);
}
#else
int
result
;
bSignal
=
0
;
if
(
!
setjmp
(
check_env
)
)
{
signal
(
SIGSEGV
,
SignalHandler
);
#ifdef UNX
signal
(
SIGBUS
,
SignalHandler
);
#else
#endif
result
=
func
(
eT
,
p
);
signal
(
SIGSEGV
,
SIG_DFL
);
#ifdef UNX
signal
(
SIGBUS
,
SIG_DFL
);
#else
#endif
}
if
(
bSignal
)
return
-
1
;
else
return
0
;
#endif
}
#endif
int
GetAtAddress
(
Type
eT
,
void
*
p
)
{
switch
(
eT
)
{
case
t_char
:
return
*
((
char
*
)
p
);
case
t_short
:
return
*
((
short
*
)
p
);
case
t_int
:
return
*
((
int
*
)
p
);
case
t_long
:
return
*
((
long
*
)
p
);
case
t_double
:
return
*
((
double
*
)
p
);
}
abort
();
}
int
SetAtAddress
(
Type
eT
,
void
*
p
)
{
switch
(
eT
)
{
case
t_char
:
return
*
((
char
*
)
p
)
=
0
;
case
t_short
:
return
*
((
short
*
)
p
)
=
0
;
case
t_int
:
return
*
((
int
*
)
p
)
=
0
;
case
t_long
:
return
*
((
long
*
)
p
)
=
0
;
case
t_double
:
return
*
((
double
*
)
p
)
=
0
;
}
abort
();
}
char
*
TypeName
(
Type
eT
)
{
switch
(
eT
)
{
case
t_char
:
return
"char"
;
case
t_short
:
return
"short"
;
case
t_int
:
return
"int"
;
case
t_long
:
return
"long"
;
case
t_double
:
return
"double"
;
}
abort
();
}
int
CheckGetAccess
(
Type
eT
,
void
*
p
)
{
int
b
;
b
=
-
1
!=
check
(
(
TestFunc
)
GetAtAddress
,
eT
,
p
);
#if OSL_DEBUG_LEVEL > 1
fprintf
(
stderr
,
"%s read %s at %p
\n
"
,
(
b
?
"can"
:
"can not"
),
TypeName
(
eT
),
p
);
#endif
return
b
;
}
int
CheckSetAccess
(
Type
eT
,
void
*
p
)
{
int
b
;
b
=
-
1
!=
check
(
(
TestFunc
)
SetAtAddress
,
eT
,
p
);
#if OSL_DEBUG_LEVEL > 1
fprintf
(
stderr
,
"%s write %s at %p
\n
"
,
(
b
?
"can"
:
"can not"
),
TypeName
(
eT
),
p
);
#endif
return
b
;
}
int
GetAlignment
(
Type
eT
)
{
char
a
[
16
*
8
];
int
p
=
(
int
)(
void
*
)
&
a
;
int
i
;
p
=
(
p
+
0xF
)
&
~
0xF
;
for
(
i
=
1
;
i
<
16
;
i
++
)
if
(
CheckGetAccess
(
eT
,
(
void
*
)(
p
+
i
)
)
)
return
i
;
return
0
;
}
int
CheckCharAccess
(
char
*
p
)
{
if
(
CheckGetAccess
(
t_char
,
p
)
)
printf
(
"can read address %p
\n
"
,
p
);
else
printf
(
"can not read address %p
\n
"
,
p
);
if
(
CheckSetAccess
(
t_char
,
p
)
)
printf
(
"can write address %p
\n
"
,
p
);
else
printf
(
"can not write address %p
\n
"
,
p
);
return
0
;
}
struct
Description
{
int
bBigEndian
;
int
bStackGrowsDown
;
int
nStackAlignment
;
int
nAlignment
[
3
];
/* 2,4,8 */
};
void
Description_Ctor
(
struct
Description
*
pThis
)
{
pThis
->
bBigEndian
=
IsBigEndian
();
pThis
->
bStackGrowsDown
=
IsStackGrowingDown
();
pThis
->
nStackAlignment
=
GetStackAlignment
();
if
(
sizeof
(
short
)
!=
2
)
abort
();
pThis
->
nAlignment
[
0
]
=
GetAlignment
(
t_short
);
if
(
sizeof
(
int
)
!=
4
)
abort
();
pThis
->
nAlignment
[
1
]
=
GetAlignment
(
t_int
);
if
(
sizeof
(
double
)
!=
8
)
abort
();
pThis
->
nAlignment
[
2
]
=
GetAlignment
(
t_double
);
}
void
Description_Print
(
struct
Description
*
pThis
,
char
*
name
)
{
int
i
;
FILE
*
f
=
fopen
(
name
,
"w"
);
fprintf
(
f
,
"#define __%s
\n
"
,
pThis
->
bBigEndian
?
"BIGENDIAN"
:
"LITTLEENDIAN"
);
for
(
i
=
0
;
i
<
3
;
i
++
)
fprintf
(
f
,
"#define __ALIGNMENT%d
\t
%d
\n
"
,
1
<<
(
i
+
1
),
pThis
->
nAlignment
[
i
]
);
fprintf
(
f
,
"#define __STACKALIGNMENT wird nicht benutzt
\t
%d
\n
"
,
pThis
->
nStackAlignment
);
fprintf
(
f
,
"#define __STACKDIRECTION
\t
%d
\n
"
,
pThis
->
bStackGrowsDown
?
-
1
:
1
);
fprintf
(
f
,
"#define __SIZEOFCHAR
\t
%d
\n
"
,
sizeof
(
char
)
);
fprintf
(
f
,
"#define __SIZEOFSHORT
\t
%d
\n
"
,
sizeof
(
short
)
);
fprintf
(
f
,
"#define __SIZEOFINT
\t
%d
\n
"
,
sizeof
(
int
)
);
fprintf
(
f
,
"#define __SIZEOFLONG
\t
%d
\n
"
,
sizeof
(
long
)
);
fprintf
(
f
,
"#define __SIZEOFPOINTER
\t
%d
\n
"
,
sizeof
(
void
*
)
);
fprintf
(
f
,
"#define __SIZEOFDOUBLE
\t
%d
\n
"
,
sizeof
(
double
)
);
fprintf
(
f
,
"#define __IEEEDOUBLE
\n
"
);
fprintf
(
f
,
"#define _SOLAR_NODESCRIPTION
\n
"
);
fclose
(
f
);
}
int
SAL_CALL
main
(
int
argc
,
char
*
argv
[]
)
{
printTypeSign
(
char
,
"char"
);
printTypeSign
(
short
,
"short"
);
printTypeSign
(
int
,
"int"
);
printTypeSign
(
long
,
"long"
);
printTypeSize
(
char
,
"char"
);
printTypeSize
(
short
,
"short"
);
printTypeSize
(
int
,
"int"
);
printTypeSize
(
long
,
"long"
);
printTypeSize
(
float
,
"float"
);
printTypeSize
(
double
,
"double"
);
printTypeSize
(
void
*
,
"void *"
);
if
(
IsBigEndian
()
)
printf
(
"BIGENDIAN (Sparc, MC680x0, RS6000)
\n
"
);
else
printf
(
"LITTLEENDIAN (Intel, VAX, PowerPC)
\n
"
);
if
(
IsStackGrowingDown
()
)
printf
(
"Stack waechst nach unten
\n
"
);
else
printf
(
"Stack waechst nach oben
\n
"
);
printf
(
"STACKALIGNMENT : %d
\n
"
,
GetStackAlignment
()
);
PrintArgs
(
1
,
2
,
3
,
4
,
5
,
6
,
7
,
8
,
9
,
0
);
{
char
a
[
64
];
int
i
=
56
;
do
{
printf
(
"Zugriff long auf %i-Aligned Adresse : "
,
i
/
7
);
printf
(
(
CheckGetAccess
(
t_long
,
(
long
*
)
&
a
[
i
]
)
?
"OK
\n
"
:
"ERROR
\n
"
)
);
i
>>=
1
;
}
while
(
i
>=
7
);
}
{
char
a
[
64
];
int
i
=
56
;
do
{
printf
(
"Zugriff double auf %i-Aligned Adresse : "
,
i
/
7
);
printf
(
(
CheckGetAccess
(
t_double
,
(
double
*
)
&
a
[
i
]
)
?
"OK
\n
"
:
"ERROR
\n
"
)
);
i
>>=
1
;
}
while
(
i
>=
7
);
}
{
char
*
p
=
NULL
;
CheckCharAccess
(
p
);
p
=
(
char
*
)
&
p
;
CheckCharAccess
(
p
);
}
if
(
argc
>
1
)
{
struct
Description
description
;
Description_Ctor
(
&
description
);
Description_Print
(
&
description
,
argv
[
1
]
);
}
exit
(
0
);
return
0
;
}
/* vim:set shiftwidth=4 softtabstop=4 expandtab: */
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment