8
0
mirror of https://github.com/FirebirdSQL/firebird.git synced 2025-01-25 02:03:03 +01:00
firebird-mirror/src/misc/makeHeader.cpp
2014-02-25 06:13:30 +00:00

84 lines
1.3 KiB
C++

#include <stdio.h>
#include <string.h>
#include <errno.h>
//#ifdef HAVE_UNISTD_H
#include <unistd.h>
//#endif
void ProcessFile(FILE *in, bool stripFirstComment)
{
char s[256];
bool striping = false;
while (fgets(s, sizeof(s), in))
{
if (stripFirstComment)
{
char *x = strstr(s, "/*");
if (x)
{
striping = true;
stripFirstComment = false;
continue;
}
}
if (striping)
{
char *x = strstr(s, "*/");
if (x) {
striping = false;
}
continue;
}
const char* include = "#include";
if (memcmp(s, include, strlen(include)))
{
fputs(s, stdout);
continue;
}
char *p = strchr(s, '<');
if (p)
{
fputs(s, stdout);
continue;
}
p = strchr(s, '"');
if (! p) {
throw "#include misses \" - start of filename";
}
++p;
char *p2 = strchr(p, '"');
if (! p2) {
throw "#include misses \" - end of filename";
}
*p2 = 0;
p2 = strrchr(p, '/'); // always open files in current directory
if (p2) {
p = p2 + 1;
}
FILE *newIn = fopen(p, "rt");
if (! newIn) {
continue;
}
ProcessFile(newIn, true);
fclose(newIn);
// clean after Makefile's cp
unlink(p);
}
}
int main()
{
try {
ProcessFile(stdin, false);
}
catch (const char* x)
{
fprintf(stderr, "%s\n", x);
return 1;
}
return 0;
}