AmendHub

Download (as of this amendment):

jcs

/

amend

/

amendments

/

177

repo: Factor out Create/FSOpen/truncate/FSClose of temp files


jcs made amendment 177 24 days ago
--- repo.c Mon Sep 28 14:29:23 2026 +++ repo.c Mon Sep 28 15:10:40 2026 @@ -33,6 +33,8 @@ short repo_get_file_attrs(struct repo *repo, Str255 fi short repo_file_update(struct repo *repo, struct repo_file *file); unsigned short repo_diff_header(struct repo *repo, struct repo_amendment *amendment, char **ret); +short repo_write_temp_file(struct repo *repo, struct repo_file *file, + Str255 tfilename, char *data, size_t len); short repo_migrate(struct repo *repo, bool is_new); pascal Boolean repo_add_file_filter(struct FileParam *pbp); @@ -772,30 +774,15 @@ repo_diff_file(struct repo *repo, struct repo_file *fi Str255 fromfilepath, tofilepath; Str255 label0, label1; struct repo_file_attrs attrs; - size_t size; - char *text; - short error, ret, frefnum, tofile_empty = 0; + size_t size = 0; + char *text = NULL; + short error, ret, tofile_empty = 0; /* write out old file */ snprintf((char *)fromfilename, HFS_FILENAME_MAX + 1, "[%lu] %s", Time, file->filename); CtoPstr(fromfilename); - error = Create(fromfilename, repo->bile->vrefnum, file->creator, - file->type); - if (error && error != dupFNErr) - panic("Failed to create file %s: %d", PtoCstr(fromfilename), - error); - - error = FSOpen(fromfilename, repo->bile->vrefnum, &frefnum); - if (error) - panic("Failed to open file %s: %d", PtoCstr(fromfilename), error); - - error = SetEOF(frefnum, 0); - if (error) - panic("Failed to truncate file %s: %d", PtoCstr(fromfilename), - error); - if (file->flags & REPO_FILE_DELETED) { /* don't write any TEXT resource, the from file should be blank */ } else { @@ -803,16 +790,11 @@ repo_diff_file(struct repo *repo, struct repo_file *fi size = bile_read_alloc(repo->bile, REPO_TEXT_RTYPE, file->id, &text); - if (size > 0) { - error = FSWrite(frefnum, &size, text); - if (error) - panic("Failed to write old file to %s: %d", - PtoCstr(fromfilename), error); - xfree(&text); - } } - FSClose(frefnum); + repo_write_temp_file(repo, file, fromfilename, text, size); + if (text != NULL) + xfree(&text); if (getpath(repo->bile->vrefnum, fromfilename, &fromfilepath, true) != 0) @@ -834,12 +816,8 @@ repo_diff_file(struct repo *repo, struct repo_file *fi "[deleted] %s", file->filename); CtoPstr(tofilename); - error = Create(tofilename, repo->bile->vrefnum, file->creator, - file->type); - if (error && error != dupFNErr) - panic("Failed to create file %s: %d", PtoCstr(tofilename), - error); - + repo_write_temp_file(repo, file, tofilename, NULL, 0); + if (getpath(repo->bile->vrefnum, tofilename, &tofilepath, true) != 0) panic("getpath(%d, %s) failed", repo->bile->vrefnum, @@ -885,6 +863,37 @@ repo_diff_file(struct repo *repo, struct repo_file *fi return -1; return 1; +} + +short +repo_write_temp_file(struct repo *repo, struct repo_file *file, + Str255 tfilename, char *data, size_t len) +{ + short error, frefnum; + + error = Create(tfilename, repo->bile->vrefnum, file->creator, + file->type); + if (error && error != dupFNErr) + panic("Failed to create file %s: %d", PtoCstr(tfilename), error); + + error = FSOpen(tfilename, repo->bile->vrefnum, &frefnum); + if (error) + panic("Failed to open file %s: %d", PtoCstr(tfilename), error); + + error = SetEOF(frefnum, 0); + if (error) + panic("Failed to truncate file %s: %d", PtoCstr(tfilename), error); + + if (len) { + error = FSWrite(frefnum, &len, data); + if (error) + panic("Failed to write file to %s: %d", PtoCstr(tfilename), + error); + } + + FSClose(frefnum); + + return 0; } short