bug-gnu-utils
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

diff bug with 2 files nearly identical content


From: Dave
Subject: diff bug with 2 files nearly identical content
Date: Sat, 17 Jan 2004 00:00:59 +0000
User-agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.6a) Gecko/20031030

hi, i'm using diff (GNU diffutils) 2.8.1.  I got a problem where
although only a couple of lines change in between 2 files the diff output does not see this and the patch removes and then adds the same lines again.

i did :-
diff -ud misc0.c misc1.c

the patch was identical code of about 2 pages removed, and then added
again.  i thought it could just be needing -d but that did not help.  Is
this a bug?   I've attatched the files and the resulting diff

is -d the same as --minimal? cheers. Dave








/* long lines which are only changes test
sfdf
long lines which are only changes test
 
long lines which are only changes test
long lines which are only changes test
long lines which are only changes test
long lines which are only changes test
 
 sfdsdfsdf
 
 long lines which are only changes testlong lines which are only changes test
 long lines which are only changes testlong lines which are only changes test
 
 sfd

 fsdf
 sdf

sfd

 long lines which are only changes test*/

#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include "proc.h"


/*
 * Description:  Convert a NULL string terminated UNIX environment block to
 *              an environment block suitable for a windows32 system call
 *
 * Returns:  TRUE= success, FALSE=fail
 *
 * Notes/Dependencies:  the environment block is sorted in case-insensitive
 *      order, is double-null terminated, and is a char *, not a char **
 */
int _cdecl compare(const void *a1, const void *a2)
{
        return _stricoll(*((char**)a1),*((char**)a2));
}
bool_t
arr2envblk(char **arr, char **envblk_out) 
{
        char **tmp;
        int size_needed;
        int arrcnt;
        char *ptr;

        arrcnt = 0;
        while (arr[arrcnt]) {
                arrcnt++;
        }

        tmp = (char**) calloc(arrcnt + 1, sizeof(char *));
        if (!tmp) {
                return FALSE;
        }

        arrcnt = 0;
        size_needed = 0;
        while (arr[arrcnt]) {
                tmp[arrcnt] = arr[arrcnt];
                size_needed += strlen(arr[arrcnt]) + 1;
                arrcnt++;
        }
        size_needed++;

        qsort((void *) tmp, (size_t) arrcnt, sizeof (char*), compare);

        ptr = *envblk_out = calloc(size_needed, 1);
        if (!ptr) {
                free(tmp);
                return FALSE;
        }

        arrcnt = 0;
        while (tmp[arrcnt]) {
                strcpy(ptr, tmp[arrcnt]);
                ptr += strlen(tmp[arrcnt]) + 1;
                arrcnt++;
        }

        free(tmp);
        return TRUE;
}

#include <stddef.h>
#include <stdlib.h>
#include <string.h>
#include <windows.h>
#include "proc.h"


/*
 * Description:  Convert a NULL string terminated UNIX environment block to
 *              an environment block suitable for a windows32 system call
 *
 * Returns:  TRUE= success, FALSE=fail
 *
 * Notes/Dependencies:  the environment block is sorted in case-insensitive
 *      order, is double-null terminated, and is a char *, not a char **
 */
int _cdecl compare(const void *a1, const void *a2)
{
        return _stricoll(*((char**)a1),*((char**)a2));
}
bool_t
arr2envblk(char **arr, char **envblk_out) 
{
        char **tmp;
        int size_needed;
        int arrcnt;
        char *ptr;

        arrcnt = 0;
        while (arr[arrcnt]) {
                arrcnt++;
        }

        tmp = (char**) calloc(arrcnt + 1, sizeof(char *));
        if (!tmp) {
                return FALSE;
        }

        arrcnt = 0;
        size_needed = 0;
        while (arr[arrcnt]) {
                tmp[arrcnt] = arr[arrcnt];
                size_needed += strlen(arr[arrcnt]) + 1;
                arrcnt++;
        }
        size_needed++;

        qsort((void *) tmp, (size_t) arrcnt, sizeof (char*), compare);

        ptr = *envblk_out = calloc(size_needed, 1);
        if (!ptr) {
                free(tmp);
                return FALSE;
        }

        arrcnt = 0;
        while (tmp[arrcnt]) {
                strcpy(ptr, tmp[arrcnt]);
                ptr += strlen(tmp[arrcnt]) + 1;
                arrcnt++;
        }

        free(tmp);
        return TRUE;
}


reply via email to

[Prev in Thread] Current Thread [Next in Thread]