// File: rurban[P]dgnlib/cpl_string.cpp
// Function: CSLSetNameValue
char **CSLSetNameValue(char **papszList, 
                       const char *pszName, const char *pszValue)
{
    char **papszPtr;
    int nLen;

    if (pszName == NULL )
        return papszList;

    nLen = strlen(pszName);
    papszPtr = papszList;
    while(papszPtr && *papszPtr != NULL)
    {
        if (EQUALN(*papszPtr, pszName, nLen)
            && ( (*papszPtr)[nLen] == '=' || 
                 (*papszPtr)[nLen] == ':' ) )
        {
            /* Found it!  
             * Change the value... make sure to keep the ':' or '='
             */
            char cSep;
            cSep = (*papszPtr)[nLen];

            CPLFree(*papszPtr);

            /* 
             * If the value is NULL, remove this entry completely/
             */
            if( pszValue == NULL )
            {
                while( papszPtr[1] != NULL )
                {
                    *papszPtr = papszPtr[1];
                    papszPtr++;
                }
                *papszPtr = NULL;
            }

            /*
             * Otherwise replace with new value.
             */
            else
            {
                *papszPtr = (char *) CPLMalloc(strlen(pszName)+strlen(pszValue)+2);
                sprintf( *papszPtr, "%s%c%s", pszName, cSep, pszValue );
            }
            return papszList;
        }
        papszPtr++;
    }

    if( pszValue == NULL )
        return papszList;

    /* The name does not exist yet... create a new entry
     */
    return CSLAddNameValue(papszList, pszName, pszValue);
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x40, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq %rdx, -0x20(%rbp)
cmpq $0x0, -0x18(%rbp)
jne 0x77a8
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x7918
movq -0x18(%rbp), %rdi
callq 0x2120
movl %eax, -0x2c(%rbp)
movq -0x10(%rbp), %rax
movq %rax, -0x28(%rbp)
xorl %eax, %eax
cmpq $0x0, -0x28(%rbp)
movb %al, -0x2e(%rbp)
je 0x77d6
movq -0x28(%rbp), %rax
cmpq $0x0, (%rax)
setne %al
movb %al, -0x2e(%rbp)
movb -0x2e(%rbp), %al
testb $0x1, %al
jne 0x77e2
jmp 0x78f2
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rsi
movslq -0x2c(%rbp), %rdx
callq 0x23c0
cmpl $0x0, %eax
jne 0x78e1
movq -0x28(%rbp), %rax
movq (%rax), %rax
movslq -0x2c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x3d, %eax
je 0x782b
movq -0x28(%rbp), %rax
movq (%rax), %rax
movslq -0x2c(%rbp), %rcx
movsbl (%rax,%rcx), %eax
cmpl $0x3a, %eax
jne 0x78e1
movq -0x28(%rbp), %rax
movq (%rax), %rax
movslq -0x2c(%rbp), %rcx
movb (%rax,%rcx), %al
movb %al, -0x2d(%rbp)
movq -0x28(%rbp), %rax
movq (%rax), %rdi
callq 0xa000
cmpq $0x0, -0x20(%rbp)
jne 0x7886
jmp 0x7851
movq -0x28(%rbp), %rax
cmpq $0x0, 0x8(%rax)
je 0x7879
movq -0x28(%rbp), %rax
movq 0x8(%rax), %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x28(%rbp)
jmp 0x7851
movq -0x28(%rbp), %rax
movq $0x0, (%rax)
jmp 0x78d7
movq -0x18(%rbp), %rdi
callq 0x2120
movq %rax, -0x38(%rbp)
movq -0x20(%rbp), %rdi
callq 0x2120
movq -0x38(%rbp), %rdi
addq %rax, %rdi
addq $0x2, %rdi
callq 0x3040
movq %rax, %rcx
movq -0x28(%rbp), %rax
movq %rcx, (%rax)
movq -0x28(%rbp), %rax
movq (%rax), %rdi
movq -0x18(%rbp), %rdx
movsbl -0x2d(%rbp), %ecx
movq -0x20(%rbp), %r8
leaq 0x11dd8(%rip), %rsi     # 0x196a8
movb $0x0, %al
callq 0x20a0
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x7918
movq -0x28(%rbp), %rax
addq $0x8, %rax
movq %rax, -0x28(%rbp)
jmp 0x77bc
cmpq $0x0, -0x20(%rbp)
jne 0x7903
movq -0x10(%rbp), %rax
movq %rax, -0x8(%rbp)
jmp 0x7918
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rsi
movq -0x20(%rbp), %rdx
callq 0x87c0
movq %rax, -0x8(%rbp)
movq -0x8(%rbp), %rax
addq $0x40, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)