char *ReadTexinfoFileF(const char *source_dir, const char *fmt, ...) { Writer *filenamew = StringWriter(); struct stat sb; char *buffer = NULL; FILE *fp = NULL; off_t file_size; va_list ap; va_start(ap, fmt); WriterWriteF(filenamew, "%s/", source_dir); WriterWriteVF(filenamew, fmt, ap); va_end(ap); char *filename = StringWriterClose(filenamew); if (cfstat(filename, &sb) == -1) { if (!GenerateStub(filename)) { CfOut(OUTPUT_LEVEL_INFORM, "", "Unable to write down stub for missing texinfo file"); free(filename); return NULL; } } if ((fp = fopen(filename, "r")) == NULL) { CfOut(OUTPUT_LEVEL_INFORM, "fopen", "Could not read manual source %s\n", filename); free(filename); return NULL; } fseek(fp, 0, SEEK_END); file_size = ftello(fp); fseek(fp, 0, SEEK_SET); buffer = (char *) xcalloc(file_size + 1, sizeof(char)); buffer[file_size] = '\0'; int cnt = fread(buffer, sizeof(char), file_size, fp); if ((ferror(fp)) || (cnt != file_size)) { CfOut(OUTPUT_LEVEL_INFORM, "fread", "Could not read manual source %s\n", filename); free(buffer); fclose(fp); free(filename); return NULL; } fclose(fp); free(filename); return buffer; }
void be_operation::Generate (be_ClientImplementation & source) { GenerateStub (source); }