Commit 4743c1db authored by Bas Couwenberg's avatar Bas Couwenberg

Imported Upstream version 0.69

parent a7991f25
0.68
====
0.69
by Petter Reinholdsen
- Add configure option "--enable-coverage".
- Add few check targets.
- Patch for compile warning in DBFWriteAttribute().
- Patch for compile warning in createParseData().
by Toshihiro Hiraoka
- Change XML parser from libxml2 to expat for big file support
- Remake almost all strucutes.
- Rewrite almost all sources.
- Add three path check options --min-points, --min-length and
--min-time to reduce the noise.
- Add -b, --basix-columns option
- Add -g, --gpxline option
- Add -f, --fast option
- README
- AUTHORS
- Change comment style to javadoc style.
- Structures flow
- Error code
- Bug (Debian Bug #292514: Segfaults when called only with -v) fix
- Delete few unused functions from utils.c
0.65-1
0.68-1
======
by Petter Reinholdtsen
- Add some debian missing files.
- Added config.sub and config.guess.
- debian package available now!
by Toshihiro Hiraoka
- Stop to use strange version number.
0.65a
=====
by Petter Reinholdtsen
- Add configure script etc.
- Get rid of some warnings about loosing the 'const'-ness of the
variable.
- Remove unused include <math.h>.
- Add include to find prototype for geod_set().
- Fix handling of output filename, to make sure it handles
'./foo.gpx' (used to give random filename).
- Correct the prototype of closeFiles().
- Add files in debian/ to make debian package. This is just a
framework, and need more work. The package description and a lot
of the support files are from the dh-make package, and should be
edited or removed. To build the package, run debuild from the
devscripts package.
- Solve some memory leaks and complaints.
by Toshihiro Hiraoka
- Restruct directory
- Add many prototypes etc.
- New debian package gpx2shp_0.68-1_i386.deb.
- Update debian releted files.
debian/watch, control, changelog
- Delete src/configure.ac.
- Delete libz check entry from configure.ac.
......@@ -17,5 +17,11 @@ CLEANFILES = \
pinatest2_rte.dbf \
pinatest2_meta.txt
check: src/gpx2shp
src/gpx2shp -s pinatest2.gpx
GPX2SHP=src/gpx2shp
check: $(GPX2SHP)
$(GPX2SHP) || true
$(GPX2SHP) --version
$(GPX2SHP) -s pinatest2.gpx
$(GPX2SHP) -e pinatest2.gpx
$(GPX2SHP) -p pinatest2.gpx
$(GPX2SHP) -v pinatest2.gpx > /dev/null
This diff is collapsed.
0.69
====
by Petter Reinholdtsen
- Add compile check options
- Compile warning fixes
by Toshihiro Hiraoka
- Bug fix
0.68-1
======
by Petter Reinholdtsen
- Add debian files
by Susumu Murakami
- RPM package for Vine 3.1
0.68
====
by Toshihiro Hiraoka
......
......@@ -2,7 +2,6 @@
Big gpx file support // finish
README // finish
Projection converter
gps2shp
0.8
Windows binary
......
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
This diff is collapsed.
......@@ -2,8 +2,8 @@
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
AC_INIT(gpx2shp, 0.68, washitoshi at yahoo.co.jp)
AM_INIT_AUTOMAKE(gpx2shp, 0.68)
AC_INIT(gpx2shp, 0.69, kogame at gmail.com)
AM_INIT_AUTOMAKE(gpx2shp, 0.69)
AC_CONFIG_SRCDIR(src/main.c)
AM_CONFIG_HEADER(src/config.h)
......@@ -19,10 +19,13 @@ if eval "test x$GCC = xyes"; then
AC_SUBST(CFLAGS)
fi
AC_ARG_ENABLE(coverage,
[ --enable-coverage compile with coverage testing enabled],
CFLAGS="$CFLAGS -fprofile-arcs -ftest-coverage")
# Checks for libraries.
AC_CHECK_LIB(proj, pj_param)
AC_CHECK_LIB(expat, XML_SetUserData)
AC_CHECK_LIB(z, inflate)
AC_CHECK_LIB(m, cos)
# Checks for header files.
......
gpx2shp (0.68-1) unstable; urgency=low
* New upstream version.
- Rewritten to handle large GPX files without using lots of memory.
* Now depends on expat instead of of libxml.
-- Petter Reinholdtsen <pere@debian.org> Sun, 9 Jan 2005 10:25:39 +0100
gpx2shp (0.65-1) unstable; urgency=low
* Initial Release. (Closes: #285297)
-- Petter Reinholdtsen <pere@debian.org> Sat, 18 Dec 2004 10:02:24 +0100
Source: gpx2shp
Section: science
Priority: optional
Maintainer: Petter Reinholdtsen <pere@debian.org>
Build-Depends: debhelper (>= 4.0.0), proj, libexpat1-dev
Standards-Version: 3.6.1
Package: gpx2shp
Architecture: any
Depends: ${shlibs:Depends}
Description: convert GPS or GPX file to ESRI Shape file
Convert GPS or GPX file to ESRI/Shape file. Include the tools
gps2shp and gpx2shp. These are very useful when using collected GPS
points with existing GIS tools like qgis and GRASS.
# Example watch control file for uscan
# Rename this file to "watch" and then you can run the "uscan" command
# to check for upstream updates and more.
# Site Directory Pattern Version Script
version=2
http://sourceforge.jp /projects/gpx2shp/files/ gpx2shp-(.*)\.tar\.gz debian uupdate
#!/usr/bin/sh
GB=`which gpsbabel`
GS="./gpx2shp"
GSOPT="-sv"
GS="gpx2shp"
GSOPT="-s"
INTYPE="garmin"
INFILE="/dev/ttyS0"
OUTTYPE="gpx"
......
# Makefile.in generated by automake 1.6.3 from Makefile.am.
# Makefile.in generated by automake 1.7.9 from Makefile.am.
# @configure_input@
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002
# Copyright 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
# Free Software Foundation, Inc.
# This Makefile.in is free software; the Free Software Foundation
# gives unlimited permission to copy and/or distribute it,
......@@ -13,71 +13,100 @@
# PARTICULAR PURPOSE.
@SET_MAKE@
SHELL = @SHELL@
srcdir = @srcdir@
top_srcdir = @top_srcdir@
VPATH = @srcdir@
prefix = @prefix@
exec_prefix = @exec_prefix@
bindir = @bindir@
sbindir = @sbindir@
libexecdir = @libexecdir@
datadir = @datadir@
sysconfdir = @sysconfdir@
sharedstatedir = @sharedstatedir@
localstatedir = @localstatedir@
libdir = @libdir@
infodir = @infodir@
mandir = @mandir@
includedir = @includedir@
oldincludedir = /usr/include
pkgdatadir = $(datadir)/@PACKAGE@
pkglibdir = $(libdir)/@PACKAGE@
pkgincludedir = $(includedir)/@PACKAGE@
top_builddir = ..
ACLOCAL = @ACLOCAL@
AUTOCONF = @AUTOCONF@
AUTOMAKE = @AUTOMAKE@
AUTOHEADER = @AUTOHEADER@
am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_DATA = @INSTALL_DATA@
install_sh_DATA = $(install_sh) -c -m 644
install_sh_PROGRAM = $(install_sh) -c
install_sh_SCRIPT = $(install_sh) -c
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_HEADER = $(INSTALL_DATA)
transform = @program_transform_name@
transform = $(program_transform_name)
NORMAL_INSTALL = :
PRE_INSTALL = :
POST_INSTALL = :
NORMAL_UNINSTALL = :
PRE_UNINSTALL = :
POST_UNINSTALL = :
EXEEXT = @EXEEXT@
OBJEXT = @OBJEXT@
PATH_SEPARATOR = @PATH_SEPARATOR@
ACLOCAL = @ACLOCAL@
AMDEP_FALSE = @AMDEP_FALSE@
AMDEP_TRUE = @AMDEP_TRUE@
AMTAR = @AMTAR@
AUTOCONF = @AUTOCONF@
AUTOHEADER = @AUTOHEADER@
AUTOMAKE = @AUTOMAKE@
AWK = @AWK@
CC = @CC@
CCDEPMODE = @CCDEPMODE@
CFLAGS = @CFLAGS@
CPP = @CPP@
CPPFLAGS = @CPPFLAGS@
CYGPATH_W = @CYGPATH_W@
DEFS = @DEFS@
DEPDIR = @DEPDIR@
ECHO_C = @ECHO_C@
ECHO_N = @ECHO_N@
ECHO_T = @ECHO_T@
EGREP = @EGREP@
EXEEXT = @EXEEXT@
INSTALL_DATA = @INSTALL_DATA@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
INSTALL_SCRIPT = @INSTALL_SCRIPT@
INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
LDFLAGS = @LDFLAGS@
LIBOBJS = @LIBOBJS@
LIBS = @LIBS@
LTLIBOBJS = @LTLIBOBJS@
MAKEINFO = @MAKEINFO@
OBJEXT = @OBJEXT@
PACKAGE = @PACKAGE@
PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
PACKAGE_NAME = @PACKAGE_NAME@
PACKAGE_STRING = @PACKAGE_STRING@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
PACKAGE_VERSION = @PACKAGE_VERSION@
PATH_SEPARATOR = @PATH_SEPARATOR@
SET_MAKE = @SET_MAKE@
SHELL = @SHELL@
STRIP = @STRIP@
VERSION = @VERSION@
ac_ct_CC = @ac_ct_CC@
ac_ct_STRIP = @ac_ct_STRIP@
am__fastdepCC_FALSE = @am__fastdepCC_FALSE@
am__fastdepCC_TRUE = @am__fastdepCC_TRUE@
am__include = @am__include@
am__leading_dot = @am__leading_dot@
am__quote = @am__quote@
bindir = @bindir@
build_alias = @build_alias@
datadir = @datadir@
exec_prefix = @exec_prefix@
host_alias = @host_alias@
includedir = @includedir@
infodir = @infodir@
install_sh = @install_sh@
libdir = @libdir@
libexecdir = @libexecdir@
localstatedir = @localstatedir@
mandir = @mandir@
oldincludedir = @oldincludedir@
prefix = @prefix@
program_transform_name = @program_transform_name@
sbindir = @sbindir@
sharedstatedir = @sharedstatedir@
sysconfdir = @sysconfdir@
target_alias = @target_alias@
man_MANS = gpx2shp.1
EXTRA_DIST = $(man_MANS)
subdir = man
ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs
CONFIG_HEADER = $(top_builddir)/src/config.h
CONFIG_CLEAN_FILES =
......@@ -85,7 +114,7 @@ DIST_SOURCES =
NROFF = nroff
MANS = $(man_MANS)
DIST_COMMON = Makefile.am Makefile.in
DIST_COMMON = $(srcdir)/Makefile.in Makefile.am
all: all-am
.SUFFIXES:
......@@ -132,6 +161,10 @@ uninstall-man1:
done; \
for i in $$list; do \
ext=`echo $$i | sed -e 's/^.*\\.//'`; \
case "$$ext" in \
1*) ;; \
*) ext='1' ;; \
esac; \
inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
inst=`echo $$inst | sed -e 's/^.*\///'`; \
inst=`echo $$inst | sed '$(transform)'`.$$ext; \
......@@ -141,13 +174,22 @@ uninstall-man1:
tags: TAGS
TAGS:
ctags: CTAGS
CTAGS:
DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
top_distdir = ..
distdir = $(top_distdir)/$(PACKAGE)-$(VERSION)
distdir: $(DISTFILES)
@list='$(DISTFILES)'; for file in $$list; do \
@srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \
topsrcdirstrip=`echo "$(top_srcdir)" | sed 's|.|.|g'`; \
list='$(DISTFILES)'; for file in $$list; do \
case $$file in \
$(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \
$(top_srcdir)/*) file=`echo "$$file" | sed "s|^$$topsrcdirstrip/|$(top_builddir)/|"`;; \
esac; \
if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
dir=`echo "$$file" | sed -e 's,/[^/]*$$,,'`; \
if test "$$dir" != "$$file" && test "$$dir" != "."; then \
......@@ -173,7 +215,6 @@ all-am: Makefile $(MANS)
installdirs:
$(mkinstalldirs) $(DESTDIR)$(man1dir)
install: install-am
install-exec: install-exec-am
install-data: install-data-am
......@@ -185,7 +226,7 @@ install-am: all-am
installcheck: installcheck-am
install-strip:
$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
INSTALL_STRIP_FLAG=-s \
install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
`test -z '$(STRIP)' || \
echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
mostlyclean-generic:
......@@ -193,7 +234,7 @@ mostlyclean-generic:
clean-generic:
distclean-generic:
-rm -f Makefile $(CONFIG_CLEAN_FILES)
-rm -f $(CONFIG_CLEAN_FILES)
maintainer-clean-generic:
@echo "This command is intended for maintainers to use"
......@@ -203,7 +244,7 @@ clean: clean-am
clean-am: clean-generic mostlyclean-am
distclean: distclean-am
-rm -f Makefile
distclean-am: clean-am distclean-generic
dvi: dvi-am
......@@ -225,13 +266,21 @@ install-man: install-man1
installcheck-am:
maintainer-clean: maintainer-clean-am
-rm -f Makefile
maintainer-clean-am: distclean-am maintainer-clean-generic
mostlyclean: mostlyclean-am
mostlyclean-am: mostlyclean-generic
pdf: pdf-am
pdf-am:
ps: ps-am
ps-am:
uninstall-am: uninstall-info-am uninstall-man
uninstall-man: uninstall-man1
......@@ -242,8 +291,8 @@ uninstall-man: uninstall-man1
install-exec-am install-info install-info-am install-man \
install-man1 install-strip installcheck installcheck-am \
installdirs maintainer-clean maintainer-clean-generic \
mostlyclean mostlyclean-generic uninstall uninstall-am \
uninstall-info-am uninstall-man uninstall-man1
mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \
uninstall-am uninstall-info-am uninstall-man uninstall-man1
# Tell versions [3.59,3.63) of GNU make to not export all variables.
# Otherwise a system limit (for SysV at least) may be exceeded.
......
This diff is collapsed.
......@@ -15,9 +15,6 @@
/* Define to 1 if you have the `proj' library (-lproj). */
#undef HAVE_LIBPROJ
/* Define to 1 if you have the `z' library (-lz). */
#undef HAVE_LIBZ
/* Define to 1 if you have the <limits.h> header file. */
#undef HAVE_LIMITS_H
......
This diff is collapsed.
# -*- Autoconf -*-
# Process this file with autoconf to produce a configure script.
AC_PREREQ(2.57)
AC_INIT(gpx2shp, 0.68, washitoshi at yahoo.co.jp)
AM_INIT_AUTOMAKE(gpx2shp, 0.68)
AC_CONFIG_SRCDIR(dbfopen.c)
AM_CONFIG_HEADER(config.h)
# Checks for programs.
AC_PROG_CC
AC_PROG_MAKE_SET
# Ask GCC to give us heaps of warnings
if eval "test x$GCC = xyes"; then
CFLAGS="$CFLAGS -W -Wall -Wcast-align -Wcast-qual"
CFLAGS="$CFLAGS -Wmissing-declarations -Wmissing-prototypes"
CFLAGS="$CFLAGS -Wstrict-prototypes -Wpointer-arith -Wreturn-type"
AC_SUBST(CFLAGS)
fi
# Checks for libraries.
AC_CHECK_LIB(proj, pj_param)
AC_CHECK_LIB(expat, XML_SetUserData)
AC_CHECK_LIB(z, inflate)
AC_CHECK_LIB(m, cos)
# Checks for header files.
AC_HEADER_STDC
AC_CHECK_HEADERS([limits.h stdlib.h string.h unistd.h])
# Checks for typedefs, structures, and compiler characteristics.
AC_C_CONST
AC_STRUCT_TM
# Checks for library functions.
AC_FUNC_MALLOC
AC_FUNC_MKTIME
AC_FUNC_REALLOC
AC_CHECK_FUNCS(memset sqrt)
AC_CONFIG_FILES(Makefile)
AC_OUTPUT
......@@ -1194,7 +1194,7 @@ DBFGetFieldInfo(DBFHandle psDBF, int iField, char *pszFieldName,
/************************************************************************/
static int
DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, void *pValue)
DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, const void *pValue)
{
int nRecordOffset, i, j, nRetResult = TRUE;
unsigned char *pabyRec;
......@@ -1337,7 +1337,7 @@ DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, void *pValue)
nWidth = sizeof(szSField) - 2;
sprintf(szFormat, "%%%dd", nWidth);
sprintf(szSField, szFormat, (int) *((double *) pValue));
sprintf(szSField, szFormat, (int) *((const double *) pValue));
if ((int) strlen(szSField) > psDBF->panFieldSize[iField]) {
szSField[psDBF->panFieldSize[iField]] = '\0';
nRetResult = FALSE;
......@@ -1355,7 +1355,7 @@ DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, void *pValue)
sprintf(szFormat, "%%%d.%df",
nWidth, psDBF->panFieldDecimals[iField]);
sprintf(szSField, szFormat, *((double *) pValue));
sprintf(szSField, szFormat, *((const double *) pValue));
if ((int) strlen(szSField) > psDBF->panFieldSize[iField]) {
szSField[psDBF->panFieldSize[iField]] = '\0';
nRetResult = FALSE;
......@@ -1367,22 +1367,22 @@ DBFWriteAttribute(DBFHandle psDBF, int hEntity, int iField, void *pValue)
case 'L':
if (psDBF->panFieldSize[iField] >= 1 &&
(*(char *) pValue == 'F' || *(char *) pValue == 'T'))
*(pabyRec + psDBF->panFieldOffset[iField]) = *(char *) pValue;
(*(const char *) pValue == 'F' || *(const char *) pValue == 'T'))
*(pabyRec + psDBF->panFieldOffset[iField]) = *(const char *) pValue;
break;
default:
if ((int) strlen((char *) pValue) > psDBF->panFieldSize[iField]) {
if ((int) strlen((const char *) pValue) > psDBF->panFieldSize[iField]) {
j = psDBF->panFieldSize[iField];
nRetResult = FALSE;
} else {
memset(pabyRec + psDBF->panFieldOffset[iField], ' ',
psDBF->panFieldSize[iField]);
j = strlen((char *) pValue);
j = strlen((const char *) pValue);
}
strncpy((char *) (pabyRec + psDBF->panFieldOffset[iField]),
(char *) pValue, j);
(const char *) pValue, j);
break;
}
......
......@@ -243,7 +243,7 @@ g2sprop *createProp(void);
void closeProp(g2sprop * prop);
shphandles *createShps(void);
dbfhandles *createDbfs(void);
parsedata *createParsedata(XML_Parser * parser, g2sprop * prop);
parsedata *createParsedata(XML_Parser parser, g2sprop * prop);
void closeParsedata(parsedata * pdata);
/* parser.c */
......
......@@ -361,6 +361,11 @@ void setOptions(int argc, char **argv, g2sprop * prop)
}
}
/* gets a source file name */
if(argv[optind] == NULL) {
fprintf(stderr, "There is no gpxfile description.\n");
usage(argv);
exit(ERR_WRONGOPTION);
}
prop->sourcefile = malloc(sizeof(char) * (strlen(argv[optind]) + 1));
/** @note needs to change here to support
* a several files convertion */
......
......@@ -12,7 +12,7 @@ g2sprop *createProp(void);
void closeProp(g2sprop * prop);
shphandles *createShps(void);
dbfhandles *createDbfs(void);
parsedata *createParsedata(XML_Parser * parser, g2sprop * prop);
parsedata *createParsedata(XML_Parser parser, g2sprop * prop);
void closeParsedata(parsedata * pdata);
/**
......@@ -298,7 +298,7 @@ dbfhandles *createDbfs(void)
/**
* creates a parse structure
*/
parsedata *createParsedata(XML_Parser * parser, g2sprop * prop)
parsedata *createParsedata(XML_Parser parser, g2sprop * prop)
{
parsedata *pdata = (parsedata *) malloc(sizeof(parsedata));
shphandles *shps = createShps();
......
......@@ -347,34 +347,16 @@ void setPathData(pathattr * pattr, g2sattr * attr)
{
const int reallocsize = 100;
if (pattr->count == 0) {
/*
pattr->x = malloc(sizeof(double) * reallocsize);
pattr->y = malloc(sizeof(double) * reallocsize);
pattr->z = malloc(sizeof(double) * reallocsize);
*/
pattr->point = malloc(sizeof(double) * 3 * reallocsize);
}
if ((pattr->count % reallocsize) == 0) {
pattr->point = realloc(pattr->point,
sizeof(double) * 3 * (pattr->count +
reallocsize));
/*
pattr->x = realloc(pattr->x,
sizeof(double) * (pattr->count + reallocsize));
pattr->y = realloc(pattr->y,
sizeof(double) * (pattr->count + reallocsize));
pattr->z = realloc(pattr->z,
sizeof(double) * (pattr->count + reallocsize));
*/
}
pattr->point[pattr->count * 3] = attr->lon;
pattr->point[pattr->count * 3 + 1] = attr->lat;
pattr->point[pattr->count * 3 + 2] = attr->ele;
/*
pattr->x[pattr->count] = attr->lon;
pattr->y[pattr->count] = attr->lat;
pattr->z[pattr->count] = attr->ele;
*/
pattr->count++;
}
......@@ -483,15 +465,10 @@ void setPath(SHPHandle hSHP, DBFHandle hDBF, parsedata * pdata)
shpobj =
SHPCreateObject(SHPT_ARCZ, iShape, 0, 0, 0, pattr->count,
x, y, z, NULL);
/* pattr->x, pattr->y, pattr->z, NULL); */
} else {
shpobj =
SHPCreateObject(SHPT_ARC, iShape, 0, 0, 0,
pattr->count, x, y, NULL, NULL);
/*
SHPCreateObject(SHPT_ARC, iShape, 0, 0, 0, pattr->count, pattr->x,
pattr->y, NULL, NULL);
*/
}
iShape = SHPWriteObject(hSHP, -1, shpobj);
SHPDestroyObject(shpobj);
......@@ -499,9 +476,4 @@ void setPath(SHPHandle hSHP, DBFHandle hDBF, parsedata * pdata)
writePathAttribute(hDBF, pdata, pattr, iShape);
}
free(pattr->point);
/*
free(pattr->x);
free(pattr->y);
free(pattr->z);
*/
}
......@@ -197,16 +197,3 @@ void closeDbfFiles(dbfhandles * dbfs)
DBFClose(dbfs->rte_pnt);
}
void *myMallocRep(size_t size, const char *fileName, int line)
{
/*
* malloc with a return check
* It can call as myMalloc(size_t) because of a macro definition.
*/
void *p = malloc(size);
if (p == NULL) {
fprintf(stderr, "Out of memory at %s: %i.\n", fileName, line);
exit(ERR_OUTOFMEMORY);
}
return p;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment