cleanups
Remove the custom malloc/free system Remove commit history from comment headers
This commit is contained in:
parent
96e325a259
commit
cb6929f773
181
cpp1.c
181
cpp1.c
@ -1,5 +1,5 @@
|
|||||||
/******************************************************************************
|
/******************************************************************************
|
||||||
Copyright (c) 1999 Daniel Stenberg
|
Copyright (c) 1993 - 2011 Daniel Stenberg
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
of this software and associated documentation files (the "Software"), to deal
|
||||||
@ -19,173 +19,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/******************************************************************************
|
|
||||||
* FREXXWARE
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Project: Frexx C Preprocessor
|
|
||||||
* $Source: /home/user/start/cpp/RCS/cpp1.c,v $
|
|
||||||
* $Revision: 1.8 $
|
|
||||||
* $Date: 1994/06/02 09:10:34 $
|
|
||||||
* $Author: start $
|
|
||||||
* $State: Exp $
|
|
||||||
* $Locker: $
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* $Log: cpp1.c,v $
|
|
||||||
* Revision 1.8 1994/06/02 09:10:34 start
|
|
||||||
* Made the function definition prinout to be more verbose
|
|
||||||
*
|
|
||||||
* Revision 1.7 1994/06/02 08:48:55 start
|
|
||||||
* Made the initial function routine work
|
|
||||||
* Added initial function exclusion list
|
|
||||||
* Added function names output
|
|
||||||
*
|
|
||||||
* Revision 1.6 1994/01/24 09:32:22 start
|
|
||||||
* Fixed the #line-option a bit.
|
|
||||||
*
|
|
||||||
* Revision 1.5 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.5 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.4 1993/12/02 15:10:56 start
|
|
||||||
* Lots of new features.
|
|
||||||
*
|
|
||||||
* Revision 1.3 1993/11/29 14:00:32 start
|
|
||||||
* new
|
|
||||||
*
|
|
||||||
* Revision 1.2 1993/11/11 07:16:39 start
|
|
||||||
* New stuff
|
|
||||||
*
|
|
||||||
* Revision 1.1 1993/11/03 09:13:08 start
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
/*
|
|
||||||
* CPP main program.
|
|
||||||
*
|
|
||||||
* Edit history
|
|
||||||
* 21-May-84 MM "Field test" release
|
|
||||||
* 23-May-84 MM Some minor hacks.
|
|
||||||
* 30-May-84 ARF Didn't get enough memory for __DATE__
|
|
||||||
* Added code to read stdin if no input
|
|
||||||
* files are provided.
|
|
||||||
* 29-Jun-84 MM Added ARF's suggestions, Unixifying cpp.
|
|
||||||
* 11-Jul-84 MM "Official" first release (that's what I thought!)
|
|
||||||
* 22-Jul-84 MM/ARF/SCK Fixed line number bugs, added cpp recognition
|
|
||||||
* of #line, fixed problems with #include.
|
|
||||||
* 23-Jul-84 MM More (minor) include hacking, some documentation.
|
|
||||||
* Also, redid cpp's #include files
|
|
||||||
* 25-Jul-84 MM #line filename isn't used for #include searchlist
|
|
||||||
* #line format is <number> <optional name>
|
|
||||||
* 25-Jul-84 ARF/MM Various bugs, mostly serious. Removed homemade doprint
|
|
||||||
* 01-Aug-84 MM Fixed recursion bug, remove extra newlines and
|
|
||||||
* leading whitespace from cpp output.
|
|
||||||
* 02-Aug-84 MM Hacked (i.e. optimized) out blank lines and unneeded
|
|
||||||
* whitespace in general. Cleaned up unget()'s.
|
|
||||||
* 03-Aug-84 Keie Several bug fixes from Ed Keizer, Vrije Universitet.
|
|
||||||
* -- corrected arg. count in -D and pre-defined
|
|
||||||
* macros. Also, allow \n inside macro actual parameter
|
|
||||||
* lists.
|
|
||||||
* 06-Aug-84 MM If debugging, dump the preset vector at startup.
|
|
||||||
* 12-Aug-84 MM/SCK Some small changes from Sam Kendall
|
|
||||||
* 15-Aug-84 Keie/MM cerror, cwarn, etc. take a single string arg.
|
|
||||||
* cierror, etc. take a single int. arg.
|
|
||||||
* changed LINE_PREFIX slightly so it can be
|
|
||||||
* changed in the makefile.
|
|
||||||
* 31-Aug-84 MM USENET net.sources release.
|
|
||||||
* 7-Sep-84 SCH/ado Lint complaints
|
|
||||||
* 10-Sep-84 Keie Char's can't be signed in some implementations
|
|
||||||
* 11-Sep-84 ado Added -C flag, pathological line number fix
|
|
||||||
* 13-Sep-84 ado Added -E flag (does nothing) and "-" file for stdin.
|
|
||||||
* 14-Sep-84 MM Allow # 123 as a synonym for #line 123
|
|
||||||
* 19-Sep-84 MM scanid always reads to token, make sure #line is
|
|
||||||
* written to a new line, even if -C switch given.
|
|
||||||
* Also, cpp - - reads stdin, writes stdout.
|
|
||||||
* 03-Oct-84 ado/MM Several changes to line counting and keepcomments
|
|
||||||
* stuff. Also a rewritten control() hasher -- much
|
|
||||||
* simpler and no less "perfect". Note also changes
|
|
||||||
* in cpp3.c to fix numeric scanning.
|
|
||||||
* 04-Oct-84 MM Added recognition of macro formal parameters if
|
|
||||||
* they are the only thing in a string, per the
|
|
||||||
* draft standard.
|
|
||||||
* 08-Oct-84 MM One more attack on scannumber
|
|
||||||
* 15-Oct-84 MM/ado Added -N to disable predefined symbols. Fixed
|
|
||||||
* linecount if COMMENT_INVISIBLE enabled.
|
|
||||||
* 22-Oct-84 MM Don't evaluate the #if/#ifdef argument if
|
|
||||||
* compilation is supressed. This prevents
|
|
||||||
* unnecessary error messages in sequences such as
|
|
||||||
* #ifdef FOO -- undefined
|
|
||||||
* #if FOO == 10 -- shouldn't print warning
|
|
||||||
* 25-Oct-84 MM Fixed bug in false ifdef supression. On vms,
|
|
||||||
* #include <foo> should open foo.h -- this duplicates
|
|
||||||
* the behavior of Vax-C
|
|
||||||
* 31-Oct-84 ado/MM Parametized $ in indentifiers. Added a better
|
|
||||||
* token concatenator and took out the trial
|
|
||||||
* concatenation code. Also improved #ifdef code
|
|
||||||
* and cleaned up the macro recursion tester.
|
|
||||||
* 2-Nov-84 MM/ado Some bug fixes in token concatenation, also
|
|
||||||
* a variety of minor (uninteresting) hacks.
|
|
||||||
* 6-Nov-84 MM Happy Birthday. Broke into 4 files and added
|
|
||||||
* #if sizeof (basic_types)
|
|
||||||
* 9-Nov-84 MM Added -S* for pointer type sizes
|
|
||||||
* 13-Nov-84 MM Split cpp1.c, added vms defaulting
|
|
||||||
* 23-Nov-84 MM/ado -E supresses error exit, added CPP_INCLUDE,
|
|
||||||
* fixed strncpy bug.
|
|
||||||
* 3-Dec-84 ado/MM Added OLD_PREPROCESSOR
|
|
||||||
* 7-Dec-84 MM Stuff in Nov 12 Draft Standard
|
|
||||||
* 17-Dec-84 george Fixed problems with recursive macros
|
|
||||||
* 17-Dec-84 MM Yet another attack on #if's (f/t)level removed.
|
|
||||||
* 07-Jan-85 ado Init defines before doing command line options
|
|
||||||
* so -Uunix works.
|
|
||||||
* 21-Oct-85 RMS Rename `token' to `tokenbuf'.
|
|
||||||
* Allocate it dynamically, with size in `tokenbsize'.
|
|
||||||
* 23-Oct-85 RMS Do not print message about number of errors.
|
|
||||||
* 14-Mar-85 FNF Incorporate macro based C debugging package.
|
|
||||||
* Port to Commodore AMIGA.
|
|
||||||
* 20-Aug-88 Ois Changed format of documentation.
|
|
||||||
* Feb-93 DST
|
|
||||||
|
|
||||||
Daniel Stenberg. Started enhancing the `cpp' in February 1993:
|
|
||||||
|
|
||||||
o Allows C++ comments.
|
|
||||||
o Ported to ANSI C and to SAS/C 6.0.
|
|
||||||
o Changed entire indent- and statement- layout previously used!
|
|
||||||
o Changed hash sizing to any-number-hash-size.
|
|
||||||
o Removed every global variable.
|
|
||||||
o Made the cpp startable by creating a taglist and call the cpp.
|
|
||||||
o Made a shared library of it, called FPP: "Frexx PreProcessor"
|
|
||||||
o Changed the amiga version to use realloc().
|
|
||||||
o Removed all VMS defines. Who wants such?
|
|
||||||
o Changed it from Public Domain to Freeware.
|
|
||||||
o Moved out the include directory assigning to only be a part of
|
|
||||||
the taglist and _no_ internal at all!
|
|
||||||
o Made `fpp' accept input from a user specified function instead
|
|
||||||
of always the stdin stream. This makes it possible to preprocess
|
|
||||||
almost anything. An output routine is also implemented.
|
|
||||||
o I have discovered that this program needs a lot of re-writing
|
|
||||||
since a amiga shared library can't exit() as this `cpp'
|
|
||||||
does on a fatal error... I made all necessary changes! Now most functions
|
|
||||||
leave a return code telling success/failure (*MAJOR* re-writing! :-().
|
|
||||||
o The original 50-60 gotos in the source codes have been decreased
|
|
||||||
to only a few. I *HATE* gotos in C programs!
|
|
||||||
o Changed all cwarn(), cerror() cfatal(), ciwarn(), cierror() functions to
|
|
||||||
the one and all function `cerror()', which will accept a variable number
|
|
||||||
of arguments to build message from.
|
|
||||||
o Moved all error/warning/fatal texts to domsg().
|
|
||||||
o All error output can be received in the error function (and have to in the
|
|
||||||
amiga library version!).
|
|
||||||
o Found out that my test.c caused 53 malloc() but only 25 free()... Inserted
|
|
||||||
my own Malloc(), Free(), FreeAll() and Realloc() to always remove alloced
|
|
||||||
memory when finishing the preprocessing (ok, malloc/free does that for us,
|
|
||||||
but I don't want to use/depend on them).
|
|
||||||
o Compiling into a shared library under AmigaDos still needs some changes.
|
|
||||||
fopen() and other similar function in SAS/C use symbols I don't want it
|
|
||||||
to... eg. _ProgramName and _XCEXIT!
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
@ -211,7 +44,7 @@ int PREFIX fppPreProcess(REG(a0) struct fppTag *tags)
|
|||||||
ReturnCode ret; /* cpp return code */
|
ReturnCode ret; /* cpp return code */
|
||||||
struct Global *global;
|
struct Global *global;
|
||||||
|
|
||||||
global=(struct Global *)Malloc(sizeof(struct Global));
|
global=(struct Global *)malloc(sizeof(struct Global));
|
||||||
if(!global)
|
if(!global)
|
||||||
return(FPP_OUT_OF_MEMORY);
|
return(FPP_OUT_OF_MEMORY);
|
||||||
|
|
||||||
@ -311,8 +144,6 @@ int PREFIX fppPreProcess(REG(a0) struct fppTag *tags)
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
fclose(stdout);
|
fclose(stdout);
|
||||||
|
|
||||||
FreeAll(); /* free all unfreed memory! */
|
|
||||||
|
|
||||||
if (global->errors > 0 && !global->eflag)
|
if (global->errors > 0 && !global->eflag)
|
||||||
return(IO_ERROR);
|
return(IO_ERROR);
|
||||||
return(IO_NORMAL); /* No errors or -E option set */
|
return(IO_NORMAL); /* No errors or -E option set */
|
||||||
@ -348,17 +179,17 @@ ReturnCode cppmain(struct Global *global)
|
|||||||
|
|
||||||
/* Initialize for reading tokens */
|
/* Initialize for reading tokens */
|
||||||
global->tokenbsize = 50;
|
global->tokenbsize = 50;
|
||||||
global->tokenbuf = Getmem(global, global->tokenbsize + 1);
|
global->tokenbuf = malloc(global->tokenbsize + 1);
|
||||||
if(!global->tokenbuf)
|
if(!global->tokenbuf)
|
||||||
return(FPP_OUT_OF_MEMORY);
|
return(FPP_OUT_OF_MEMORY);
|
||||||
|
|
||||||
global->functionname = Getmem(global, global->tokenbsize + 1);
|
global->functionname = malloc(global->tokenbsize + 1);
|
||||||
if(!global->functionname)
|
if(!global->functionname)
|
||||||
return(FPP_OUT_OF_MEMORY);
|
return(FPP_OUT_OF_MEMORY);
|
||||||
global->functionname[0] = '\0';
|
global->functionname[0] = '\0';
|
||||||
|
|
||||||
if(global->showspace) {
|
if(global->showspace) {
|
||||||
global->spacebuf = (char *)Getmem(global, MAX_SPACE_SIZE);
|
global->spacebuf = (char *)malloc(MAX_SPACE_SIZE);
|
||||||
if(!global->spacebuf)
|
if(!global->spacebuf)
|
||||||
return(FPP_OUT_OF_MEMORY);
|
return(FPP_OUT_OF_MEMORY);
|
||||||
}
|
}
|
||||||
@ -747,7 +578,7 @@ void sharp(struct Global *global)
|
|||||||
if (global->sharpfilename == NULL
|
if (global->sharpfilename == NULL
|
||||||
|| (global->sharpfilename != NULL && !streq(name, global->sharpfilename))) {
|
|| (global->sharpfilename != NULL && !streq(name, global->sharpfilename))) {
|
||||||
if (global->sharpfilename != NULL)
|
if (global->sharpfilename != NULL)
|
||||||
Freemem(global->sharpfilename);
|
free(global->sharpfilename);
|
||||||
global->sharpfilename = savestring(global, name);
|
global->sharpfilename = savestring(global, name);
|
||||||
/* printf(" \"%s\"", name); */
|
/* printf(" \"%s\"", name); */
|
||||||
Putstring(global, " \"");
|
Putstring(global, " \"");
|
||||||
|
56
cpp2.c
56
cpp2.c
@ -19,60 +19,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/******************************************************************************
|
|
||||||
* FREXXWARE
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Project: Frexx C Preprocessor
|
|
||||||
* $Source: /home/user/start/cpp/RCS/cpp2.c,v $
|
|
||||||
* $Revision: 1.5 $
|
|
||||||
* $Date: 1994/01/24 09:32:54 $
|
|
||||||
* $Author: start $
|
|
||||||
* $State: Exp $
|
|
||||||
* $Locker: start $
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* $Log: cpp2.c,v $
|
|
||||||
* Revision 1.5 1994/01/24 09:32:54 start
|
|
||||||
* Fixed AmigaDOS include file routine.
|
|
||||||
*
|
|
||||||
* Revision 1.4 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.4 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.3 1993/11/29 14:00:32 start
|
|
||||||
* new
|
|
||||||
*
|
|
||||||
* Revision 1.2 1993/11/11 07:16:39 start
|
|
||||||
* New stuff
|
|
||||||
*
|
|
||||||
* Revision 1.1 1993/11/03 09:13:08 start
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
/*
|
|
||||||
* C P P 2 . C
|
|
||||||
*
|
|
||||||
* Process #control lines
|
|
||||||
*
|
|
||||||
* Edit history
|
|
||||||
* 13-Nov-84 MM Split from cpp1.c
|
|
||||||
* 21-Oct-85 RMS Do not turn on `instring' while reading #include arg.
|
|
||||||
* Rename `token' to `tokenbuf'.
|
|
||||||
* Flush tabs at end of #include line, like spaces.
|
|
||||||
* 14-Mar-86 FNF Incorporate macro based C debugging package.
|
|
||||||
* Port to Commodore AMIGA.
|
|
||||||
* 25-May-86 FNF Change handling of fully qualified include file
|
|
||||||
* pathnames (like "/usr/include/stdio.h" for unix,
|
|
||||||
* or "df0:include/stdio.h" for the Amiga) to be
|
|
||||||
* used verbatum in the first open attempt.
|
|
||||||
* 20-Aug-88 Ois Added #error. Passed unrecognized # commands.
|
|
||||||
* Added \n when those lines are passed.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "cppdef.h"
|
#include "cppdef.h"
|
||||||
@ -292,7 +238,7 @@ ReturnCode control( struct Global *global,
|
|||||||
|
|
||||||
if( global->infile->progname != NULL )
|
if( global->infile->progname != NULL )
|
||||||
/* Give up the old name if it's allocated. */
|
/* Give up the old name if it's allocated. */
|
||||||
Freemem( global->infile->progname );
|
free( global->infile->progname );
|
||||||
|
|
||||||
global->infile->progname = savestring( global, tp );
|
global->infile->progname = savestring( global, tp );
|
||||||
}
|
}
|
||||||
|
54
cpp3.c
54
cpp3.c
@ -19,56 +19,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/******************************************************************************
|
|
||||||
* FREXXWARE
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Project: Frexx C Preprocessor
|
|
||||||
* $Source: /home/user/start/cpp/RCS/cpp3.c,v $
|
|
||||||
* $Revision: 1.6 $
|
|
||||||
* $Date: 1994/06/02 08:50:08 $
|
|
||||||
* $Author: start $
|
|
||||||
* $State: Exp $
|
|
||||||
* $Locker: $
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* $Log: cpp3.c,v $
|
|
||||||
* Revision 1.6 1994/06/02 08:50:08 start
|
|
||||||
* Added the new command line options
|
|
||||||
*
|
|
||||||
* Revision 1.5 1994/01/24 09:33:15 start
|
|
||||||
* Added the FPPTAG_RIGHTCONCAT tag.
|
|
||||||
*
|
|
||||||
* Revision 1.4 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.4 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.3 1993/11/29 14:00:32 start
|
|
||||||
* new
|
|
||||||
*
|
|
||||||
* Revision 1.2 1993/11/11 07:16:39 start
|
|
||||||
* New stuff
|
|
||||||
*
|
|
||||||
* Revision 1.1 1993/11/03 09:13:08 start
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
/*
|
|
||||||
* C P P 3 . C
|
|
||||||
*
|
|
||||||
* File open and command line options
|
|
||||||
*
|
|
||||||
* Edit history
|
|
||||||
* 13-Nov-84 MM Split from cpp1.c
|
|
||||||
* 21-Oct-85 rms Make -g command arg not cause an error.
|
|
||||||
* 14-Mar-86 FNF Incorporate macro based C debugging package.
|
|
||||||
* Port to the Commodore AMIGA.
|
|
||||||
* 20-Aug-88 Ois Added __TIME__, and changed __DATE__ to standard.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <time.h> /*OIS*0.92*/
|
#include <time.h> /*OIS*0.92*/
|
||||||
@ -376,7 +326,7 @@ ReturnCode initdefines(struct Global *global)
|
|||||||
* Define __DATE__ as today's date.
|
* Define __DATE__ as today's date.
|
||||||
*/
|
*/
|
||||||
dp = defendel(global, "__DATE__", FALSE);
|
dp = defendel(global, "__DATE__", FALSE);
|
||||||
tp = Getmem(global, 14);
|
tp = malloc(14);
|
||||||
if(!tp || !dp)
|
if(!tp || !dp)
|
||||||
return(FPP_OUT_OF_MEMORY);
|
return(FPP_OUT_OF_MEMORY);
|
||||||
dp->repl = tp;
|
dp->repl = tp;
|
||||||
@ -392,7 +342,7 @@ ReturnCode initdefines(struct Global *global)
|
|||||||
* Define __TIME__ as this moment's time.
|
* Define __TIME__ as this moment's time.
|
||||||
*/
|
*/
|
||||||
dp = defendel(global, "__TIME__", FALSE);
|
dp = defendel(global, "__TIME__", FALSE);
|
||||||
tp = Getmem(global, 11);
|
tp = malloc(11);
|
||||||
if(!tp || !dp)
|
if(!tp || !dp)
|
||||||
return(FPP_OUT_OF_MEMORY);
|
return(FPP_OUT_OF_MEMORY);
|
||||||
dp->repl = tp;
|
dp->repl = tp;
|
||||||
|
49
cpp4.c
49
cpp4.c
@ -19,53 +19,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/******************************************************************************
|
|
||||||
* FREXXWARE
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Project: Frexx C Preprocessor
|
|
||||||
* $Source: /home/user/start/cpp/RCS/cpp4.c,v $
|
|
||||||
* $Revision: 1.3 $
|
|
||||||
* $Date: 1994/06/02 08:50:52 $
|
|
||||||
* $Author: start $
|
|
||||||
* $State: Exp $
|
|
||||||
* $Locker: $
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* $Log: cpp4.c,v $
|
|
||||||
* Revision 1.3 1994/06/02 08:50:52 start
|
|
||||||
* Changed a few things to make the initial function routine to run
|
|
||||||
*
|
|
||||||
* Revision 1.2 1994/01/24 09:34:03 start
|
|
||||||
* Made a bunch of functions FILE_LOCAL and INLINE.
|
|
||||||
*
|
|
||||||
* Revision 1.1 1993/11/03 09:13:08 start
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
/*
|
|
||||||
* C P P 4 . C
|
|
||||||
* M a c r o D e f i n i t i o n s
|
|
||||||
*
|
|
||||||
* Edit History
|
|
||||||
* 31-Aug-84 MM USENET net.sources release
|
|
||||||
* 04-Oct-84 MM __LINE__ and __FILE__ must call ungetstring()
|
|
||||||
* so they work correctly with token concatenation.
|
|
||||||
* Added string formal recognition.
|
|
||||||
* 25-Oct-84 MM "Short-circuit" evaluate #if's so that we
|
|
||||||
* don't print unnecessary error messages for
|
|
||||||
* #if !defined(FOO) && FOO != 0 && 10 / FOO ...
|
|
||||||
* 31-Oct-84 ado/MM Added token concatenation
|
|
||||||
* 6-Nov-84 MM Split off eval stuff
|
|
||||||
* 21-Oct-85 RMS Rename `token' to `tokenbuf'.
|
|
||||||
* In doundef, don't complain if arg already not defined.
|
|
||||||
* 14-Mar-86 FNF Incorporate macro based C debugging package.
|
|
||||||
* Port to Commodore AMIGA.
|
|
||||||
* 21-Aug-88 Ois Changed concatenation operator to ##. Changed hand-
|
|
||||||
* ling of tokens following ##. Added new meaning of #.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "cppdef.h"
|
#include "cppdef.h"
|
||||||
@ -265,7 +218,7 @@ ReturnCode dodefine(struct Global *global)
|
|||||||
cerror(global, ERROR_REDEFINE, dp->name);
|
cerror(global, ERROR_REDEFINE, dp->name);
|
||||||
}
|
}
|
||||||
if (old != NULL) /* We don't need the */
|
if (old != NULL) /* We don't need the */
|
||||||
Freemem(old); /* old definition now. */
|
free(old); /* old definition now. */
|
||||||
}
|
}
|
||||||
return(FPP_OK);
|
return(FPP_OK);
|
||||||
}
|
}
|
||||||
|
44
cpp5.c
44
cpp5.c
@ -19,50 +19,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/******************************************************************************
|
|
||||||
* FREXXWARE
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Project: Frexx C Preprocessor
|
|
||||||
* $Source: /home/user/start/cpp/RCS/cpp5.c,v $
|
|
||||||
* $Revision: 1.2 $
|
|
||||||
* $Date: 1994/01/24 09:35:02 $
|
|
||||||
* $Author: start $
|
|
||||||
* $State: Exp $
|
|
||||||
* $Locker: $
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* $Log: cpp5.c,v $
|
|
||||||
* Revision 1.2 1994/01/24 09:35:02 start
|
|
||||||
* Made a bunch of functions FILE_LOCAL and INLINE.
|
|
||||||
*
|
|
||||||
* Revision 1.1 1993/11/03 09:13:08 start
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
/*
|
|
||||||
* C P P 5 . C
|
|
||||||
* E x p r e s s i o n E v a l u a t i o n
|
|
||||||
*
|
|
||||||
* Edit History
|
|
||||||
* 31-Aug-84 MM USENET net.sources release
|
|
||||||
* 04-Oct-84 MM __LINE__ and __FILE__ must call ungetstring()
|
|
||||||
* so they work correctly with token concatenation.
|
|
||||||
* Added string formal recognition.
|
|
||||||
* 25-Oct-84 MM "Short-circuit" evaluate #if's so that we
|
|
||||||
* don't print unnecessary error messages for
|
|
||||||
* #if !defined(FOO) && FOO != 0 && 10 / FOO ...
|
|
||||||
* 31-Oct-84 ado/MM Added token concatenation
|
|
||||||
* 6-Nov-84 MM Split from #define stuff, added sizeof stuff
|
|
||||||
* 19-Nov-84 ado #if error returns TRUE for (sigh) compatibility
|
|
||||||
* 21-Oct-85 RMS Rename `token' to `tokenbuf'
|
|
||||||
* 23-Oct-85 RMS Treat undefined symbols as having value zero.
|
|
||||||
* 14-Mar-86 FNF Incorporate macro based C debugging package.
|
|
||||||
* Port to Commodore Amiga.
|
|
||||||
* 20-Aug-88 Ois Conditionally compile sizeof stuff.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "cppdef.h"
|
#include "cppdef.h"
|
||||||
|
121
cpp6.c
121
cpp6.c
@ -19,69 +19,6 @@ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
||||||
SOFTWARE.
|
SOFTWARE.
|
||||||
******************************************************************************/
|
******************************************************************************/
|
||||||
/******************************************************************************
|
|
||||||
* FREXXWARE
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Project: Frexx C Preprocessor
|
|
||||||
* $Source: /home/user/start/cpp/RCS/cpp6.c,v $
|
|
||||||
* $Revision: 1.5 $
|
|
||||||
* $Date: 1994/01/24 09:35:17 $
|
|
||||||
* $Author: start $
|
|
||||||
* $State: Exp $
|
|
||||||
* $Locker: $
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* $Log: cpp6.c,v $
|
|
||||||
* Revision 1.5 1994/01/24 09:35:17 start
|
|
||||||
* Made the FPPTAG_RIGHTCONCAT work.
|
|
||||||
*
|
|
||||||
* Revision 1.4 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.4 1993/12/06 13:50:39 start
|
|
||||||
* A lot of new stuff (too much to mention)
|
|
||||||
*
|
|
||||||
* Revision 1.3 1993/11/29 14:00:32 start
|
|
||||||
* new
|
|
||||||
*
|
|
||||||
* Revision 1.2 1993/11/11 07:16:39 start
|
|
||||||
* New stuff
|
|
||||||
*
|
|
||||||
* Revision 1.1 1993/11/03 09:13:08 start
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
/*
|
|
||||||
* C P P 6 . C
|
|
||||||
* S u p p o r t R o u t i n e s
|
|
||||||
*
|
|
||||||
* Edit History
|
|
||||||
* 25-May-84 MM Added 8-bit support to type table.
|
|
||||||
* 30-May-84 ARF sharp() should output filename in quotes
|
|
||||||
* 02-Aug-84 MM Newline and #line hacking. sharp() now in cpp1.c
|
|
||||||
* 31-Aug-84 MM USENET net.sources release
|
|
||||||
* 11-Sep-84 ado/MM Keepcomments, also line number pathological
|
|
||||||
* 12-Sep-84 ado/MM bug if comment changes to space and we unget later.
|
|
||||||
* 03-Oct-84 gkr/MM Fixed scannumber bug for '.e' (as in struct.element).
|
|
||||||
* 04-Oct-84 MM Added ungetstring() for token concatenation
|
|
||||||
* 08-Oct-84 MM Yet another attack on number scanning
|
|
||||||
* 31-Oct-84 ado Parameterized $ in identifiers
|
|
||||||
* 2-Nov-84 MM Token concatenation is messier than I thought
|
|
||||||
* 6-Dec-84 MM \<nl> is everywhere invisible.
|
|
||||||
* 21-Oct-85 RMS Rename `token' to `tokenbuf'.
|
|
||||||
* Dynamically allocate it, and make it as big as needed.
|
|
||||||
* 23-Oct-85 RMS Fix bugs storing into tokenbuf as it gets bigger.
|
|
||||||
* Change error msg to cpp: "FILE", line LINE: MSG
|
|
||||||
* 24-Oct-85 RMS Turn off warnings about / then * inside a comment.
|
|
||||||
* 16-Mar-86 FNF Incorporate macro based C debugging package.
|
|
||||||
* Port to Commodore Amiga.
|
|
||||||
* 20-Aug-88 Ois Added time routines (or actually deleted stubs).
|
|
||||||
* 20-Aug-88 Ois Changed handling of token following ## to match Cpp4.
|
|
||||||
* 16-Feb-93 DSt Changed case of getmem() to Getmem().
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include "cppdef.h"
|
#include "cppdef.h"
|
||||||
@ -232,7 +169,7 @@ void scanid(struct Global *global,
|
|||||||
do
|
do
|
||||||
{
|
{
|
||||||
if (ct == global->tokenbsize)
|
if (ct == global->tokenbsize)
|
||||||
global->tokenbuf = incmem (global, global->tokenbuf, 1 +
|
global->tokenbuf = realloc(global->tokenbuf, 1 +
|
||||||
(global->tokenbsize *= 2));
|
(global->tokenbsize *= 2));
|
||||||
global->tokenbuf[ct++] = c;
|
global->tokenbuf[ct++] = c;
|
||||||
c = get(global);
|
c = get(global);
|
||||||
@ -327,7 +264,7 @@ int catenate(struct Global *global, ReturnCode *ret)
|
|||||||
* new (concatenated) token after freeing token1.
|
* new (concatenated) token after freeing token1.
|
||||||
* Finally, setup to read the new token.
|
* Finally, setup to read the new token.
|
||||||
*/
|
*/
|
||||||
Freemem(token1); /* Free up memory */
|
free(token1); /* Free up memory */
|
||||||
*ret=ungetstring(global, global->work); /* Unget the new thing, */
|
*ret=ungetstring(global, global->work); /* Unget the new thing, */
|
||||||
if(*ret)
|
if(*ret)
|
||||||
return(FALSE);
|
return(FALSE);
|
||||||
@ -545,8 +482,7 @@ char *savestring(struct Global *global, char *text)
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
char *result;
|
char *result;
|
||||||
|
result = malloc(strlen(text) + 1);
|
||||||
result = Getmem(global, strlen(text) + 1);
|
|
||||||
strcpy(result, text);
|
strcpy(result, text);
|
||||||
return (result);
|
return (result);
|
||||||
}
|
}
|
||||||
@ -569,7 +505,7 @@ ReturnCode getfile(struct Global *global,
|
|||||||
size = strlen(name);
|
size = strlen(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
*file = (FILEINFO *) Getmem(global, (int)(sizeof (FILEINFO) + bufsize + size));
|
*file = (FILEINFO *) malloc((int)(sizeof (FILEINFO) + bufsize + size));
|
||||||
if(!*file)
|
if(!*file)
|
||||||
return(FPP_OUT_OF_MEMORY);
|
return(FPP_OUT_OF_MEMORY);
|
||||||
(*file)->parent = global->infile; /* Chain files together */
|
(*file)->parent = global->infile; /* Chain files together */
|
||||||
@ -587,41 +523,6 @@ ReturnCode getfile(struct Global *global,
|
|||||||
return(FPP_OK); /* All done. */
|
return(FPP_OK); /* All done. */
|
||||||
}
|
}
|
||||||
|
|
||||||
void Freemem(void *ptr)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Free a block of memory!
|
|
||||||
*/
|
|
||||||
|
|
||||||
Free(ptr);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
char *Getmem(struct Global *global, int size)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Get a block of free memory.
|
|
||||||
*/
|
|
||||||
|
|
||||||
char *result;
|
|
||||||
if ((result = (char *)Malloc((unsigned) size)) == NULL)
|
|
||||||
cfatal(global, FATAL_OUT_OF_MEMORY);
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
FILE_LOCAL
|
|
||||||
char *incmem(struct Global *global, char *obj, int size)
|
|
||||||
{
|
|
||||||
/*
|
|
||||||
* Get a block of free memory.
|
|
||||||
*/
|
|
||||||
|
|
||||||
char *result;
|
|
||||||
if ((result = Realloc(obj, (unsigned) size)) == NULL)
|
|
||||||
cfatal(global, FATAL_OUT_OF_MEMORY);
|
|
||||||
return(result);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* C P P S y m b o l T a b l e s
|
* C P P S y m b o l T a b l e s
|
||||||
*/
|
*/
|
||||||
@ -646,7 +547,7 @@ DEFBUF *lookid(struct Global *global,
|
|||||||
ct = 0;
|
ct = 0;
|
||||||
do {
|
do {
|
||||||
if (ct == global->tokenbsize)
|
if (ct == global->tokenbsize)
|
||||||
global->tokenbuf = incmem(global, global->tokenbuf, 1 + (global->tokenbsize *= 2));
|
global->tokenbuf = realloc(global->tokenbuf, 1 + (global->tokenbsize *= 2));
|
||||||
global->tokenbuf[ct++] = c; /* Store token byte */
|
global->tokenbuf[ct++] = c; /* Store token byte */
|
||||||
nhash += c; /* Update hash value */
|
nhash += c; /* Update hash value */
|
||||||
c = get(global);
|
c = get(global);
|
||||||
@ -697,15 +598,15 @@ DEFBUF *defendel(struct Global *global,
|
|||||||
else {
|
else {
|
||||||
*prevp = dp->link; /* Found, unlink and */
|
*prevp = dp->link; /* Found, unlink and */
|
||||||
if (dp->repl != NULL) /* Free the replacement */
|
if (dp->repl != NULL) /* Free the replacement */
|
||||||
Freemem(dp->repl); /* if any, and then */
|
free(dp->repl); /* if any, and then */
|
||||||
Freemem((char *) dp); /* Free the symbol */
|
free((char *) dp); /* Free the symbol */
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
prevp = &dp->link;
|
prevp = &dp->link;
|
||||||
}
|
}
|
||||||
if (!delete) {
|
if (!delete) {
|
||||||
dp = (DEFBUF *) Getmem(global, (int) (sizeof (DEFBUF) + size));
|
dp = (DEFBUF *) malloc((int) (sizeof (DEFBUF) + size));
|
||||||
dp->link = *prevp;
|
dp->link = *prevp;
|
||||||
*prevp = dp;
|
*prevp = dp;
|
||||||
dp->hash = nhash;
|
dp->hash = nhash;
|
||||||
@ -871,10 +772,10 @@ int get(struct Global *global)
|
|||||||
* Free up space used by the (finished) file or macro and
|
* Free up space used by the (finished) file or macro and
|
||||||
* restart input from the parent file/macro, if any.
|
* restart input from the parent file/macro, if any.
|
||||||
*/
|
*/
|
||||||
Freemem(file->filename); /* Free name and */
|
free(file->filename); /* Free name and */
|
||||||
if (file->progname != NULL) /* if a #line was seen, */
|
if (file->progname != NULL) /* if a #line was seen, */
|
||||||
Freemem(file->progname); /* free it, too. */
|
free(file->progname); /* free it, too. */
|
||||||
Freemem(file); /* Free file space */
|
free(file); /* Free file space */
|
||||||
if (global->infile == NULL) /* If at end of file */
|
if (global->infile == NULL) /* If at end of file */
|
||||||
return (EOF_CHAR); /* Return end of file */
|
return (EOF_CHAR); /* Return end of file */
|
||||||
global->line = global->infile->line; /* Reset line number */
|
global->line = global->infile->line; /* Reset line number */
|
||||||
|
4
makefile
4
makefile
@ -42,8 +42,8 @@ CFLAGS = $(DEBUGFLAG) $(DEFINES)
|
|||||||
AR = ar
|
AR = ar
|
||||||
ARFLAGS = rv
|
ARFLAGS = rv
|
||||||
.SUFFIXES: .o .c .c~ .h .h~ .a .i
|
.SUFFIXES: .o .c .c~ .h .h~ .a .i
|
||||||
OBJS = cpp1.o cpp2.o cpp3.o cpp4.o cpp5.o cpp6.o memory.o
|
OBJS = cpp1.o cpp2.o cpp3.o cpp4.o cpp5.o cpp6.o
|
||||||
FILEOBJS = cpp1.o cpp2.o cpp3.o cpp4.o cpp5.o cpp6.o memory.o usecpp.o
|
FILEOBJS = cpp1.o cpp2.o cpp3.o cpp4.o cpp5.o cpp6.o usecpp.o
|
||||||
|
|
||||||
# ** compile cpp
|
# ** compile cpp
|
||||||
#
|
#
|
||||||
|
214
memory.c
214
memory.c
@ -1,214 +0,0 @@
|
|||||||
/******************************************************************************
|
|
||||||
Copyright (c) 1999 Daniel Stenberg
|
|
||||||
|
|
||||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
||||||
of this software and associated documentation files (the "Software"), to deal
|
|
||||||
in the Software without restriction, including without limitation the rights
|
|
||||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
||||||
copies of the Software, and to permit persons to whom the Software is
|
|
||||||
furnished to do so, subject to the following conditions:
|
|
||||||
|
|
||||||
The above copyright notice and this permission notice shall be included in
|
|
||||||
all copies or substantial portions of the Software.
|
|
||||||
|
|
||||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
||||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
||||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
||||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
||||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
||||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
||||||
SOFTWARE.
|
|
||||||
******************************************************************************/
|
|
||||||
/******************************************************************************
|
|
||||||
* FREXXWARE
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
*
|
|
||||||
* Project: Frexx C Preprocessor
|
|
||||||
* $Source: /home/user/start/cpp/RCS/memory.c,v $
|
|
||||||
* $Revision: 1.2 $
|
|
||||||
* $Date: 1994/01/24 09:36:46 $
|
|
||||||
* $Author: start $
|
|
||||||
* $State: Exp $
|
|
||||||
* $Locker: $
|
|
||||||
*
|
|
||||||
* ----------------------------------------------------------------------------
|
|
||||||
* $Log: memory.c,v $
|
|
||||||
* Revision 1.2 1994/01/24 09:36:46 start
|
|
||||||
* Made it run with OS9 properly.
|
|
||||||
*
|
|
||||||
* Revision 1.1 1993/11/03 09:13:08 start
|
|
||||||
* Initial revision
|
|
||||||
*
|
|
||||||
*
|
|
||||||
*****************************************************************************/
|
|
||||||
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#if defined(OS9)
|
|
||||||
#include <types.h>
|
|
||||||
#elif defined(UNIX)
|
|
||||||
#include <sys/types.h>
|
|
||||||
#elif defined(AMIGA)
|
|
||||||
#include <exec/types.h>
|
|
||||||
#include <proto/exec.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
|
|
||||||
#include "memory.h"
|
|
||||||
#ifdef DEBUG
|
|
||||||
int mem;
|
|
||||||
int maxmem;
|
|
||||||
int malloc_count=0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* We have two mallockey pointers because we have two different kinds of
|
|
||||||
* Malloc()s! One for each execution and one for each fplInit().
|
|
||||||
*/
|
|
||||||
static struct MemInfo *MallocKey=NULL;
|
|
||||||
|
|
||||||
void *Realloc(void *ptr, int size)
|
|
||||||
{
|
|
||||||
struct MemInfo *point;
|
|
||||||
void *new;
|
|
||||||
/* `point' points to the MemInfo structure: */
|
|
||||||
point=(struct MemInfo *)((char *)ptr-sizeof(struct MemInfo));
|
|
||||||
|
|
||||||
if(size<=point->size)
|
|
||||||
/*
|
|
||||||
* To increase performance, don't care about reallocing
|
|
||||||
* to smaller sizes!
|
|
||||||
*/
|
|
||||||
return(ptr);
|
|
||||||
new=Malloc(size); /* allocate new storage */
|
|
||||||
if(!new)
|
|
||||||
return(NULL); /* fail! */
|
|
||||||
|
|
||||||
memcpy(new, ptr, point->size); /* copy contents */
|
|
||||||
|
|
||||||
Free(ptr); /* free old area */
|
|
||||||
|
|
||||||
return(new); /* return new pointer */
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void *Malloc(int size)
|
|
||||||
{
|
|
||||||
char *alloc;
|
|
||||||
struct MemInfo *point;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
size+=MEMORY_COOKIE; /* add extra bytes after the block! */
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AMIGA
|
|
||||||
alloc=(char *)AllocMem(size+sizeof(struct MemInfo), 0L);
|
|
||||||
#elif defined(UNIX)
|
|
||||||
alloc=(char *)malloc(size+sizeof(struct MemInfo));
|
|
||||||
#endif
|
|
||||||
|
|
||||||
if(!alloc)
|
|
||||||
return(NULL);
|
|
||||||
|
|
||||||
point=(struct MemInfo *)alloc;
|
|
||||||
point->prev=MallocKey; /* previous */
|
|
||||||
point->next=NULL; /* next */
|
|
||||||
point->size=size; /* size */
|
|
||||||
#ifdef DEBUG
|
|
||||||
malloc_count++;
|
|
||||||
mem+=size+sizeof(struct MemInfo);
|
|
||||||
if(mem>maxmem)
|
|
||||||
maxmem=mem;
|
|
||||||
|
|
||||||
memset((void *)((char *)point+sizeof(struct MemInfo)), 0xbb, size);
|
|
||||||
#endif
|
|
||||||
if(MallocKey)
|
|
||||||
point->prev->next=point;
|
|
||||||
|
|
||||||
MallocKey = (void *)point;
|
|
||||||
|
|
||||||
alloc = ((char *)point+sizeof(struct MemInfo));
|
|
||||||
return ((void *)alloc);
|
|
||||||
}
|
|
||||||
|
|
||||||
void Free(void *ptr)
|
|
||||||
{
|
|
||||||
struct MemInfo *point;
|
|
||||||
/* `point' points to the MemInfo structure: */
|
|
||||||
point=(struct MemInfo *)((char *)ptr-sizeof(struct MemInfo));
|
|
||||||
|
|
||||||
if(MallocKey==point) {
|
|
||||||
/* if this is the last Malloc, set `last' to `prev' */
|
|
||||||
MallocKey=point->prev;
|
|
||||||
if(MallocKey)
|
|
||||||
MallocKey->next=NULL;
|
|
||||||
} else {
|
|
||||||
/* point the previous' `next' to our `next', and our next `previous'
|
|
||||||
to our `previous'. Unlink us from the chain */
|
|
||||||
if(point->prev)
|
|
||||||
/* only if we aren't the _first_ Malloc() ! */
|
|
||||||
point->prev->next=point->next;
|
|
||||||
if(point->next)
|
|
||||||
/* only if there is a next! */
|
|
||||||
point->next->prev=point->prev;
|
|
||||||
}
|
|
||||||
#ifdef DEBUG
|
|
||||||
mem-=point->size+sizeof(struct MemInfo);
|
|
||||||
|
|
||||||
CheckMem(ptr);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef AMIGA
|
|
||||||
FreeMem(point, point->size+sizeof(struct MemInfo));
|
|
||||||
#elif UNIX
|
|
||||||
free(point);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
void CheckMem(void *ptr)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int b=0;
|
|
||||||
struct MemInfo *point;
|
|
||||||
/* `point' points to the MemInfo structure: */
|
|
||||||
point=(struct MemInfo *)((char *)ptr-sizeof(struct MemInfo));
|
|
||||||
for(i=0;i<MEMORY_COOKIE; i++)
|
|
||||||
if(*((unsigned char *)point+sizeof(struct MemInfo)+i+point->size-MEMORY_COOKIE)!= 0xbb)
|
|
||||||
b++;
|
|
||||||
|
|
||||||
if(b) {
|
|
||||||
#if defined(UNIX)
|
|
||||||
fprintf(stderr, "Memory violation: malloc(%d) was abused %d bytes!\n",
|
|
||||||
point->size-MEMORY_COOKIE-sizeof(struct MemInfo), b);
|
|
||||||
#elif defined(AMIGA)
|
|
||||||
/* ERROR */;
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void FreeAll(void)
|
|
||||||
{
|
|
||||||
struct MemInfo *point;
|
|
||||||
void *prev;
|
|
||||||
|
|
||||||
if(!MallocKey)
|
|
||||||
return;
|
|
||||||
do {
|
|
||||||
point=MallocKey;
|
|
||||||
/* `point' points to the MemInfo structure! */
|
|
||||||
|
|
||||||
prev=(void *)point->prev;
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
mem-=point->size+sizeof(struct MemInfo);
|
|
||||||
#endif
|
|
||||||
#ifdef AMIGA
|
|
||||||
FreeMem(MallocKey, point->size+sizeof(struct MemInfo));
|
|
||||||
#elif UNIX
|
|
||||||
free((char *)MallocKey);
|
|
||||||
#endif
|
|
||||||
} while(MallocKey=prev);
|
|
||||||
}
|
|
Loading…
x
Reference in New Issue
Block a user