1. realloc acts like malloc when ptr == NULL 2. no need to check for NULL before free
ok? ? cscope.out Index: skeleton.c =================================================================== RCS file: /cvs/src/usr.bin/yacc/skeleton.c,v retrieving revision 1.35 diff -u -p -r1.35 skeleton.c --- skeleton.c 16 Mar 2014 18:38:30 -0000 1.35 +++ skeleton.c 24 Dec 2015 17:34:02 -0000 @@ -137,16 +137,14 @@ char *body[] = "#endif", " if (newsize && YY_SIZE_MAX / newsize < sizeof *newss)", " goto bail;", - " newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :", - " (short *)malloc(newsize * sizeof *newss); /* overflow check above */", + " newss = realloc(yyss, newsize * sizeof(*newss)); /* overflow check above */", " if (newss == NULL)", " goto bail;", " yyss = newss;", " yyssp = newss + sslen;", " if (newsize && YY_SIZE_MAX / newsize < sizeof *newvs)", " goto bail;", - " newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :", - " (YYSTYPE *)malloc(newsize * sizeof *newvs); /* overflow check above */", + " newvs = realloc(yyvs, newsize * sizeof(*newvs)); /* overflow check above */", " if (newvs == NULL)", " goto bail;", " yyvs = newvs;", @@ -155,10 +153,8 @@ char *body[] = " yysslim = yyss + newsize - 1;", " return 0;", "bail:", - " if (yyss)", - " free(yyss);", - " if (yyvs)", - " free(yyvs);", + " free(yyss);", + " free(yyvs);", " yyss = yyssp = NULL;", " yyvs = yyvsp = NULL;", " yystacksize = 0;", @@ -368,19 +364,15 @@ char *trailer[] = "yyoverflow:", " yyerror(\"yacc stack overflow\");", "yyabort:", - " if (yyss)", - " free(yyss);", - " if (yyvs)", - " free(yyvs);", + " free(yyss);", + " free(yyvs);", " yyss = yyssp = NULL;", " yyvs = yyvsp = NULL;", " yystacksize = 0;", " return (1);", "yyaccept:", - " if (yyss)", - " free(yyss);", - " if (yyvs)", - " free(yyvs);", + " free(yyss);", + " free(yyvs);", " yyss = yyssp = NULL;", " yyvs = yyvsp = NULL;", " yystacksize = 0;",