examples-code-check.c: Report on missing man pages

Set optional 2nd parameter to libcoap-3.sym to generate missing output.
This commit is contained in:
Jon Shallow authored and Jon Shallow committed 2023-06-28 21:18:22 +01:00
1 parent 31f692b8b2
commit 5ac47de1a4
1 file changed
+49 -6
+49 -6
View File
@@ -142,6 +142,8 @@ static char name_list[100][100];
static unsigned int name_cnt = 0;
static char return_list[100][100];
static unsigned int return_cnt = 0;
static char man_list[400][100];
static unsigned int man_cnt = 0;
static void
check_synopsis(const char* file) {
@@ -386,16 +388,18 @@ cleanup:
return;
}
int main(int argc, char* argv[])
{
int
main(int argc, char* argv[]) {
DIR *pdir;
struct dirent *pdir_ent;
char buffer[1024];
char man_name[1024];
int status;
size_t i;
int man_missing_first = 1;
if (argc != 2) {
fprintf(stderr, "usage: %s man_directory\n", argv[0]);
if (argc != 2 && argc != 3) {
fprintf(stderr, "usage: %s man_directory [libcoap-3.sym_file]\n", argv[0]);
exit (1);
}
@@ -404,6 +408,31 @@ int main(int argc, char* argv[])
fprintf(stderr, "opendir: %s: %s (%d)\n", argv[1], strerror(errno), errno);
exit(1);
}
if (argc == 3) {
FILE *fp = fopen(argv[2], "r");
char tmp_name[100];
if (fp == NULL) {
fprintf(stderr, "fopen: %s: %s (%d)\n", argv[2], strerror(errno), errno);
exit(1);
}
while (fgets(tmp_name, sizeof(tmp_name), fp) != NULL) {
char *cp = strchr(tmp_name, '\n');
if (cp)
*cp = '\000';
if (tmp_name[0]) {
strncpy(man_list[man_cnt], tmp_name, sizeof(man_list[man_cnt]));
man_cnt++;
}
if (man_cnt == sizeof(man_list) / sizeof(name_list[0])) {
fprintf(stderr, "man_list[] too small (%zd) for entries from %s\n",
sizeof(man_list) / sizeof(name_list[0]), argv[2]);
exit(1);
}
}
fclose(fp);
}
if (chdir(argv[1]) == -1) {
fprintf(stderr, "chdir: %s: %s (%d)\n", argv[1], strerror(errno), errno);
exit(1);
@@ -436,7 +465,6 @@ int main(int argc, char* argv[])
FILE* fpheader = NULL;
char file_name[300];
char *cp;
unsigned int i;
fprintf(stderr, "Processing: %s\n", pdir_ent->d_name);
@@ -581,12 +609,18 @@ int main(int argc, char* argv[])
if (i != name_cnt)
continue;
if (i >= (int)(sizeof(name_list)/sizeof(name_list[0]))) {
fprintf(stderr, "NAME: %s insufficient space (%u >= %u)\n", buffer,
fprintf(stderr, "NAME: %s insufficient space (%zu >= %u)\n", buffer,
i, (int)(sizeof(name_list)/sizeof(name_list[0])));
continue;
}
memcpy(name_list[i], buffer, sizeof(name_list[i])-1);
name_cnt++;
for (i = 0; i < man_cnt; i++) {
if (strcmp(man_list[i], buffer) == 0) {
man_list[i][0] = '\000';
break;
}
}
}
if (in_synopsis) {
@@ -755,5 +789,14 @@ bad:
}
}
closedir (pdir);
for (i = 0; i < man_cnt; i++) {
if (man_list[i][0]) {
if (man_missing_first) {
man_missing_first = 0;
fprintf(stderr, "\nMissing man pages (for reference only)\n");
}
fprintf(stderr, "%s\n", man_list[i]);
}
}
exit(exit_code);
}