return dup;
}
+/*
+ * String manipulation
+ */
+
+/* return the first char of s that is not whitespace and not a comment */
+char *eat_whitespace(char *s) {
+ assert(s);
+
+ while(isspace(*s) || *s == '#') {
+ while(isspace(*s))
+ s++;
+ if(*s == '#') { /* read to a \n or \0 */
+ while(*s && *s != '\n')
+ s++;
+ if(!*s)
+ return s;
+ }
+ }
+ return s;
+}
+
+char *eat_whitespace_no_nl(char *s) {
+ while(*s == ' ' || *s == '\t')
+ ++s;
+ return s;
+}
+
+/* return the first char of s that is whitespace or '#' or '\0 */
+char *find_whitespace(char *s) {
+ assert(s);
+
+ while(*s && !isspace(*s) && *s != '#')
+ s++;
+
+ return s;
+}
+
/*
* Time
*/
return -1;
}
+
char *tor_strdup(const char *s);
#define tor_free(p) do {if(p) {free(p); (p)=NULL;}} while(0)
+char *eat_whitespace(char *s);
+char *eat_whitespace_no_nl(char *s);
+char *find_whitespace(char *s);
+
void tor_gettimeofday(struct timeval *timeval);
long tv_udiff(struct timeval *start, struct timeval *end);
void tv_addms(struct timeval *a, long ms);