Advertisement
Guest User

Untitled

a guest
Aug 26th, 2012
4
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.39 KB | None | 0 0
  1. /*
  2.  * Count how many bytes str would contain if it would be rss escapped
  3.  */
  4. static int
  5. rss_escaped_len(const char *str)
  6. {
  7.   int i;
  8.   int len = 0;
  9.  
  10.   for(i=0; i<strlen(str); i++) {
  11.     switch (str[i]) {
  12.     case '>':
  13.     case '<':  
  14.       len += 4;
  15.       break;
  16.  
  17.     case '&':
  18.       len += 5;
  19.       break;
  20.      
  21.     case '\"':
  22.     case '\'':
  23.       len += 6;
  24.       break;
  25.      
  26.     default:
  27.       len++;
  28.       break;
  29.     }
  30.   }
  31.  
  32.   return len;
  33. }
  34.  
  35.  
  36. /*
  37.  * RSS (xml) escape a string
  38.  */
  39. static const char*
  40. rss_escape(const char *str)
  41. {
  42.   static char buf[1024];
  43.   char esc[7];
  44.   int esc_len;
  45.   char *p;
  46.   char *p_end;
  47.   int len;
  48.   int i;
  49.  
  50.   len = rss_escaped_len(str);
  51.   len = MIN(len, sizeof(buf) - 1);
  52.  
  53.   p = buf;
  54.   p_end = buf + len;
  55.  
  56.   memset(buf, 0, sizeof(buf));
  57.  
  58.   for(i=0; i<strlen(str); i++) {
  59.  
  60.     switch (str[i]) {
  61.     case '<':  
  62.       strcpy(esc, "&lt;");
  63.       break;
  64.  
  65.     case '>':
  66.       strcpy(esc, "&gt;");
  67.       break;
  68.  
  69.     case '&':
  70.       strcpy(esc, "&amp;");
  71.       break;
  72.  
  73.     case '\"':
  74.       strcpy(esc, "&quot;");
  75.       break;
  76.  
  77.     case '\'':
  78.       strcpy(esc, "&apos;");
  79.       break;
  80.  
  81.     default:
  82.       esc[0] = str[i];
  83.       esc[1] = 0;
  84.       break;
  85.     }
  86.  
  87.     esc_len = strlen(esc);
  88.  
  89.     if(p_end < p+esc_len)
  90.       break;
  91.  
  92.     strcpy(p, esc);
  93.     p += esc_len;
  94.   }
  95.  
  96.   p[len] = '\0';
  97.  
  98.   return buf;
  99. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement