예제 #1
0
파일: json_output.c 프로젝트: rubenk/burp
int json_cntr_to_file(struct asfd *asfd, struct cntr *cntr)
{
	int ret=-1;
	if(json_start(asfd)
	  || do_counters(cntr))
		goto end;
	ret=0;
end:
	if(json_end(asfd)) return -1;
	return ret;
}
예제 #2
0
int main(int argc, char *argv[])
{
	char buff[1024];
	FILE *fi, *fo;
	int skip_mode = 0, ifdef_level = 0, skip_level = 0, line = 0;

	if (argc < 3)
	{
		printf("usage:\n%s <file_in> <file_out> [defines...]\n", argv[0]);
		return 1;
	}

	fi = fopen(argv[1], "r");
	if (fi == NULL)
	{
		printf("failed to open: %s\n", argv[1]);
		return 2;
	}

	fo = fopen(argv[2], "w");
	if (fo == NULL)
	{
		printf("failed to open: %s\n", argv[2]);
		return 3;
	}

	for (++line; !feof(fi); line++)
	{
		char *fgs;

		fgs = fgets(buff, sizeof(buff), fi);
		if (fgs == NULL) break;

		if (buff[0] == '#')
		{
			/* control char */
			if (strncmp(buff, "#ifdef ", 7) == 0)
			{
				ifdef_level++;
				if (!skip_mode && !check_defines((void *) &argv[3], argc-3, buff + 7))
					skip_mode = 1, skip_level = ifdef_level;
			}
			else if (strncmp(buff, "#ifndef ", 8) == 0)
			{
				ifdef_level++;
				if (!skip_mode &&  check_defines((void *) &argv[3], argc-3, buff + 8))
					skip_mode = 1, skip_level = ifdef_level;
			}
			else if (strncmp(buff, "#else", 5) == 0)
			{
				if (!skip_mode || skip_level == ifdef_level)
					skip_mode ^= 1, skip_level = ifdef_level;
			}
			else if (strncmp(buff, "#endif", 6) == 0)
			{
				if (skip_level == ifdef_level)
					skip_mode = 0;
				ifdef_level--;
				if (ifdef_level == 0) skip_mode = 0;
				if (ifdef_level < 0)
				{
					printf("%i: warning: #endif without #ifdef, ignoring\n", line);
					ifdef_level = 0;
				}
			}
			else if (strncmp(buff, "#include ", 9) == 0)
			{
				char *pe, *p = buff + 9;
				FILE *ftmp;
				if (skip_mode) continue;
				while (*p && (*p == ' ' || *p == '\"')) p++;
				for (pe = p + strlen(p) - 1; pe > p; pe--)
					if (isspace(*pe) || *pe == '\"') *pe = 0;
					else break;
				ftmp = fopen(p, "r");
				if (ftmp == NULL) {
					printf("%i: error: failed to include \"%s\"\n", line, p);
					return 1;
				}
				while (!feof(ftmp))
				{
					fgs = fgets(buff, sizeof(buff), ftmp);
					if (fgs == NULL) break;
					fputs(buff, fo);
				}
				fclose(ftmp);
				continue;
			}

			/* skip line */
			continue;
		}
		if (!skip_mode)
		{
			do_counters(buff);
			fputs(buff, fo);
		}
	}

	fclose(fi);
	fclose(fo);

	return 0;
}
예제 #3
0
파일: json_output.c 프로젝트: rubenk/burp
static int json_send_backup(struct asfd *asfd, struct cstat *cstat,
	struct bu *bu, int print_flags,
	const char *logfile, const char *browse,
	int use_cache)
{
	long long bno=0;
	long long timestamp=0;
	if(!bu) return 0;
	bno=(long long)bu->bno;
	timestamp=(long long)timestamp_to_long(bu->timestamp);

	if(yajl_map_open_w()
	  || yajl_gen_int_pair_w("number", bno)
	  || yajl_gen_int_pair_w("timestamp", timestamp)
	  || yajl_gen_str_w("flags")
	  || yajl_array_open_w()
	  || flag_wrap_str(bu, BU_HARDLINKED, "hardlinked")
	  || flag_wrap_str(bu, BU_DELETABLE, "deletable")
	  || flag_wrap_str(bu, BU_WORKING, "working")
	  || flag_wrap_str(bu, BU_FINISHING, "finishing")
	  || flag_wrap_str(bu, BU_CURRENT, "current")
	  || flag_wrap_str(bu, BU_MANIFEST, "manifest")
	  || yajl_array_close_w())
		return -1;
	if(bu->flags & (BU_WORKING|BU_FINISHING))
	{
		if(do_counters(cstat->cntr)) return -1;
	}
	if(print_flags
	  && (bu->flags & (BU_LOG_BACKUP|BU_LOG_RESTORE|BU_LOG_VERIFY
		|BU_STATS_BACKUP|BU_STATS_RESTORE|BU_STATS_VERIFY)))
	{
		if(yajl_gen_str_w("logs")
		  || yajl_map_open_w()
		  || yajl_gen_str_w("list")
	  	  || yajl_array_open_w()
		  || flag_wrap_str(bu, BU_LOG_BACKUP, "backup")
		  || flag_wrap_str(bu, BU_LOG_RESTORE, "restore")
		  || flag_wrap_str(bu, BU_LOG_VERIFY, "verify")
		  || flag_wrap_str(bu, BU_STATS_BACKUP, "backup_stats")
		  || flag_wrap_str(bu, BU_STATS_RESTORE, "restore_stats")
		  || flag_wrap_str(bu, BU_STATS_VERIFY, "verify_stats")
	  	  || yajl_array_close_w())
			return -1;
		if(logfile)
		{
			if(flag_wrap_str_zp(bu,
				BU_LOG_BACKUP, "backup", logfile)
			  || flag_wrap_str_zp(bu,
				BU_LOG_RESTORE, "restore", logfile)
			  || flag_wrap_str_zp(bu,
				BU_LOG_VERIFY, "verify", logfile)
			  || flag_wrap_str_zp(bu,
				BU_STATS_BACKUP, "backup_stats", logfile)
			  || flag_wrap_str_zp(bu,
				BU_STATS_RESTORE, "restore_stats", logfile)
			  || flag_wrap_str_zp(bu,
				BU_STATS_VERIFY, "verify_stats", logfile))
					return -1;
		}
		if(yajl_map_close_w())
			return -1;
		if(browse)
		{
			if(yajl_gen_str_w("browse")) return -1;
			if(yajl_map_open_w()) return -1;
			if(yajl_gen_str_pair_w("directory", browse)) return -1;
			if(yajl_gen_str_w("entries")) return -1;
			if(yajl_array_open_w()) return -1;
			if(browse_manifest(asfd, cstat, bu, browse, use_cache))
				return -1;
			if(yajl_array_close_w()) return -1;
			if(yajl_map_close_w()) return -1;

		}
	}
	if(yajl_gen_map_close(yajl)!=yajl_gen_status_ok)
		return -1;

	return 0;
}