コード例 #1
0
ファイル: myserver.cpp プロジェクト: rupinder/GNU-MyServer
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 ());
    }
}
コード例 #2
0
ファイル: config.c プロジェクト: jrnutt/msged
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);
}