Hi, Here's a pattern I haven't seen before. This macro is especially hideous since it make use of the local variable numitems as opposed of items which is passed as an argument.
Comments? OK? Index: file.c =================================================================== RCS file: /cvs/src/bin/csh/file.c,v retrieving revision 1.26 diff -u -p -r1.26 file.c --- file.c 21 Jun 2017 19:36:23 -0000 1.26 +++ file.c 21 Jun 2017 19:49:19 -0000 @@ -573,16 +573,6 @@ free_items(Char **items, int numitems) free(items); } -#define FREE_ITEMS(items) { \ - sigset_t sigset, osigset;\ -\ - sigemptyset(&sigset);\ - sigaddset(&sigset, SIGINT);\ - sigprocmask(SIG_BLOCK, &sigset, &osigset);\ - free_items(items, numitems);\ - sigprocmask(SIG_SETMASK, &osigset, NULL);\ -} - /* * Perform a RECOGNIZE or LIST command on string "word". */ @@ -671,7 +661,7 @@ again: /* search for matches */ print_by_column(looking_for_lognames ? NULL : tilded_dir, items, numitems); if (items != NULL) - FREE_ITEMS(items); + free_items(items, numitems); } return (0); }