static void updateWorkingDirectory (const char *firstArgument) { string path (firstArgument); size_t index; index = path.find_last_of ('/'); #ifdef WIN32 index = max (index, path.find_last_of ('\\')); #endif if (index != string::npos) { string newdir (path, 0, index); setcwd (newdir.c_str ()); } }
static void _pascal parsemail(char *keyword, char *value) { char *s = value; char *e = NULL; AREA *t; AREA a; check(username); memset(&a,0,sizeof a); switch (tolower(*keyword)) { /* one letter is enough for now */ default : case 'f' : a.msgtype = FIDO; break; case 'q' : a.msgtype = QUICK; break; } while (*s && isspace(*s)) s++; if (!*s) return; switch (tolower(*s)) { /* one letter is enough */ case 'n' : a.news = 1; break; case 'u' : a.uucp = 1; break; case 'm' : a.netmail = 1; break; case 'e' : a.echomail = 1; break; case 'l' : default : a.local = 1; break; } while (*s && !isspace(*s)) s++; /* skip the rest */ while (*s && isspace(*s)) s++; if (!*s) return; if (*s != '\"') { while (*s && !isspace(*s)) { switch (tolower(*s)) { case 'p' : a.priv = 1; break; case 'h' : a.hold = 1; break; case 'd' : a.direct = 1; break; case 'c' : a.crash = 1; break; case 'k' : a.killsent = 1; break; case 0 : return; } s++; } while (*s && isspace(*s)) s++; if (!*s) return; } if ((e = strchr(++s,'\"')) == NULL) return; *e++ = '\0'; a.description = strdup(s); s = e; while (*s && isspace(*s)) s++; if (!*s) { free(a.description); return; } if ((e = strchr(s,' ')) == NULL) e = strchr(s,'\t'); if (e == NULL) e = s; else *e++ = '\0'; while (*s && isspace(*s)) s++; if (!*s) { free(a.description); return; } switch (a.msgtype) { default : case FIDO : a.path = strdup(strlwr(s)); break; case QUICK : a.board = atoi(s); break; } if (a.msgtype == FIDO) { if (chdir(a.path) != 0) { free(a.path); free(a.description); return; } else setcwd(home); } if (a.echomail) { s = e; while (*s && isspace(*s)) s++; if (s && *s) a.tag = strdup(s); else a.tag = NULL; } for (area = 0; area < areas; area++) { /* this is a sneaky use of the ternary operator */ if (((a.msgtype == QUICK) && (arealist[area].msgtype == QUICK))? (a.board == arealist[area].board): (strcmp(a.path,arealist[area].path)==0)) { arealist[area].priv |= a.priv; arealist[area].hold |= a.hold; arealist[area].direct |= a.direct; arealist[area].crash |= a.crash; arealist[area].killsent |= a.killsent; arealist[area].news |= a.news; arealist[area].echomail |= a.echomail; arealist[area].uucp |= a.uucp; arealist[area].netmail |= a.netmail; arealist[area].local |= a.local; if (arealist[area].description == NULL) arealist[area].description = a.description; else if (a.description) free(a.description); if (arealist[area].tag == NULL) arealist[area].tag = a.tag; else if (a.tag) free(a.tag); if ((a.msgtype == FIDO) && (a.path)) free(a.path); return; } } areas++; area = areas - 1; check(username); if (arealist == NULL) arealist = handle_malloc(areas * sizeof(struct _area)); else { check(username); arealist = handle_realloc(arealist, areas * sizeof(struct _area)); check(username); } check(username); if (arealist == NULL) outamemory(); check(username); checkp(arealist); t = arealist + area; checkp(t); checkp(arealist); check(username); *t = a; checkp(t); check(username); }