static char *msort(char*,char**,int(*)(const char*,const char*));
+/*
+** Compilers are getting increasingly pedantic about type conversions
+** as C evolves ever closer to Ada.... To work around the latest problems
+** we have to define the following variant of strlen().
+*/
+#define lemonStrlen(X) ((int)strlen(X))
+
static struct action *Action_new(void);
static struct action *Action_sort(struct action *);
}else{
sprintf(prefix,"%.*s: ",PREFIXLIMIT-10,filename);
}
- prefixsize = strlen(prefix);
+ prefixsize = lemonStrlen(prefix);
availablewidth = LINEWIDTH - prefixsize;
/* Generate the error message */
vsprintf(errmsg,format,ap);
va_end(ap);
- errmsgsize = strlen(errmsg);
+ errmsgsize = lemonStrlen(errmsg);
/* Remove trailing '\n's from the error message. */
while( errmsgsize>0 && errmsg[errmsgsize-1]=='\n' ){
errmsg[--errmsgsize] = 0;
exit(1);
}
paz = &azDefine[nDefine-1];
- *paz = malloc( strlen(z)+1 );
+ *paz = malloc( lemonStrlen(z)+1 );
if( *paz==0 ){
fprintf(stderr,"out of memory\n");
exit(1);
{
int spcnt, i;
if( argv[0] ) fprintf(err,"%s",argv[0]);
- spcnt = strlen(argv[0]) + 1;
+ spcnt = lemonStrlen(argv[0]) + 1;
for(i=1; i<n && argv[i]; i++){
fprintf(err," %s",argv[i]);
- spcnt += strlen(argv[i])+1;
+ spcnt += lemonStrlen(argv[i])+1;
}
spcnt += k;
for(; argv[i]; i++) fprintf(err," %s",argv[i]);
int errcnt = 0;
int j;
for(j=0; op[j].label; j++){
- if( strncmp(&argv[i][1],op[j].label,strlen(op[j].label))==0 ) break;
+ if( strncmp(&argv[i][1],op[j].label,lemonStrlen(op[j].label))==0 ) break;
}
v = argv[i][0]=='-' ? 1 : 0;
if( op[j].label==0 ){
int max, len;
max = 0;
for(i=0; op[i].label; i++){
- len = strlen(op[i].label) + 1;
+ len = lemonStrlen(op[i].label) + 1;
switch( op[i].type ){
case OPT_FLAG:
case OPT_FFLAG:
case OPT_INT:
case OPT_FINT:
fprintf(errstream," %s=<integer>%*s %s\n",op[i].label,
- (int)(max-strlen(op[i].label)-9),"",op[i].message);
+ (int)(max-lemonStrlen(op[i].label)-9),"",op[i].message);
break;
case OPT_DBL:
case OPT_FDBL:
fprintf(errstream," %s=<real>%*s %s\n",op[i].label,
- (int)(max-strlen(op[i].label)-6),"",op[i].message);
+ (int)(max-lemonStrlen(op[i].label)-6),"",op[i].message);
break;
case OPT_STR:
case OPT_FSTR:
fprintf(errstream," %s=<string>%*s %s\n",op[i].label,
- (int)(max-strlen(op[i].label)-8),"",op[i].message);
+ (int)(max-lemonStrlen(op[i].label)-8),"",op[i].message);
break;
}
}
char zLine[50];
zNew = x;
if( zNew[0]=='"' || zNew[0]=='{' ) zNew++;
- nNew = strlen(zNew);
+ nNew = lemonStrlen(zNew);
if( *psp->declargslot ){
zOld = *psp->declargslot;
}else{
zOld = "";
}
- nOld = strlen(zOld);
+ nOld = lemonStrlen(zOld);
n = nOld + nNew + 20;
addLineMacro = psp->insertLineMacro &&
(psp->decllinenoslot==0 || psp->decllinenoslot[0]!=0);
if( *z=='\\' ) nBack++;
}
sprintf(zLine, "#line %d ", psp->tokenlineno);
- nLine = strlen(zLine);
- n += nLine + strlen(psp->filename) + nBack;
+ nLine = lemonStrlen(zLine);
+ n += nLine + lemonStrlen(psp->filename) + nBack;
}
*psp->declargslot = zBuf = realloc(*psp->declargslot, n);
zBuf += nOld;
for(n=0; z[j+n] && !isspace(z[j+n]); n++){}
exclude = 1;
for(k=0; k<nDefine; k++){
- if( strncmp(azDefine[k],&z[j],n)==0 && strlen(azDefine[k])==n ){
+ if( strncmp(azDefine[k],&z[j],n)==0 && lemonStrlen(azDefine[k])==n ){
exclude = 0;
break;
}
char *name;
char *cp;
- name = malloc( strlen(lemp->filename) + strlen(suffix) + 5 );
+ name = malloc( lemonStrlen(lemp->filename) + lemonStrlen(suffix) + 5 );
if( name==0 ){
fprintf(stderr,"Can't allocate space for a filename.\n");
exit(1);
maxlen = 10;
for(i=0; i<lemp->nsymbol; i++){
sp = lemp->symbols[i];
- len = strlen(sp->name);
+ len = lemonStrlen(sp->name);
if( len>maxlen ) maxlen = len;
}
ncolumns = 76/(maxlen+5);
if( cp ){
c = *cp;
*cp = 0;
- path = (char *)malloc( strlen(argv0) + strlen(name) + 2 );
+ path = (char *)malloc( lemonStrlen(argv0) + lemonStrlen(name) + 2 );
if( path ) sprintf(path,"%s/%s",argv0,name);
*cp = c;
}else{
extern char *getenv();
pathlist = getenv("PATH");
if( pathlist==0 ) pathlist = ".:/bin:/usr/bin";
- path = (char *)malloc( strlen(pathlist)+strlen(name)+2 );
+ path = (char *)malloc( lemonStrlen(pathlist)+lemonStrlen(name)+2 );
if( path!=0 ){
while( *pathlist ){
cp = strchr(pathlist,':');
- if( cp==0 ) cp = &pathlist[strlen(pathlist)];
+ if( cp==0 ) cp = &pathlist[lemonStrlen(pathlist)];
c = *cp;
*cp = 0;
sprintf(path,"%s/%s",pathlist,name);
used += n;
assert( used>=0 );
}
- n = strlen(zText);
+ n = lemonStrlen(zText);
}
if( n+sizeof(zInt)*2+used >= alloced ){
alloced = n + sizeof(zInt)*2 + used + 200;
sprintf(zInt, "%d", p1);
p1 = p2;
strcpy(&z[used], zInt);
- used += strlen(&z[used]);
+ used += lemonStrlen(&z[used]);
zText++;
n--;
}else{
for(i=0; i<arraysize; i++) types[i] = 0;
maxdtlength = 0;
if( lemp->vartype ){
- maxdtlength = strlen(lemp->vartype);
+ maxdtlength = lemonStrlen(lemp->vartype);
}
for(i=0; i<lemp->nsymbol; i++){
int len;
struct symbol *sp = lemp->symbols[i];
if( sp->datatype==0 ) continue;
- len = strlen(sp->datatype);
+ len = lemonStrlen(sp->datatype);
if( len>maxdtlength ) maxdtlength = len;
}
stddt = (char*)malloc( maxdtlength*2 + 1 );
}
if( types[hash]==0 ){
sp->dtnum = hash + 1;
- types[hash] = (char*)malloc( strlen(stddt)+1 );
+ types[hash] = (char*)malloc( lemonStrlen(stddt)+1 );
if( types[hash]==0 ){
fprintf(stderr,"Out of memory.\n");
exit(1);
name = lemp->name ? lemp->name : "Parse";
if( lemp->arg && lemp->arg[0] ){
int i;
- i = strlen(lemp->arg);
+ i = lemonStrlen(lemp->arg);
while( i>=1 && isspace(lemp->arg[i-1]) ) i--;
while( i>=1 && (isalnum(lemp->arg[i-1]) || lemp->arg[i-1]=='_') ) i--;
fprintf(out,"#define %sARG_SDECL %s;\n",name,lemp->arg); lineno++;
if( y==0 ) return 0;
z = Strsafe_find(y);
- if( z==0 && (z=malloc( strlen(y)+1 ))!=0 ){
+ if( z==0 && (z=malloc( lemonStrlen(y)+1 ))!=0 ){
strcpy(z,y);
Strsafe_insert(z);
}