M
Malcolm McLean
Are all the is dotted and ts crossed with this?
/*
test if a string is a valid C string - can it go in the place
of a C string literal?
*/
int validcstring(const char *str)
{
size_t len;
size_t i, j;
size_t start;
size_t end;
len = strlen(str);
if(len < 2)
return 0;
for(start=0; start < len; start++)
if(!isspace( (unsigned char) str[start]))
break;
end = len;
while(end--)
if(!isspace((unsigned char) str[end]))
break;
if(start == end || str[start] != '\"' || str[end] != '\"')
return 0;
start++;
end--;
for(i=start;i<end;i++)
{
if(str == '\\')
{
if(strchr("aftbrnvxo01234567\?\\\'\"", str[i+1]))
{
if(str[i+1] == 'o')
{
if(!isdigit((unsigned char) str[i+2]) ||
!isdigit((unsigned char) str[i+3]) ||
!isdigit((unsigned char) str[i+4]) )
return 0;
}
else if(str[i+1] == 'x')
{
if(!isxdigit((unsigned char) str[i+2]) ||
!isxdigit((unsigned char) str[i+3]))
return 0;
}
else
i++;
continue;
}
}
if(str == '\"')
{
for(j=i+1;j<end;j++)
if(!isspace((unsigned char) str[j]))
break;
if(str[j] == '\"')
i = j;
else
return 0;
}
if(!isgraph( (unsigned char) str) && str != ' ')
return 0;
}
return 1;
}
/*
test if a string is a valid C string - can it go in the place
of a C string literal?
*/
int validcstring(const char *str)
{
size_t len;
size_t i, j;
size_t start;
size_t end;
len = strlen(str);
if(len < 2)
return 0;
for(start=0; start < len; start++)
if(!isspace( (unsigned char) str[start]))
break;
end = len;
while(end--)
if(!isspace((unsigned char) str[end]))
break;
if(start == end || str[start] != '\"' || str[end] != '\"')
return 0;
start++;
end--;
for(i=start;i<end;i++)
{
if(str == '\\')
{
if(strchr("aftbrnvxo01234567\?\\\'\"", str[i+1]))
{
if(str[i+1] == 'o')
{
if(!isdigit((unsigned char) str[i+2]) ||
!isdigit((unsigned char) str[i+3]) ||
!isdigit((unsigned char) str[i+4]) )
return 0;
}
else if(str[i+1] == 'x')
{
if(!isxdigit((unsigned char) str[i+2]) ||
!isxdigit((unsigned char) str[i+3]))
return 0;
}
else
i++;
continue;
}
}
if(str == '\"')
{
for(j=i+1;j<end;j++)
if(!isspace((unsigned char) str[j]))
break;
if(str[j] == '\"')
i = j;
else
return 0;
}
if(!isgraph( (unsigned char) str) && str != ' ')
return 0;
}
return 1;
}