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; }
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; }
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; }