コード例 #1
0
ファイル: z80asm.c プロジェクト: EliaGeretto/radare2
/* read a number from 0 to 7, for bit, set or res */
static int rd_0_7 (const char **p) {
	*p = delspc (*p);
	if (**p == 0)
		return 0;
	bitsetres = *p;
	skipword (p, ',');
	return 1;
}
コード例 #2
0
ファイル: z80asm.c プロジェクト: EliaGeretto/radare2
/* read a word from input and store it in readword. return 1 on success */
static int rd_word (const char **p, char delimiter) {
	*p = delspc (*p);
	if (**p == 0)
		return 0;
	readword = *p;
	mem_delimiter = delimiter;
	skipword (p, delimiter);
	return 1;
}
コード例 #3
0
ファイル: z80asm.c プロジェクト: EliaGeretto/radare2
/* read a byte from input and store it in readbyte. return 1 on success */
static int rd_byte (const char **p, char delimiter) {
	*p = delspc (*p);
	if (**p == 0)
		return 0;
	readbyte = *p;
	writebyte = 1;
	mem_delimiter = delimiter;
	skipword (p, delimiter);
	return 1;
}
コード例 #4
0
ファイル: loadlayout.c プロジェクト: Kotty666/xymon
void getnamelink(char *l, char **name, char **link)
{
	/* "page NAME title-or-link" splitup */
	char *p;

	dbgprintf("getnamelink(%s, ...)\n", textornull(l));

	*name = null_text;
	*link = null_text;

	/* Skip page/subpage keyword, and whitespace after that */
	p = skipwhitespace(skipword(l));

	*name = p; p = skipword(p);
	if (*p) {
		*p = '\0'; /* Null-terminate pagename */
		p++;
		*link = skipwhitespace(p);
	}
}
コード例 #5
0
ファイル: loadlayout.c プロジェクト: Kotty666/xymon
void getgrouptitle(char *l, char *pageset, char **title, char **onlycols, char **exceptcols)
{
	char grouponlytag[100], groupexcepttag[100], grouptag[100];

	*title = null_text;
	*onlycols = NULL;
	*exceptcols = NULL;

	sprintf(grouponlytag, "%sgroup-only", pageset);
	sprintf(groupexcepttag, "%sgroup-except", pageset);
	sprintf(grouptag, "%sgroup", pageset);

	dbgprintf("getgrouptitle(%s, ...)\n", textornull(l));

	if (strncmp(l, grouponlytag, strlen(grouponlytag)) == 0) {
		char *p;

		*onlycols = skipwhitespace(skipword(l));

		p = skipword(*onlycols);
		if (*p) {
			*p = '\0'; p++;
			*title = skipwhitespace(p);
		}
	}
	else if (strncmp(l, groupexcepttag, strlen(groupexcepttag)) == 0) {
		char *p;

		*exceptcols = skipwhitespace(skipword(l));

		p = skipword(*exceptcols);
		if (*p) {
			*p = '\0'; p++;
			*title = skipwhitespace(p);
		}
	}
	else if (strncmp(l, grouptag, strlen(grouptag)) == 0) {
		*title = skipwhitespace(skipword(l));
	}
}
コード例 #6
0
ファイル: Kronos3vm.cpp プロジェクト: norayr/kronos
void AddDisks(VM& vm)
{
    char* pCommandLine = GetCommandLine();
    char *p = skipword(pCommandLine);
    p = skipspaces(p);
    while (p != null && *p != 0)
    {
        char* q = skipword(p);
        if (q != null && *q != 0) { *q = 0; q++; }
        if (*p == '"') p++;
        if (strlen(p) > 0 && p[strlen(p)-1] == '"') p[strlen(p)-1] = 0;
        if (strlen(p) > 0)
        {
            if (!vm.Disks.AddDisk(p))
                vm.printf("failed to add disk \"%s\"\n", p);
            else
                vm.printf("disk%d \"%s\"\n", vm.Disks.GetCount()-1, p);
        }
        if (q != null && *q != 0) p = skipspaces(q);
        else p = null;
    }
}
コード例 #7
0
uint8_t LanguageIdentifier::guessCountryFromUserAgent(char *ua) {
	if(!ua) return(0);
	uint8_t country = 0;
	while(*ua) {
		if(!(ua = skipwhite(ua)))
			return(0);
		if(s_isLangTag(ua) &&
				(country = s_getCountryFromSpec(ua)) != 0)
				return(country);
		if(!(ua = skipword(ua)))
			return(0);
	}
	return(0);
}
コード例 #8
0
uint8_t LanguageIdentifier::guessLanguageFromUserAgent(char *str) {
	// Mozilla/5.0 (X11; U; Linux i686;
	// en-US; rv:1.8.1.4) Gecko/20070531 Firefox/2.0.0.4
	uint8_t lang = langUnknown;
	while(*str) {
		if(!(str = skipwhite(str)))
			return(langUnknown);
		if((lang = getLanguageFromUserAgent(str)) != langUnknown)
				return(lang);
		if(!(str = skipword(str)))
			return(langUnknown);
	}
	return(langUnknown);
}
コード例 #9
0
ファイル: wc.c プロジェクト: HNGNU/hutils
int
countwords(char *buf, int bufsize) {
	int count;
	char *p;
	count=0;
	for(p=buf;;) {
		if(!(p=skipwhitespace(p,buf,bufsize)))
			break;
		count++;
		if(!(p=skipword(p,buf,bufsize)))
			break;
	}
	return count;
}
コード例 #10
0
ファイル: loadlayout.c プロジェクト: Kotty666/xymon
void getparentnamelink(char *l, xymongen_page_t *toppage, xymongen_page_t **parent, char **name, char **link)
{
	/* "subparent NAME PARENTNAME title-or-link" splitup */
	char *p;
	char *parentname;
	xymonpagelist_t *walk;

	dbgprintf("getnamelink(%s, ...)\n", textornull(l));

	*name = null_text;
	*link = null_text;

	/* Skip page/subpage keyword, and whitespace after that */
	parentname = p = skipwhitespace(skipword(l));
	p = skipword(p);
	if (*p) {
		*p = '\0'; /* Null-terminate pagename */
		p++;
		*name = p = skipwhitespace(p);
	 	p = skipword(p);
		if (*p) {
			*p = '\0'; /* Null-terminate parentname */
			p++;
			*link = skipwhitespace(p);
		}
	}

	for (walk = pagelisthead; (walk && (strcmp(walk->pageentry->name, parentname) != 0)); walk = walk->next) ;
	if (walk) {
		*parent = walk->pageentry;
	}
	else {
		errprintf("Cannot find parent page '%s'\n", parentname);
		*parent = NULL;
	}
}
コード例 #11
0
ファイル: CommandLine.cpp プロジェクト: pyal/eos_cpp
 size_t TFormatOutput::FormLine(const char *str, size_t pos, Stroka &Line) {
     Line = "";
     size_t len = strlen(str);
     for(size_t i = 0; i < Level; i++)
         Line += Ident;
     int NextLine;
     size_t pos1 = pos;
     while(1) {
         pos1 = skipspace(str, pos1, len, NextLine, Line);
         if(NextLine || Line.size() >= MaxLen || pos1 >= len)
             return pos1;
         pos1 = skipword(str, pos1, len, NextLine, Line);
         if(NextLine || Line.size() >= MaxLen || pos1 >= len)
             return pos1;
     }
 }
