void onion_assets_file_add_linef(onion_assets_file *f, const char *line, ...){ char tmp[1024]; va_list ap; va_start(ap, line); vsnprintf(tmp,sizeof(tmp),line, ap); va_end(ap); onion_assets_file_add_line(f, tmp); }
int onion_assets_file_update(onion_assets_file* file, const char* line){ int i; for (i=0;i<file->lines_count;i++){ if (strcmp(file->lines[i],line)==0) return 0; } onion_assets_file_add_line(file, line); return 1; }
onion_assets_file *onion_assets_file_new(const char *filename){ onion_assets_file *ret=malloc(sizeof(onion_assets_file)); FILE *file=fopen(filename, "rt"); ret->filename=strdup(filename); ret->lines_count=0; ret->lines_capacity=16; ret->lines=malloc(sizeof(const char *)*ret->lines_capacity); ret->has_endif=0; if (file){ char buffer[4096]; int r=0; int o=0; int total=0; do{ r=fread(&buffer[o], 1, sizeof(buffer)-o, file); int i; o=0; for (i=0;i<r;i++){ if (buffer[i]=='\n'){ buffer[i]=0; ONION_DEBUG("Read original line <%s>", &buffer[o]); onion_assets_file_add_line(ret, &buffer[o]); total+=strlen(&buffer[o]); o=i+1; } } }while(r>0); if (total>0){ fclose(file); return ret; } } char *FILENAME=to_define_able(filename); onion_assets_file_add_line(ret,"/* Autogenerated by onion assets */"); onion_assets_file_add_linef(ret,"#ifndef __ASSETS_H__%s",FILENAME); onion_assets_file_add_linef(ret,"#define __ASSETS_H__%s",FILENAME); onion_assets_file_add_line(ret,"#include <onion/types.h>"); onion_assets_file_add_line(ret,"#endif"); free(FILENAME); return ret; }
onion_assets_file *onion_assets_file_new(const char *filename){ onion_assets_file *ret=malloc(sizeof(onion_assets_file)); ret->file=fopen(filename, "rt"); ret->lines_count=0; ret->lines_capacity=16; ret->lines=malloc(sizeof(const char *)*ret->lines_capacity); ret->has_endif=0; if (!ret->file){ ret->file=fopen(filename,"wt"); if (!ret->file){ ONION_WARNING("Could not open %s asset file for updating.", filename); return NULL; } onion_assets_file_add_line(ret,"/* Autogenerated by onion assets */"); onion_assets_file_add_line(ret,"#ifndef __ONION_ASSETS_H__"); onion_assets_file_add_line(ret,"#define __ONION_ASSETS_H__"); onion_assets_file_add_line(ret,"#endif"); } else{ char buffer[4096]; int r; int o=0; do{ r=fread(&buffer[o],1, sizeof(buffer)-o, ret->file); int i; o=0; for (i=0;i<r;i++){ if (buffer[i]=='\n'){ buffer[i]=0; onion_assets_file_add_line(ret, &buffer[o]); o=i+1; } } assert(o!=0 && r>0); // "Line is longer than buffer size or EOF without EOL."); }while(r<0); fclose(ret->file); ret->file=fopen(filename,"wt"); } return ret; }