summaryrefslogtreecommitdiff
path: root/usr.bin/diff/diffreg.c
AgeCommit message (Collapse)Author
2007-09-11use strcspn to properly overwrite '\n' in fgets returned bufferGilles Chehade
ok pyr@, ray@, millert@, moritz@, chl@
2007-06-09- Change sizeof(type) to sizeof(*ptr).Ray Lai
- Move function prototypes before variables. No binary change. OK otto and millert.
2007-05-29Bring in some changes from rcsdiff:Ray Lai
1. Replace all the e*alloc functions with the x*alloc versions. 2. Whitespace syncs according to style. 3. Remove the __inline stuff. 4. Remove the min/max functions, using the MAX/MIN macros instead. OK millert@
2007-03-18improve -p for C++ code: classes definition often haveMarc Espie
public:/protected:/private: at the start of line. This lets the -p scanner just take note of the section and keep looking for the actual class definition. Also increase function name bufsize so it shows most of these pesky C++ decls... okay otto@
2007-02-23print the header only once.Marc Espie
okay millert@
2007-02-22Defer printing of the per-file diff header until after the regexpTodd C. Miller
"ignore" processing has finished. This way we only print the header for files that have diffs. The new behavior matches GNU diff (which is where the -I flag comes from). OK otto@ espie@
2006-02-22Append two string using strlcpy()/strlcat() instead of snprintf() toOtto Moerbeek
avoid having to check for encoding errors returned by snprintf(). From Ray Lai; ok millert@ jaredy@
2006-02-16Strip newline from lines used with -I, otherwise ^$ will match allOtto Moerbeek
lines and ignore them all. With and ok jaredy@
2005-01-13Handle all isspace() chars the same for -w and -b. ok millert@ markus@Otto Moerbeek
2004-12-09If the -L option is specified twice, use it for the second filenameTodd C. Miller
like GNU diff does. Adapted from a diff by YAMAMOTO Takashi
2004-11-27Use unsigned char for bytes that are fed to isxxx() functions, to improveOtto Moerbeek
portability. Spotted by YAMAMOTO Takashi. ok millert@
2004-10-20Change tabs in string constants to \t. "of course" deraadt@Otto Moerbeek
2004-09-14use sizeof(struct cand) instead of defining an unused cand object, andTheo de Raadt
then doing sizeof(cand). silly kids
2004-06-20Implement -I option: ignore changes matching a set of regexes. FromOtto Moerbeek
Jared Yanovich, with twists from millert@ and me. Testing by brad@, sturm@ and pval@. ok millert@
2004-06-18If a new hunk immediately follows the previous one, merge themOtto Moerbeek
into a single hunk. This makes diff produce the same diff as gdiff in more cases. Found by brad@ and sturm@ using the ports tree. ok millert@
2004-01-07Implement -p option.Otto Moerbeek
"works here" millert@ ok miod@ deraadt@
2003-11-22Fix diff -q exit value which was broken in last commit.Todd C. Miller
2003-11-21Fix broken assumption that a file must contain differences if files_differ()Todd C. Miller
fails. Fixes "diff -i" exit value. Problem found by Claudio Jeker.
2003-11-10Din't print the "No newline at end of file" to inline (ie: to stdout)Todd C. Miller
for edit scripts. Instead, print it to stderr. This matches the GNU diff behavior and fixes a problem with RCS and files with no trailing newline. tedu@ OK
2003-10-28prototype declared static, but function was not. add static to function.Anil Madhavapeddy
millert@ otto@ ok
2003-09-07correct ascii file test. ok deraadt@ pb@Ted Unangst
2003-08-13Based on what otto@ said on icb. The expensive thing in diff isTodd C. Miller
newcand() (this is what blows up the memory usage so badly). Instead of counting how many times we go through the loop, count how many times we called newcand(). I renamed loopcount -> numtries since it is no longer the number of loop runs. This fixes espie@'s regression. tedu@ OK
2003-08-08Guess the number of lines in a file and use that number for initialOtto Moerbeek
memory allocation. Initial version by me, cleanup by millert@. ok millert@
2003-07-31- Change the hash function to a simple multiplicative one. The oldOtto Moerbeek
hash function was apparently optimized for 16 bit processors and generates quite some collisions. - Fix another case of excessive reallocing. ok millert@
2003-07-31o correct exit code when comparing stdin and stdin (a noop)Todd C. Miller
o after copying to a temp file, lseek() to the beginning so the inline cmp routine works. Fixes an exit code issue when comparing against stdin.
2003-07-29cleanTheo de Raadt
2003-07-27We need to initialize clen to 0 each time through diffreg() forTodd C. Miller
when diffreg() is called multiple times (i.e. in directory mode). Fixes a hang I saw doing "diff -r" of two large directory trees.
2003-07-27- Use a heuristic to bound memory and cpu usage, at the cost ofOtto Moerbeek
producing suboptimal diffs for large file containing lots of changes. Switch heuristic off with -d/--minimal (GNU compatible). Some hints from millert@. - Improve performance by reducing the number of realloc(3) calls. ok millert@ tedu@
2003-07-23better ascii test for fewer false negatives. ok millert@Ted Unangst
2003-07-22Implement the -L and -T options from GNU diff.Todd C. Miller
2003-07-22Historically, when comparing two directories in -e mode, BSD diffTodd C. Miller
printed a header that turned the output into an actual script that called ed(1) to make the changes. This conflicts with POSIX so the header has been removed and the standard diff header is used instead.
2003-07-22Don't print lines consisting solely of a dot ('.') in -e mode sinceTodd C. Miller
that will confuse ed(1). POSIX says "one way to fix this bug is to output two periods whenever a lone period is needed, then terminate the append command with a period, and then use the substitute command to convert the two periods into one period." This is exactly what I have done.
2003-07-21a little KNFHenning Brauer
2003-07-21POSIX-compliant output when there are two paths w/ the same name butTodd C. Miller
one is a file and the other is a directory in -r mode (cosmetic).
2003-07-21Expand change records array as needed; passes Otto's new regression test.Todd C. Miller
2003-07-17cc -O2 -pipe -DSTDC_HEADERS=1 -DHAVE_UNISTD_H=1 -DDIRENT=1 -DDYN_ALLOC -c ↵Todd C. Miller
unpGet rid of ugly hack in readhash() that appears to be there for machines with a 16 bit word size. Also replace (HALFLONG - 1) with a new define, HASHMASK since it really is a mask. None of this results in any actual change in behavior.
2003-07-16Deal with files that lack a final newline before EOF (you naughtyTodd C. Miller
emacs users!). In most cases this just means checking for EOF in addition to '\n'. However, we need to tread carefully in readhash(). There we return 0 on EOF iff it is the first char in a "line". Additionally, if the -b or -w flags were specified and the last character in one file was '\n' but the other file is missing '\n', pretend that we didn't see the newline in the one file. This is consistent with GNU diff. For the non-{b,w} case, print "\ No newline at end of file" when we see EOF before a newline in one file where the other file has one. Again, this is for consistency with GNU diff and patch(1) in -current knows how to interpret this message. OK tedu@ and otto@
2003-07-15Fix line ranges for unidiffs. Problem noted by otto@Todd C. Miller
2003-07-09Unlink temp file as soon as it is opened and return a FILE * forTodd C. Miller
it so we don't have to worry about cleanup. This means the quit() signal handler and error/errorx can go away too. Move splice() out of diffreg() and into diff.c where it belongs since we don't want to be calling splice() for a directory diff. Add a check for mismatched paths (one file, one dir) in diffreg.c. deraadt@ OK
2003-07-09Re-implement -l flag; diff -l now works correctly in non-directoryTodd C. Miller
mode (like GNU diff).
2003-07-08fix pasto in last commitTodd C. Miller
2003-07-08o Avoid a temp file if using stdin and stdin is redirected from a regular fileTodd C. Miller
o Fix a double free in the temmp file case
2003-07-06Add -q option from GNU diffTodd C. Miller
2003-07-06Some fairly major changes:Todd C. Miller
o -N is implemented o -X is implemented o -x is implemented o diff.c has been rewritten and GNU long options are now supported o diffdir.c has been rewritten + no longer does fork + exec of /usr/bin/diff + can be called recursively (and will be for -r) o diff.h + don't include any .h files here any more, do it in the .c files + no Bell Labs code in this, gets a UCB copyright (the 32v sources only have a diff.c and there is nothing in common). o diffreg.c + most all remaining globals are now private to diffreg.c + files are only opened once + dynamically allocated objects are either freed or realloced + added missing UCB copyright (there were lots of UCB changes) + print correct thing when -s is specified OK deraadt@
2003-07-04Kill diff -h, we don't use or want diffh. Discussed w/ tedu@Todd C. Miller
2003-07-04Some cosmetic fixes:Todd C. Miller
o get rid of now-unused tempfile variable o move inifdef into diffreg.c (only used there) o correct a comment o use _PATH_DIFF, _PATH_DIFFH and _PATH_PR instead of variables set to them o get rid of hack to look for pr and diff in /bin
2003-07-02Treat /dev/null specially; there is no need to make a temp file for it.Todd C. Miller
2003-06-27-a to force ascii compare. ok millertTed Unangst
2003-06-26Remove cruft; We don't have the -I, -1 or -2 options anymore so we don'tTodd C. Miller
need the associated scaffolding. tedu@ OK
2003-06-26Fix temp file handling.Todd C. Miller
o honor TMPDIR environment variable as per man page o need 2 temp files if both file1 and file2 are devices o add error() and errorx() which cleanup temp file and then call err() and errx() respectively. OK tedu@