コード例 #12
0
ファイル: common-utils.c プロジェクト: aravindhramu/glusterfs
char *
get_nth_word (const char *str, int n)
{
        char           buf[4096] = {0};
        char          *start     = NULL;
        char          *word      = NULL;
        int            i         = 0;
        int            word_len  = 0;
        const char    *end       = NULL;

        if (!str)
                goto out;

        snprintf (buf, sizeof (buf), "%s", str);
        start = buf;

        for (i = 0; i < n-1; i++)
                skipword (&start);

        skipwhite (&start);
        end = strpbrk ((const char *)start, " \t\n\0");

        if (!end)
                goto out;

        word_len = abs (end - start);

        word = GF_CALLOC (1, word_len + 1, gf_common_mt_strdup);
        if (!word)
                goto out;

        strncpy (word, start, word_len);
        *(word + word_len) = '\0';
 out:
        return word;
}
コード例 #13
0
static char *parse_histlogfile(char *hostname, char *servicename, char *timespec)
{
	char cause[MAX_LINE_LEN];
	char fn[PATH_MAX];
	char *p;
	FILE *fd;
	char l[MAX_LINE_LEN];
	int causefull = 0;

	cause[0] = '\0';

	sprintf(fn, "%s/%s", xgetenv("XYMONHISTLOGS"), commafy(hostname));
	for (p = strrchr(fn, '/'); (*p); p++) if (*p == ',') *p = '_';
	sprintf(p, "/%s/%s", servicename, timespec);

	dbgprintf("Looking at history logfile %s\n", fn);
	fd = fopen(fn, "r");
	if (fd != NULL) {
		while (!causefull && fgets(l, sizeof(l), fd)) {
			p = strchr(l, '\n'); if (p) *p = '\0';

			if ((l[0] == '&') && (strncmp(l, "&green", 6) != 0)) {
				p = skipwhitespace(skipword(l));
				if ((strlen(cause) + strlen(p) + strlen("<BR>\n") + 1) < sizeof(cause)) {
					strcat(cause, p);
					strcat(cause, "<BR>\n");
				}
				else causefull = 1;
			}
		}

#if 1
		if (strlen(cause) == 0) {
			strcpy(cause, "See detailed log");
		}
#else
		/* What is this code supposed to do ? The sscanf seemingly never succeeds */
		/* storner, 2006-06-02 */
		if (strlen(cause) == 0) {
			int offset;
			rewind(fd);
			if (fgets(l, sizeof(l), fd)) {
				p = strchr(l, '\n'); if (p) *p = '\0';
				if (sscanf(l, "%*s %*s %*s %*s %*s %*s %*s %n", &offset) == 1) {
					strncpy(cause, l+offset, sizeof(cause));
				}
				else {
					errprintf("Scan of file %s failed, l='%s'\n", fn, l);
				}
				cause[sizeof(cause)-1] = '\0';
			}
		}
#endif

		if (causefull) {
			cause[sizeof(cause) - strlen(" [Truncated]") - 1] = '\0';
			strcat(cause, " [Truncated]");
		}

		fclose(fd);
	}
	else {
		strcpy(cause, "No historical status available");
	}

	return strdup(cause);
}
コード例 #14
0
ファイル: loadlayout.c プロジェクト: Kotty666/xymon
xymongen_page_t *load_layout(char *pgset)
{
	char	pagetag[100], subpagetag[100], subparenttag[100], 
		vpagetag[100], vsubpagetag[100], vsubparenttag[100], 
		grouptag[100], summarytag[100], titletag[100], hosttag[100];
	char 	*name, *link, *onlycols, *exceptcols;
	char 	hostname[MAX_LINE_LEN];
	xymongen_page_t 	*toppage, *curpage, *cursubpage, *cursubparent;
	group_t *curgroup;
	host_t	*curhost;
	char	*curtitle;
	int	ip1, ip2, ip3, ip4;
	char	*p;
	int	fqdn = get_fqdn();
	char	*cfgdata, *inbol, *ineol, insavchar = '\0';

	if (loadhostsfromxymond) {
		if (load_hostnames("@", NULL, fqdn) != 0) {
			errprintf("Cannot load host configuration from xymond\n");
			return NULL;
		}
	}
	else {
		if (load_hostnames(xgetenv("HOSTSCFG"), "dispinclude", fqdn) != 0) {
			errprintf("Cannot load host configuration from %s\n", xgetenv("HOSTSCFG"));
			return NULL;
		}
	}

	if (first_host() == NULL) {
		errprintf("Empty configuration from %s\n", (loadhostsfromxymond ? "xymond" : xgetenv("HOSTSCFG")));
		return NULL;
	}

	dbgprintf("load_layout(pgset=%s)\n", textornull(pgset));

	/*
	 * load_hostnames() picks up the hostname definitions, but not the page
	 * layout. So we will scan the file again, this time doing the layout.
	 */

	if (pgset == NULL) pgset = "";
	sprintf(pagetag, "%spage", pgset);
	sprintf(subpagetag, "%ssubpage", pgset);
	sprintf(subparenttag, "%ssubparent", pgset);
	sprintf(vpagetag, "v%spage", pgset);
	sprintf(vsubpagetag, "v%ssubpage", pgset);
	sprintf(vsubparenttag, "v%ssubparent", pgset);
	sprintf(grouptag, "%sgroup", pgset);
	sprintf(summarytag, "%ssummary", pgset);
	sprintf(titletag, "%stitle", pgset);
	sprintf(hosttag, "%s:", pgset); for (p=hosttag; (*p); p++) *p = toupper((int)*p);

	toppage = init_page("", "", 0);
	addtopagelist(toppage);
	curpage = NULL;
	cursubpage = NULL;
	curgroup = NULL;
	curhost = NULL;
	cursubparent = NULL;
	curtitle = NULL;

	inbol = cfgdata = hostscfg_content();
	while (inbol && *inbol) {
		inbol += strspn(inbol, " \t");
		ineol = strchr(inbol, '\n');
		if (ineol) {
			while ((ineol > inbol) && (isspace(*ineol) || (*ineol == '\n'))) ineol--;
			if (*ineol != '\n') ineol++;

			insavchar = *ineol;
			*ineol = '\0';
		}

		dbgprintf("load_layout: -- got line '%s'\n", inbol);

		if ((strncmp(inbol, pagetag, strlen(pagetag)) == 0) || (strncmp(inbol, vpagetag, strlen(vpagetag)) == 0)) {
			getnamelink(inbol, &name, &link);
			if (curpage == NULL) {
				/* First page - hook it on toppage as a subpage from there */
				curpage = toppage->subpages = init_page(name, link, (strncmp(inbol, vpagetag, strlen(vpagetag)) == 0));
			}
			else {
				curpage = curpage->next = init_page(name, link, (strncmp(inbol, vpagetag, strlen(vpagetag)) == 0));
			}

			curpage->parent = toppage;
			if (curtitle) { 
				curpage->pretitle = curtitle; 
				curtitle = NULL; 
			}
			cursubpage = NULL;
			cursubparent = NULL;
			curgroup = NULL;
			curhost = NULL;
			addtopagelist(curpage);
		}
		else if ( (strncmp(inbol, subpagetag, strlen(subpagetag)) == 0) || (strncmp(inbol, vsubpagetag, strlen(vsubpagetag)) == 0) ) {
			if (curpage == NULL) {
				errprintf("'subpage' ignored, no preceding 'page' tag : %s\n", inbol);
				goto nextline;
			}

			getnamelink(inbol, &name, &link);
			if (cursubpage == NULL) {
				cursubpage = curpage->subpages = init_page(name, link, (strncmp(inbol, vsubpagetag, strlen(vsubpagetag)) == 0));
			}
			else {
				cursubpage = cursubpage->next = init_page(name, link, (strncmp(inbol, vsubpagetag, strlen(vsubpagetag)) == 0));
			}
			cursubpage->parent = curpage;
			if (curtitle) { 
				cursubpage->pretitle = curtitle; 
				curtitle = NULL;
			}
			cursubparent = NULL;
			curgroup = NULL;
			curhost = NULL;
			addtopagelist(cursubpage);
		}
		else if ( (strncmp(inbol, subparenttag, strlen(subparenttag)) == 0) || (strncmp(inbol, vsubparenttag, strlen(vsubparenttag)) == 0) ) {
			xymongen_page_t *parentpage, *walk;

			getparentnamelink(inbol, toppage, &parentpage, &name, &link);
			if (parentpage == NULL) {
				errprintf("'subparent' ignored, unknown parent page: %s\n", inbol);
				goto nextline;
			}

			cursubparent = init_page(name, link, (strncmp(inbol, vsubparenttag, strlen(vsubparenttag)) == 0));
			if (parentpage->subpages == NULL) {
				parentpage->subpages = cursubparent;
			} 
			else {
				for (walk = parentpage->subpages; (walk->next); (walk = walk->next)) ;
				walk->next = cursubparent;
			}
			if (curtitle) { 
				cursubparent->pretitle = curtitle; 
				curtitle = NULL;
			}
			cursubparent->parent = parentpage;
			curgroup = NULL;
			curhost = NULL;
			addtopagelist(cursubparent);
		}
		else if (strncmp(inbol, grouptag, strlen(grouptag)) == 0) {
			int sorthosts = (strstr(inbol, "group-sorted") != NULL);

			getgrouptitle(inbol, pgset, &link, &onlycols, &exceptcols);
			if (curgroup == NULL) {
				curgroup = init_group(link, onlycols, exceptcols, sorthosts);
				if (cursubparent != NULL) {
					cursubparent->groups = curgroup;
				}
				else if (cursubpage != NULL) {
					/* We're in a subpage */
					cursubpage->groups = curgroup;
				}
				else if (curpage != NULL) {
					/* We're on a main page */
					curpage->groups = curgroup;
				}
				else {
					/* We're on the top page */
					toppage->groups = curgroup;
				}
			}
			else {
				curgroup->next = init_group(link, onlycols, exceptcols, sorthosts);
				curgroup = curgroup->next;
			}
			if (curtitle) { curgroup->pretitle = curtitle; curtitle = NULL; }
			curhost = NULL;
		}
		else if (sscanf(inbol, "%3d.%3d.%3d.%3d %s", &ip1, &ip2, &ip3, &ip4, hostname) == 5) {
			void *xymonhost = NULL;
			int dialup, nonongreen, crittime = 1;
			double warnpct = reportwarnlevel;
			int warnstops = reportwarnstops;
			char *displayname, *clientalias, *comment, *description;
			char *alertlist, *onwaplist, *reporttime;
			char *nopropyellowlist, *nopropredlist, *noproppurplelist, *nopropacklist;
			char *targetpagelist[MAX_TARGETPAGES_PER_HOST];
			int targetpagecount;
			char *hval;

			/* Check for ".default." hosts - they are ignored. */
			if (*hostname == '.') goto nextline;

			if (!fqdn) {
				/* Strip any domain from the hostname */
				char *p = strchr(hostname, '.');
				if (p) *p = '\0';
			}

			/* Get the info */
			xymonhost = hostinfo(hostname);
			if (xymonhost == NULL) {
				errprintf("Confused - hostname '%s' cannot be found. Ignored\n", hostname);
				goto nextline;
			}

			/* Check for no-display hosts - they are ignored. */
			/* But only when we're building the default pageset */
			if ((strlen(pgset) == 0) && (xmh_item(xymonhost, XMH_FLAG_NODISP) != NULL)) goto nextline;

			for (targetpagecount=0; (targetpagecount < MAX_TARGETPAGES_PER_HOST); targetpagecount++) 
				targetpagelist[targetpagecount] = NULL;
			targetpagecount = 0;

			dialup = (xmh_item(xymonhost, XMH_FLAG_DIALUP) != NULL);
			nonongreen = (xmh_item(xymonhost, XMH_FLAG_NONONGREEN) != NULL);

			alertlist = xmh_item(xymonhost, XMH_NK);
			hval = xmh_item(xymonhost, XMH_NKTIME); if (hval) crittime = within_sla(xmh_item(xymonhost, XMH_HOLIDAYS), hval, 0);

			onwaplist = xmh_item(xymonhost, XMH_WML);
			nopropyellowlist = xmh_item(xymonhost, XMH_NOPROPYELLOW);
			if (nopropyellowlist == NULL) nopropyellowlist = xmh_item(xymonhost, XMH_NOPROP);
			nopropredlist = xmh_item(xymonhost, XMH_NOPROPRED);
			noproppurplelist = xmh_item(xymonhost, XMH_NOPROPPURPLE);
			nopropacklist = xmh_item(xymonhost, XMH_NOPROPACK);
			displayname = xmh_item(xymonhost, XMH_DISPLAYNAME);
			comment = xmh_item(xymonhost, XMH_COMMENT);
			description = xmh_item(xymonhost, XMH_DESCRIPTION);
			hval = xmh_item(xymonhost, XMH_WARNPCT); if (hval) warnpct = atof(hval);
			hval = xmh_item(xymonhost, XMH_WARNSTOPS); if (hval) warnstops = atof(hval);
			reporttime = xmh_item(xymonhost, XMH_REPORTTIME);

			clientalias = xmh_item(xymonhost, XMH_CLIENTALIAS);
			if (xymonhost && (strcmp(xmh_item(xymonhost, XMH_HOSTNAME), clientalias) == 0)) clientalias = NULL;

			if (xymonhost && (strlen(pgset) > 0)) {
				/* Walk the clone-list and pick up the target pages for this host */
				void *cwalk = xymonhost;
				do {
					hval = xmh_item_walk(cwalk);
					while (hval) {
						if (strncasecmp(hval, hosttag, strlen(hosttag)) == 0)
							targetpagelist[targetpagecount++] = strdup(hval+strlen(hosttag));
						hval = xmh_item_walk(NULL);
					}

					cwalk = next_host(cwalk, 1);
				} while (cwalk && 
					 (strcmp(xmh_item(cwalk, XMH_HOSTNAME), xmh_item(xymonhost, XMH_HOSTNAME)) == 0) &&
					 (targetpagecount < MAX_TARGETPAGES_PER_HOST) );

				/*
				 * HACK: Check if the pageset tag is present at all in the host
				 * entry. If it isn't, then drop this incarnation of the host.
				 *
				 * Without this, the following hosts.cfg file will have the
				 * www.hswn.dk host listed twice on the alternate pageset:
				 *
				 * adminpage nyc NYC
				 *
				 * 127.0.0.1   localhost      # bbd http://localhost/ CLIENT:osiris
				 * 172.16.10.2 www.xymon.com  # http://www.xymon.com/ ADMIN:nyc ssh noinfo
				 *
				 * page superdome Superdome
				 * 172.16.10.2 www.xymon.com # noconn
				 *
				 */
				if (strstr(inbol, hosttag) == NULL) targetpagecount = 0;
			}

			if (strlen(pgset) == 0) {
				/*
				 * Default pageset generated. Put the host into
				 * whatever group or page is current.
				 */
				if (curhost == NULL) {
					curhost = init_host(hostname, 0, displayname, clientalias,
							    comment, description,
							    ip1, ip2, ip3, ip4, dialup, 
							    warnpct, warnstops, reporttime,
							    alertlist, crittime, onwaplist,
							    nopropyellowlist, nopropredlist, noproppurplelist, nopropacklist);
					if (curgroup != NULL) {
						curgroup->hosts = curhost;
					}
					else if (cursubparent != NULL) {
						cursubparent->hosts = curhost;
					}
					else if (cursubpage != NULL) {
						cursubpage->hosts = curhost;
					}
					else if (curpage != NULL) {
						curpage->hosts = curhost;
					}
					else {
						toppage->hosts = curhost;
					}
				}
				else {
					curhost = curhost->next = init_host(hostname, 0, displayname, clientalias,
									    comment, description,
									    ip1, ip2, ip3, ip4, dialup,
									    warnpct, warnstops, reporttime,
									    alertlist, crittime, onwaplist,
									    nopropyellowlist,nopropredlist, 
									    noproppurplelist, nopropacklist);
				}
				curhost->parent = (cursubparent ? cursubparent : (cursubpage ? cursubpage : curpage));
				if (curtitle) { curhost->pretitle = curtitle; curtitle = NULL; }
				curhost->nonongreen = nonongreen;
			}
			else if (targetpagecount) {

				int pgnum;

				for (pgnum=0; (pgnum < targetpagecount); pgnum++) {
					char *targetpagename = targetpagelist[pgnum];

					char savechar;
					int wantedgroup = 0;
					xymonpagelist_t *targetpage = NULL;

					/* Put the host into the page specified by the PGSET: tag */
					p = strchr(targetpagename, ',');
					if (p) {
						savechar = *p;
						*p = '\0';
						wantedgroup = atoi(p+1);
					}
					else {
						savechar = '\0';
						p = targetpagename + strlen(targetpagename);
					}

					/* Find the page */
					if (strcmp(targetpagename, "*") == 0) {
						*targetpagename = '\0';
					}
					for (targetpage = pagelisthead; (targetpage && (strcmp(targetpagename, targetpage->pageentry->name) != 0)); targetpage = targetpage->next) ;

					*p = savechar;
					if (targetpage == NULL) {
						errprintf("Warning: Cannot find any target page named '%s' in set '%s' - dropping host '%s'\n", 
							targetpagename, pgset, hostname);
					}
					else {
						host_t *newhost = init_host(hostname, 0, displayname, clientalias,
									    comment, description,
									    ip1, ip2, ip3, ip4, dialup,
									    warnpct, warnstops, reporttime,
									    alertlist, crittime, onwaplist,
									    nopropyellowlist,nopropredlist, 
									    noproppurplelist, nopropacklist);

						if (wantedgroup > 0) {
							group_t *gwalk;
							host_t  *hwalk;
							int i;

							for (gwalk = targetpage->pageentry->groups, i=1; (gwalk && (i < wantedgroup)); i++,gwalk=gwalk->next) ;
							if (gwalk) {
								if (gwalk->hosts == NULL)
									gwalk->hosts = newhost;
								else {
									for (hwalk = gwalk->hosts; (hwalk->next); hwalk = hwalk->next) ;
									hwalk->next = newhost;
								}
							}
							else {
								errprintf("Warning: Cannot find group %d for host %s - dropping host\n",
									wantedgroup, hostname);
							}
						}
						else {
							/* Just put in on the page's hostlist */
							host_t *walk;
	
							if (targetpage->pageentry->hosts == NULL)
								targetpage->pageentry->hosts = newhost;
							else {
								for (walk = targetpage->pageentry->hosts; (walk->next); walk = walk->next) ;
								walk->next = newhost;
							}
						}

						newhost->parent = targetpage->pageentry;
						if (curtitle) newhost->pretitle = curtitle;
					}

					curtitle = NULL;
				}
			}
		}
		else if (strncmp(inbol, summarytag, strlen(summarytag)) == 0) {
			/* summary row.column      IP-ADDRESS-OF-PARENT    http://xymon.com/ */
			char sumname[MAX_LINE_LEN];
			char receiver[MAX_LINE_LEN];
			char url[MAX_LINE_LEN];
			summary_t *newsum;

			if (sscanf(inbol, "summary %s %s %s", sumname, receiver, url) == 3) {
				newsum = init_summary(sumname, receiver, url);
				newsum->next = sumhead;
				sumhead = newsum;
			}
		}
		else if (strncmp(inbol, titletag, strlen(titletag)) == 0) {
			/* Save the title for the next entry */
			curtitle = strdup(skipwhitespace(skipword(inbol)));
		}

nextline:
		if (ineol) {
			*ineol = insavchar;
			if (*ineol != '\n') ineol = strchr(ineol, '\n');

			inbol = (ineol ? ineol+1 : NULL);
		}
		else
			inbol = NULL;
	}

	xfree(cfgdata);
	return toppage;
}
コード例 #15
0
ファイル: loadlayout.c プロジェクト: Kotty666/xymon
host_t *init_host(char *hostname, int issummary,
		  char *displayname, char *clientalias,
		  char *comment, char *description,
		  int ip1, int ip2, int ip3, int ip4, 
		  int dialup, double warnpct, int warnstops, char *reporttime,
		  char *alerts, int crittime, char *waps,
		  char *nopropyellowtests, char *nopropredtests, char *noproppurpletests, char *nopropacktests)
{
	host_t 		*newhost = (host_t *) calloc(1, sizeof(host_t));
	hostlist_t	*oldlist;

	hostcount++;
	dbgprintf("init_host(%s)\n", textornull(hostname));

	newhost->hostname = newhost->displayname = strdup(hostname);
	if (displayname) newhost->displayname = strdup(displayname);
	newhost->clientalias = (clientalias ? strdup(clientalias) : NULL);
	newhost->comment = (comment ? strdup(comment) : NULL);
	newhost->description = (description ? strdup(description) : NULL);
	sprintf(newhost->ip, "%d.%d.%d.%d", ip1, ip2, ip3, ip4);
	newhost->pretitle = NULL;
	newhost->entries = NULL;
	newhost->color = -1;
	newhost->oldage = 1;
	newhost->dialup = dialup;
	newhost->reportwarnlevel = warnpct;
	newhost->reportwarnstops = warnstops;
	newhost->reporttime = (reporttime ? strdup(reporttime) : NULL);
	if (alerts && crittime) {
		newhost->alerts = strdup(alerts);
	}
	else {
		newhost->alerts = NULL;
	}
	newhost->anywaps = 0;
	newhost->wapcolor = -1;

	/* Wap set is :
	 * - Specific WML: tag
	 * - NK: tag
	 * - --wap=COLUMN cmdline option
	 * - NULL
	 */
	if (waps || alerts) {
		newhost->waps = strdup(waps ? waps : alerts);
	}
	else {
		newhost->waps = wapcolumns;
	}

	if (nopropyellowtests) {
		char *p;
		p = skipword(nopropyellowtests); if (*p) *p = '\0'; else p = NULL;
		newhost->nopropyellowtests = strdup(build_noprop(nopropyellowdefault, nopropyellowtests));
		if (p) *p = ' ';
	}
	else {
		newhost->nopropyellowtests = nopropyellowdefault;
	}
	if (nopropredtests) {
		char *p;
		p = skipword(nopropredtests); if (*p) *p = '\0'; else p = NULL;
		newhost->nopropredtests = strdup(build_noprop(nopropreddefault, nopropredtests));
		if (p) *p = ' ';
	}
	else {
		newhost->nopropredtests = nopropreddefault;
	}
	if (noproppurpletests) {
		char *p;
		p = skipword(noproppurpletests); if (*p) *p = '\0'; else p = NULL;
		newhost->noproppurpletests = strdup(build_noprop(noproppurpledefault, noproppurpletests));
		if (p) *p = ' ';
	}
	else {
		newhost->noproppurpletests = noproppurpledefault;
	}
	if (nopropacktests) {
		char *p;
		p = skipword(nopropacktests); if (*p) *p = '\0'; else p = NULL;
		newhost->nopropacktests = strdup(build_noprop(nopropackdefault, nopropacktests));
		if (p) *p = ' ';
	}
	else {
		newhost->nopropacktests = nopropackdefault;
	}

	newhost->parent = NULL;
	newhost->nonongreen = 0;
	newhost->next = NULL;

	/* Summary hosts don't go into the host list */
	if (issummary) return newhost;

	/*
	 * Add this host to the hostlist_t list of known hosts.
	 * HOWEVER: It might be a duplicate! In that case, we need
	 * to figure out which host record we want to use.
	 */
	oldlist = find_hostlist(hostname);
	if (oldlist == NULL) {
		hostlist_t *newlist;

		newlist = (hostlist_t *) calloc(1, sizeof(hostlist_t));
		newlist->hostentry = newhost;
		newlist->clones = NULL;
		add_to_hostlist(newlist);
	}
	else {
		hostlist_t *clone = (hostlist_t *) calloc(1, sizeof(hostlist_t));

		dbgprintf("Duplicate host definition for host '%s'\n", hostname);

		clone->hostentry = newhost;
		clone->clones = oldlist->clones;
		oldlist->clones = clone;
	}

	return newhost;
}
コード例 #16
0
ファイル: z80asm.c プロジェクト: EliaGeretto/radare2
/* do the actual work */
static int assemble (const char *str, unsigned char *_obuf) {
	int ifcount = 0, noifcount = 0;
	const char *ptr;
	char *bufptr;
	int r, s;			/* registers */

	obuflen = 0;
	obuf = _obuf;
	/* continue assembling until the last input file is done */
	//for (file = 0; file < infilecount; ++file)
	do {
		int cmd, cont = 1;
		// XXX: must free
		z80buffer = strdup (str);
		if (!cont)
			break;		/* break to next source file */
		//	  if (havelist)
		//	    fprintf (listfile, "%04x", addr);
		for (bufptr = z80buffer; (bufptr = strchr (bufptr, '\n'));)
			*bufptr = ' ';
		for (bufptr = z80buffer; (bufptr = strchr (bufptr, '\r'));)
			*bufptr = ' ';
		ptr = z80buffer;
		//lastlabel = NULL;
		baseaddr = addr;
		++stack[sp].line;
		ptr = delspc (ptr);
		if (!*ptr)
			continue;
		if (!noifcount && !define_macro)
			readlabel (&ptr, 1);
		else
			readlabel (&ptr, 0);
		ptr = delspc (ptr);
		if (!*ptr)
			continue;
		comma = 0;
		indexed = 0;
		indexjmp = 0;
		writebyte = 0;
		readbyte = 0;
		readword = 0;
		cmd = readcommand (&ptr) - 1;
			int i, have_quote;
			switch (cmd) {
			case Z80_ADC:
				if (!(r = rd_a_hl (&ptr)))
					break;
				if (r == HL) {
					if (!(r = rd_rr_ (&ptr)))
						break;
					wrtb (0xED);
					wrtb (0x4A + 0x10 * --r);
					break;
				}
				if (!(r = rd_r (&ptr)))
					break;
				wrtb (0x88 + --r);
				break;
			case Z80_ADD:
				if (!(r = rd_r_add (&ptr)))
					break;
				if (r == addHL) {
					if (!(r = rd_rrxx (&ptr)))
						break;
					wrtb (0x09 + 0x10 * --r);	/* ADD HL/IX/IY, qq  */
					break;
				}
				if (has_argument (&ptr)) {
					if (r != A) {
						eprintf ("parse error before: %s\n", ptr);
						break;
					}
					if (!(r = rd_r (&ptr)))
						break;
					wrtb (0x80 + --r);	/* ADD A,r  */
					break;
				}
				wrtb (0x80 + --r);	/* ADD r  */
				break;
			case Z80_AND:
				if (!(r = rd_r (&ptr)))
					break;
				wrtb (0xA0 + --r);
				break;
			case Z80_BIT:
				if (!rd_0_7 (&ptr))
					break;
				rd_comma (&ptr);
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x40 + (r - 1));
				break;
			case Z80_CALL:
				if ((r = rd_cc (&ptr))) {
					wrtb (0xC4 + 8 * --r);
					rd_comma (&ptr);
				} else wrtb (0xCD);
				break;
			case Z80_CCF:
				wrtb (0x3F);
				break;
			case Z80_CP:
				if (!(r = rd_r (&ptr)))
					break;
				wrtb (0xB8 + --r);
				break;
			case Z80_CPD:
				wrtb (0xED);
				wrtb (0xA9);
				break;
			case Z80_CPDR:
				wrtb (0xED);
				wrtb (0xB9);
				break;
			case Z80_CPI:
				wrtb (0xED);
				wrtb (0xA1);
				break;
			case Z80_CPIR:
				wrtb (0xED);
				wrtb (0xB1);
				break;
			case Z80_CPL:
				wrtb (0x2F);
				break;
			case Z80_DAA:
				wrtb (0x27);
				break;
			case Z80_DEC:
				if (!(r = rd_r_rr (&ptr)))
					break;
				if (r < 0) {
					wrtb (0x05 - 8 * ++r);
					break;
				}
				wrtb (0x0B + 0x10 * --r);
				break;
			case Z80_DI:
				wrtb (0xF3);
				break;
			case Z80_DJNZ:
				wrtb (0x10);
				//rd_wrt_jr (&ptr, '\0');
				break;
			case Z80_EI:
				wrtb (0xFB);
				break;
			case Z80_EX:
				if (!(r = rd_ex1 (&ptr)))
					break;
				switch (r) {
				case DE:
					if (!rd_hl (&ptr))
						break;
					wrtb (0xEB);
					break;
				case AF:
					if (!rd_af_ (&ptr))
						break;
					wrtb (0x08);
					break;
				default:
					if (!rd_hlx (&ptr))
						break;
					wrtb (0xE3);
				}
				break;
			case Z80_EXX:
				wrtb (0xD9);
				break;
			case Z80_HALT:
				wrtb (0x76);
				break;
			case Z80_IM:
				if (!(r = rd_0_2 (&ptr)))
					break;
				wrtb (0xED);
				wrtb (0x46 + 8 * --r);
				break;
			case Z80_IN:
				if (!(r = rd_in (&ptr)))
					break;
				if (r == A) {
					if (!(r = rd_nnc (&ptr)))
						break;
					if (r == C) {
						wrtb (0xED);
						wrtb (0x40 + 8 * (A - 1));
						break;
					}
					wrtb (0xDB);
					break;
				}
				if (!rd_c (&ptr))
					break;
				wrtb (0xED);
				wrtb (0x40 + 8 * --r);
				break;
			case Z80_INC:
				if (!(r = rd_r_rr (&ptr)))
					break;
				if (r < 0) {
					wrtb (0x04 - 8 * ++r);
					break;
				}
				wrtb (0x03 + 0x10 * --r);
				break;
			case Z80_IND:
				wrtb (0xED);
				wrtb (0xAA);
				break;
			case Z80_INDR:
				wrtb (0xED);
				wrtb (0xBA);
				break;
			case Z80_INI:
				wrtb (0xED);
				wrtb (0xA2);
				break;
			case Z80_INIR:
				wrtb (0xED);
				wrtb (0xB2);
				break;
			case Z80_JP:
				r = rd_jp (&ptr);
				if (r < 0) {
					wrtb (0xE9);
					break;
				}
				if (r) {
					wrtb (0xC2 + 8 * --r);
					rd_comma (&ptr);
				} else wrtb (0xC3);
				break;
			case Z80_JR:
				r = rd_jr (&ptr);
				if (r)
					rd_comma (&ptr);
				wrtb (0x18 + 8 * r);
				break;
			case Z80_LD:
				if (!(r = rd_ld (&ptr)))
					break;
				switch (r) {
				case ld_BC:
				case ld_DE:
					if (!rd_a (&ptr))
						break;
					wrtb (0x02 + 0x10 * (r == ld_DE));
					break;
				case ld_HL:
					r = rd_ld_hl (&ptr);
					wrtb (0x70 + --r);
					break;
				case ld_NN:
					if (!(r = rd_ld_nn (&ptr)))
						break;
					if (r == ld_nnA || r == ld_nnHL) {
						wrtb (0x22 + 0x10 * (r == ld_nnA));
						break;
					}
					wrtb (0xED);
					wrtb (0x43 + 0x10 * --r);
					break;
				case ldA:
					if (!(r = rd_lda (&ptr)))
						break;
					if (r == A_NN) {
						wrtb (0x3A);
						break;
					}
					if (r == A_I || r == A_R) {
						wrtb (0xED);
						wrtb (0x57 + 8 * (r == A_R));
						break;
					}
					if (r < 0) {
						wrtb (0x0A - 0x10 * ++r);
						break;
					}
					wrtb (0x78 + --r);
					break;
				case ldB:
				case ldC:
				case ldD:
				case ldE:
				case ldH:
				case ldL:
					if (!(s = rd_ldbcdehla (&ptr)))
						break;
					wrtb (0x40 + 0x08 * (r - 7) + (s - 1));
					break;
				case ldBC:
				case ldDE:
					s = rd_nn_nn (&ptr);
					if (s == _NN) {
						wrtb (0xED);
						wrtb (0x4B + 0x10 * (r == ldDE));
						break;
					}
					wrtb (0x01 + (r == ldDE) * 0x10);
					break;
				case ldHL:
					r = rd_nn_nn (&ptr);
					wrtb (0x21 + (r == _NN) * 9);
					break;
				case ldI:
				case ldR:
					if (!rd_a (&ptr))
						break;
					wrtb (0xED);
					wrtb (0x47 + 0x08 * (r == ldR));
					break;
				case ldSP:
					r = rd_sp (&ptr);
					if (r == SPHL) {
						wrtb (0xF9);
						break;
					}
					if (r == SPNN) {
						wrtb (0x31);
						break;
					}
					wrtb (0xED);
					wrtb (0x7B);
					break;
				}
				break;
			case Z80_LDD:
				wrtb (0xED);
				wrtb (0xA8);
				break;
			case Z80_LDDR:
				wrtb (0xED);
				wrtb (0xB8);
				break;
			case Z80_LDI:
				wrtb (0xED);
				wrtb (0xA0);
				break;
			case Z80_LDIR:
				wrtb (0xED);
				wrtb (0xB0);
				break;
			case Z80_NEG:
				wrtb (0xED);
				wrtb (0x44);
				break;
			case Z80_NOP:
				wrtb (0x00);
				break;
			case Z80_OR:
				if (!(r = rd_r (&ptr)))
					break;
				wrtb (0xB0 + --r);
				break;
			case Z80_OTDR:
				wrtb (0xED);
				wrtb (0xBB);
				break;
			case Z80_OTIR:
				wrtb (0xED);
				wrtb (0xB3);
				break;
			case Z80_OUT:
				if (!(r = rd_nnc (&ptr)))
					break;
				if (r == C) {
					if (!(r = rd_out (&ptr)))
						break;
					wrtb (0xED);
					wrtb (0x41 + 8 * --r);
					break;
				}
				if (!rd_a (&ptr))
					break;
				wrtb (0xD3);
				break;
			case Z80_OUTD:
				wrtb (0xED);
				wrtb (0xAB);
				break;
			case Z80_OUTI:
				wrtb (0xED);
				wrtb (0xA3);
				break;
			case Z80_POP:
				if (!(r = rd_stack (&ptr)))
					break;
				wrtb (0xC1 + 0x10 * --r);
				break;
			case Z80_PUSH:
				if (!(r = rd_stack (&ptr)))
					break;
				wrtb (0xC5 + 0x10 * --r);
				break;
			case Z80_RES:
				if (!rd_0_7 (&ptr))
					break;
				rd_comma (&ptr);
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x80 + --r);
				break;
			case Z80_RET:
				if (!(r = rd_cc (&ptr))) {
					wrtb (0xC9);
					break;
				}
				wrtb (0xC0 + 8 * --r);
				break;
			case Z80_RETI:
				wrtb (0xED);
				wrtb (0x4D);
				break;
			case Z80_RETN:
				wrtb (0xED);
				wrtb (0x45);
				break;
			case Z80_RL:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x10 + --r);
				break;
			case Z80_RLA:
				wrtb (0x17);
				break;
			case Z80_RLC:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x00 + --r);
				break;
			case Z80_RLCA:
				wrtb (0x07);
				break;
			case Z80_RLD:
				wrtb (0xED);
				wrtb (0x6F);
				break;
			case Z80_RR:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x18 + --r);
				break;
			case Z80_RRA:
				wrtb (0x1F);
				break;
			case Z80_RRC:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x08 + --r);
				break;
			case Z80_RRCA:
				wrtb (0x0F);
				break;
			case Z80_RRD:
				wrtb (0xED);
				wrtb (0x67);
				break;
			case Z80_RST:
				ptr = "";
				break;
			case Z80_SBC:
				if (!(r = rd_a_hl (&ptr)))
					break;
				if (r == HL) {
					if (!(r = rd_rr_ (&ptr)))
						break;
					wrtb (0xED);
					wrtb (0x42 + 0x10 * --r);
					break;
				}
				if (!(r = rd_r (&ptr)))
					break;
				wrtb (0x98 + --r);
				break;
			case Z80_SCF:
				wrtb (0x37);
				break;
			case Z80_SET:
				if (!rd_0_7 (&ptr))
					break;
				rd_comma (&ptr);
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0xC0 + --r);
				break;
			case Z80_SLA:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x20 + --r);
				break;
			case Z80_SLI:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x30 + --r);
				break;
			case Z80_SRA:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x28 + --r);
				break;
			case Z80_SRL:
				if (!(r = rd_r_ (&ptr)))
					break;
				wrtb (0xCB);
				wrtb (0x38 + --r);
				break;
			case Z80_SUB:
				if (!(r = rd_r (&ptr)))
					break;
				if (has_argument (&ptr)) {/* SUB A,r ?  */
					if (r != A) {
						eprintf ("parse error before: %s\n", ptr);
						break;
					}
					if (!(r = rd_r (&ptr)))
						break;
				}
				wrtb (0x90 + --r);
				break;
			case Z80_XOR:
				if (!(r = rd_r (&ptr)))
					break;
				wrtb (0xA8 + --r);
				break;
			case Z80_DEFB:
			case Z80_DB:
			case Z80_DEFM:
			case Z80_DM:
				ptr = delspc (ptr);
				while (1) {
					have_quote = (*ptr == '"' || *ptr == '\'');
					if (have_quote) {
						/* Read string.  */
						int quote = *ptr;
						++ptr;
						while (*ptr != quote)
						{
							write_one_byte (rd_character (&ptr, NULL, 1), 0);
							if (*ptr == 0)
							{
								eprintf ("end of line in quoted string\n");
								break;
							}
						}
						++ptr;
					} else {
						/* Read expression.  */
						skipword (&ptr, ',');
					}
					ptr = delspc (ptr);
					if (*ptr == ',') {
						++ptr;
						continue;
					}
					if (*ptr != 0)
						eprintf ("junk in byte definition: %s\n", ptr);
					break;
				}
				break;
			case Z80_DEFW:
			case Z80_DW:
				if (!(r = rd_word (&ptr, ','))) {
					eprintf ("No data for word definition\n");
					break;
				}
				while (1) {
					ptr = delspc (ptr);
					if (*ptr != ',')
						break;
					++ptr;
					if (!(r = rd_word (&ptr, ',')))
						eprintf ("Missing expression in defw\n");
				}
				break;
			case Z80_DEFS:
			case Z80_DS:
				r = rd_expr (&ptr, ',', NULL, sp, 1);
				if (r < 0) {
					eprintf ("ds should have its first argument >=0"
							" (not -0x%x)\n", -r);
					break;
				}
				ptr = delspc (ptr);
				if (*ptr) {
					rd_comma (&ptr);
					readbyte = 0;
					rd_byte (&ptr, '\0');
					writebyte = 0;
					break;
				}
				for (i = 0; i < r; i++) {
					write_one_byte (0, 0);
				}
				break;
			case Z80_END:
				break;
			case Z80_ORG:
				addr = rd_expr (&ptr, '\0', NULL, sp, 1) & 0xffff;
				break;
			case Z80_IF:
				if (rd_expr (&ptr, '\0', NULL, sp, 1))
					ifcount++;
				else
					noifcount++;
				break;
			case Z80_ELSE:
				if (ifcount == 0)
				{
					eprintf ("else without if\n");
					break;
				}
				noifcount = 1;
				ifcount--;
				break;
			case Z80_ENDIF:
				if (noifcount == 0 && ifcount == 0) {
					eprintf ("endif without if\n");
					break;
				}
				if (noifcount)
					noifcount--;
				else
					ifcount--;
				break;
			case Z80_ENDM:
				if (stack[sp].file)
					eprintf ("endm outside macro definition\n");
				break;
			case Z80_SEEK:
				eprintf ("seek error\n");
				break;
			default:
				//eprintf ("command or comment expected (was %s)\n", ptr);
				return 0;
			}
	} while (0);
	//free (infile);
	return obuflen;
}