SMOLNET PORTAL home about changes
iimprove stream read and write error handling - stagit-gopher - A git gopher frontend. (mirror)	Err	bitreich.org	70
hgit clone git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/	URL:git://bitreich.org/stagit-gopher/ git://enlrupgkhuxnvlhsf6lc3fziv5h2hhfrinws65d7roiv6bfj7d652fid.onion/stagit-gopher/	bitreich.org	70
1Log	/scm/stagit-gopher/log.gph	bitreich.org	70
1Files	/scm/stagit-gopher/files.gph	bitreich.org	70
1Refs	/scm/stagit-gopher/refs.gph	bitreich.org	70
1Tags	/scm/stagit-gopher/tag	bitreich.org	70
1README	/scm/stagit-gopher/file/README.gph	bitreich.org	70
1LICENSE	/scm/stagit-gopher/file/LICENSE.gph	bitreich.org	70
i---	Err	bitreich.org	70
1commit cbb963db3795ea24cd0d68f73b415f9fc48922cc	/scm/stagit-gopher/commit/cbb963db3795ea24cd0d68f73b415f9fc48922cc.gph	bitreich.org	70
1parent 1dd611d990843966e50b23dac30617d6aa5b2b2e	/scm/stagit-gopher/commit/1dd611d990843966e50b23dac30617d6aa5b2b2e.gph	bitreich.org	70
hAuthor: Hiltjo Posthuma <hiltjo@codemadness.org>	URL:mailto:hiltjo@codemadness.org	bitreich.org	70
iDate:   Sat, 19 Mar 2022 12:51:57 +0100	Err	bitreich.org	70
i	Err	bitreich.org	70
iimprove stream read and write error handling	Err	bitreich.org	70
i	Err	bitreich.org	70
iDiffstat:	Err	bitreich.org	70
i  M stagit-gopher-index.c               |      13 +++++++++++++	Err	bitreich.org	70
i  M stagit-gopher.c                     |      35 ++++++++++++++++++++++++-------	Err	bitreich.org	70
i	Err	bitreich.org	70
i2 files changed, 40 insertions(+), 8 deletions(-)	Err	bitreich.org	70
i---	Err	bitreich.org	70
1diff --git a/stagit-gopher-index.c b/stagit-gopher-index.c	/scm/stagit-gopher/file/stagit-gopher-index.c.gph	bitreich.org	70
i@@ -20,6 +20,16 @@ static const char *relpath = "";	Err	bitreich.org	70
i static char description[255] = "Repositories";	Err	bitreich.org	70
i static char *name = "";	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/* Handle read or write errors for a FILE * stream */	Err	bitreich.org	70
i+void	Err	bitreich.org	70
i+checkfileerror(FILE *fp, const char *name, int mode)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        if (mode == 'r' && ferror(fp))	Err	bitreich.org	70
i+                errx(1, "read error: %s", name);	Err	bitreich.org	70
i+        else if (mode == 'w' && (fflush(fp) || ferror(fp)))	Err	bitreich.org	70
i+                errx(1, "write error: %s", name);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i /* Format `len' columns of characters. If string is shorter pad the rest	Err	bitreich.org	70
i  * with characters `pad`. */	Err	bitreich.org	70
i int	Err	bitreich.org	70
i@@ -289,6 +299,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i                                 description[strcspn(description, "\t\r\n")] = '\0';	Err	bitreich.org	70
i                         else	Err	bitreich.org	70
i                                 description[0] = '\0';	Err	bitreich.org	70
i+                        checkfileerror(fp, "description", 'r');	Err	bitreich.org	70
i                         fclose(fp);	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -303,5 +314,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         git_repository_free(repo);	Err	bitreich.org	70
i         git_libgit2_shutdown();	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+        checkfileerror(stdout, "<stdout>", 'w');	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         return ret;	Err	bitreich.org	70
i }	Err	bitreich.org	70
1diff --git a/stagit-gopher.c b/stagit-gopher.c	/scm/stagit-gopher/file/stagit-gopher.c.gph	bitreich.org	70
i@@ -83,6 +83,16 @@ static char lastoidstr[GIT_OID_HEXSZ + 2]; /* id + newline + NUL byte */	Err	bitreich.org	70
i static FILE *rcachefp, *wcachefp;	Err	bitreich.org	70
i static const char *cachefile;	Err	bitreich.org	70
i 	Err	bitreich.org	70
i+/* Handle read or write errors for a FILE * stream */	Err	bitreich.org	70
i+void	Err	bitreich.org	70
i+checkfileerror(FILE *fp, const char *name, int mode)	Err	bitreich.org	70
i+{	Err	bitreich.org	70
i+        if (mode == 'r' && ferror(fp))	Err	bitreich.org	70
i+                errx(1, "read error: %s", name);	Err	bitreich.org	70
i+        else if (mode == 'w' && (fflush(fp) || ferror(fp)))	Err	bitreich.org	70
i+                errx(1, "write error: %s", name);	Err	bitreich.org	70
i+}	Err	bitreich.org	70
i+	Err	bitreich.org	70
i /* Format `len' columns of characters. If string is shorter pad the rest	Err	bitreich.org	70
i  * with characters `pad`. */	Err	bitreich.org	70
i int	Err	bitreich.org	70
i@@ -878,6 +888,7 @@ writelog(FILE *fp, const git_oid *oid)	Err	bitreich.org	70
i                         writeheader(fpfile, ci->summary);	Err	bitreich.org	70
i                         printshowfile(fpfile, ci);	Err	bitreich.org	70
i                         writefooter(fpfile);	Err	bitreich.org	70
i+                        checkfileerror(fpfile, path, 'w');	Err	bitreich.org	70
i                         fclose(fpfile);	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i err:	Err	bitreich.org	70
i@@ -1018,14 +1029,13 @@ writeblob(git_object *obj, const char *fpath, const char *filename, size_t files	Err	bitreich.org	70
i         fprintf(fp, " (%zuB)\n", filesize);	Err	bitreich.org	70
i         fputs("---\n", fp);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i-        if (git_blob_is_binary((git_blob *)obj)) {	Err	bitreich.org	70
i+        if (git_blob_is_binary((git_blob *)obj))	Err	bitreich.org	70
i                 fputs("Binary file.\n", fp);	Err	bitreich.org	70
i-        } else {	Err	bitreich.org	70
i+        else	Err	bitreich.org	70
i                 lc = writeblobgph(fp, (git_blob *)obj);	Err	bitreich.org	70
i-                if (ferror(fp))	Err	bitreich.org	70
i-                        err(1, "fwrite");	Err	bitreich.org	70
i-        }	Err	bitreich.org	70
i+	Err	bitreich.org	70
i         writefooter(fp);	Err	bitreich.org	70
i+        checkfileerror(fp, fpath, 'w');	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         return lc;	Err	bitreich.org	70
i@@ -1337,6 +1347,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         if (fpread) {	Err	bitreich.org	70
i                 if (!fgets(description, sizeof(description), fpread))	Err	bitreich.org	70
i                         description[0] = '\0';	Err	bitreich.org	70
i+                checkfileerror(fpread, path, 'r');	Err	bitreich.org	70
i                 fclose(fpread);	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i@@ -1349,8 +1360,9 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         if (fpread) {	Err	bitreich.org	70
i                 if (!fgets(cloneurl, sizeof(cloneurl), fpread))	Err	bitreich.org	70
i                         cloneurl[0] = '\0';	Err	bitreich.org	70
i-                cloneurl[strcspn(cloneurl, "\n")] = '\0';	Err	bitreich.org	70
i+                checkfileerror(fpread, path, 'r');	Err	bitreich.org	70
i                 fclose(fpread);	Err	bitreich.org	70
i+                cloneurl[strcspn(cloneurl, "\n")] = '\0';	Err	bitreich.org	70
i         }	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* check LICENSE */	Err	bitreich.org	70
i@@ -1408,13 +1420,15 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i                         while (!feof(rcachefp)) {	Err	bitreich.org	70
i                                 n = fread(buf, 1, sizeof(buf), rcachefp);	Err	bitreich.org	70
i                                 if (ferror(rcachefp))	Err	bitreich.org	70
i-                                        err(1, "fread");	Err	bitreich.org	70
i+                                        break;	Err	bitreich.org	70
i                                 if (fwrite(buf, 1, n, fp) != n ||	Err	bitreich.org	70
i                                     fwrite(buf, 1, n, wcachefp) != n)	Err	bitreich.org	70
i-                                        err(1, "fwrite");	Err	bitreich.org	70
i+                                        break;	Err	bitreich.org	70
i                         }	Err	bitreich.org	70
i+                        checkfileerror(rcachefp, cachefile, 'r');	Err	bitreich.org	70
i                         fclose(rcachefp);	Err	bitreich.org	70
i                 }	Err	bitreich.org	70
i+                checkfileerror(wcachefp, tmppath, 'w');	Err	bitreich.org	70
i                 fclose(wcachefp);	Err	bitreich.org	70
i         } else {	Err	bitreich.org	70
i                 if (head)	Err	bitreich.org	70
i@@ -1424,6 +1438,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         fprintf(fp, "[0|Atom feed|%s/atom.xml|server|port]\n", relpath);	Err	bitreich.org	70
i         fprintf(fp, "[0|Atom feed (tags)|%s/tags.xml|server|port]\n", relpath);	Err	bitreich.org	70
i         writefooter(fp);	Err	bitreich.org	70
i+        checkfileerror(fp, "log.gph", 'w');	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* files for HEAD */	Err	bitreich.org	70
i@@ -1432,6 +1447,7 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         if (head)	Err	bitreich.org	70
i                 writefiles(fp, head);	Err	bitreich.org	70
i         writefooter(fp);	Err	bitreich.org	70
i+        checkfileerror(fp, "files.gph", 'w');	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* summary page with branches and tags */	Err	bitreich.org	70
i@@ -1439,16 +1455,19 @@ main(int argc, char *argv[])	Err	bitreich.org	70
i         writeheader(fp, "Refs");	Err	bitreich.org	70
i         writerefs(fp);	Err	bitreich.org	70
i         writefooter(fp);	Err	bitreich.org	70
i+        checkfileerror(fp, "refs.gph", 'w');	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* Atom feed */	Err	bitreich.org	70
i         fp = efopen("atom.xml", "w");	Err	bitreich.org	70
i         writeatom(fp, 1);	Err	bitreich.org	70
i+        checkfileerror(fp, "atom.xml", 'w');	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* Atom feed for tags / releases */	Err	bitreich.org	70
i         fp = efopen("tags.xml", "w");	Err	bitreich.org	70
i         writeatom(fp, 0);	Err	bitreich.org	70
i+        checkfileerror(fp, "tags.xml", 'w');	Err	bitreich.org	70
i         fclose(fp);	Err	bitreich.org	70
i 	Err	bitreich.org	70
i         /* rename new cache file on success */	Err	bitreich.org	70
.
Response: text/plain
Original URLgopher://bitreich.org/0/scm/stagit-gopher/commit/cbb963db...
Content-Typetext/plain; charset=utf-8