• 0

[c] Recreating PHP substr function


Question

This function immitates php's substr function, but is written in c. I'm trying to shorten it, any ideas?

/*
 ?Copies substring of string str from offset in str (+ from beginning/-from end)
 ?and length chars long into string substr. ?Returns TRUE if copy was success.
*/
int PHP_substr(char* str, char* substr, int offset, int length)
{
 ? int s_length = strlen(str);

 ? if((str != 0) && (length > 0))
 ? {
 ? ? ?if(offset >= 0)
 ? ? ?{
 ? ? ? ? if((length - offset) >= s_length)
 ? ? ? ? {
 ? ? ? ? ? ?length = s_length - offset;
 ? ? ? ? }
 ? ? ?}
 ? ? ?else
 ? ? ?{
 ? ? ? ? if((length - (s_length + offset)) >= (s_length + offset))
 ? ? ? ? {
 ? ? ? ? ? ?length = s_length - (s_length + offset);
 ? ? ? ? }
 ? ? ? ? offset = s_length + offset;
 ? ? ?}
 ? ? ?if((offset >= 0) && ((s_length - 1) >= offset) &&
 ? ? ? ? (s_length >= (offset + length)))
 ? ? ?{
 ? ? ? ? strncpy(substr, str + offset, length);
 ? ? ? ? substr[length] = '\0';
 ? ? ? ? return 1;
 ? ? ?}
 ? ? ?else if((offset < 0) && (s_length >= (offset * -1)) &&
 ? ? ? ? ? ? ?(s_length >= ((s_length + offset) + length)))
 ? ? ?{
 ? ? ? ? strncpy(substr, str + (s_length + offset), length);
 ? ? ? ? substr[length] = '\0';
 ? ? ? ? return 1;
 ? ? ?}
 ? }
 ? else if((str != 0) && (length < 0))
 ? {
 ? ? ?if(offset < 0)
 ? ? ?{
 ? ? ? ? offset = s_length + offset;
 ? ? ?}
 ? ? ?if((offset >= 0) && ((s_length - 1) >= offset) &&
 ? ? ? ? (s_length > (length * -1)) &&
 ? ? ? ? ((s_length + length) > offset) &&
 ? ? ? ? (s_length >= ((s_length + length) - offset)))
 ? ? ?{
 ? ? ? ? strncpy(substr, str + offset, ((s_length + length) - offset));
 ? ? ? ? substr[((s_length + length) - offset)] = '\0';
 ? ? ? ? return 1;
 ? ? ?}
 ? }

 ? substr[0] = '\0';
 ? return 0;
}

Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

at least the substr_compare is short

int PHP_substr_compare(char* str1, char* str2, int offset, int length)
{
   char *substr;

   substr = (strlen(str1) > strlen(str2)) ? ((char *) malloc(strlen(str1) + 1)) : ((char *) malloc(strlen(str2) + 1));

   PHP_substr(str1, substr, offset, length);

   return strcmp(substr, str2);
}

Link to comment
Share on other sites

This topic is now closed to further replies.
  • Recently Browsing   0 members

    • No registered users viewing this page.