Home | History | Annotate | Download | only in lib
      1 /**
      2  * mangle_name:
      3  *
      4  * Mangle a filename pointed to by src into a buffer pointed
      5  * to by dst; ends on encountering any whitespace.
      6  * dst is preserved.
      7  *
      8  * This verifies that a filename is < FILENAME_MAX characters,
      9  * doesn't contain whitespace, zero-pads the output buffer,
     10  * and removes redundant slashes.
     11  *
     12  */
     13 
     14 #include <string.h>
     15 #include "fs.h"
     16 
     17 void generic_mangle_name(char *dst, const char *src)
     18 {
     19     char *p = dst;
     20     int i = FILENAME_MAX-1;
     21 
     22     while (not_whitespace(*src)) {
     23         if (*src == '/') {
     24             if (src[1] == '/') {
     25                 src++;
     26                 i--;
     27                 continue;
     28             }
     29         }
     30         i--;
     31         *dst++ = *src++;
     32     }
     33 
     34     while (1) {
     35         if (dst == p)
     36             break;
     37         if (dst[-1] != '/')
     38             break;
     39 	if ((dst[-1] == '/') && ((dst - 1) == p))
     40 	    break;
     41 
     42         dst--;
     43         i++;
     44     }
     45 
     46     i++;
     47     for (; i > 0; i --)
     48         *dst++ = '\0';
     49 }
     50