summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2011-01-06 17:42:52 +0900
committersuzuki toshiya <mpsuzuki@hiroshima-u.ac.jp>2011-01-09 23:33:29 +0900
commitd1543e350ac2d17fa984469933e234fb3946f8d7 (patch)
tree1bbf6d7cc295c4a0a14f57142fb6a9f0214bfd00
parent48b338685330c7eff6c041d8b1de78bd38867200 (diff)
downloadfreetype2-d1543e350ac2d17fa984469933e234fb3946f8d7.tar.gz
update ft_mem_check_site_alloc_environment() for new syntax
-rw-r--r--src/base/ftdbgmem.c61
1 files changed, 35 insertions, 26 deletions
diff --git a/src/base/ftdbgmem.c b/src/base/ftdbgmem.c
index d46ac7fa1..c1e43642f 100644
--- a/src/base/ftdbgmem.c
+++ b/src/base/ftdbgmem.c
@@ -515,40 +515,49 @@
ft_mem_check_site_alloc_environment( FT_MemSource source,
const char* env_var_name )
{
- char *source_basename = basename( (char *)source->file_name );
+ char *source_basename = ft_basename( (char *)source->file_name );
char *c, *c0;
- /* environment is unset */
+ /* return if environment is unset */
c = c0 = getenv( env_var_name );
if ( !c )
return -1;
- /* basename not found */
- if ( NULL == ( c = ft_strstr( c, source_basename ) ) )
- return -1;
-
- /* found position was substring */
- if ( c != c0 && *(c-1) != ',' && *(c-1) != '/' )
- return -1;
-
- /* invalid syntax without line number */
- c = c + strlen( source_basename );
- if ( ':' != *c )
- return -1;
-
- /* line number differs */
- if ( atoi( c + 1 ) != source->line_no )
- return -1;
-
- /* invalid syntax without max memory space */
- if ( NULL == ft_strchr( c + 1, ':' ) )
- return -1;
- c = ft_strchr( c + 1, ':' );
- if ( !ft_isdigit( c[1] ) )
- return -1;
+ /* return if basename not found anymore */
+ while ( NULL != ( c = ft_strstr( c, source_basename ) ) )
+ {
+ /* skip if partial match of basename */
+ if ( c != c0 && *(c-1) != ' ' && *(c-1) != PLATFORM_PATH_SEPARATOR[0] )
+ goto NextToken;
+
+ /* goto line number after ':' */
+ c = c + ft_strlen( source_basename );
+ if ( ':' != *c || !ft_isdigit( c[1] ) )
+ goto NextToken;
+ c++;
+
+ /* compare line number */
+ if ( atoi( c ) != source->line_no )
+ goto NextToken;
+
+ while ( ft_isdigit( *c ) )
+ c++;
+
+ /* check alloc limiter after ',' */
+ if ( ',' != *c || !ft_isdigit( c[1] ) )
+ goto NextToken;
+ c++;
+ return atoi( c );
+
+ NextToken:
+ c = ft_strchr( c, ' ' );
+ if ( !c ) /* no token anymore */
+ break;
- return atoi( c + 1 );
+ c++;
+ }
+ return -1;
}