Re: [Newbie] Problems compiling ascii pfiles

From: Chris Gilbert (chris@buzzbee.freeserve.co.uk)
Date: 05/20/00


Patrick Dughi wrote:
>
> On Fri, 19 May 2000, Zednanreh Solo wrote:
>
> > I'm having a problem with ascii pfiles that hasn't been brought up yet. I
> > fixed up diskio.c with no problems. I'm usinv MSVC++6 with Oasis 2.x and bpl
> > 17. Heres the only error:
> >
> > db.c
> > c:\circle30bpl17\src\db.c(2202) : error C2106: '=' : left operand must be
> > l-value
> >
> >       case 'N':
> >         if(!strcmp(tag, "Name"))
> > //              GET_NAME(ch) == line;
> > //              strcpy(GET_NAME(ch), line);
> >                 GET_NAME(ch) = str_dup(line);  // <------------
> >         break;
>
>         The line you point to is fine. However, this code demonstrates a
> fundamental misunderstanding of c programming, aside from memory usage and
> others.

As does your fundamental misunderstanding of the //'s at the left being
comments.

>         As a learning experience, lets go though it step by step.
>
> 1       case 'N':
> 2         if(!strcmp(tag, "Name"))
[snip commented lines]
> 5               GET_NAME(ch) = str_dup(line);
> 6         break;
>
>         1.  This line is fine; it's correctly closed @ line 6.
>         2.  This line is also correct, strcmp returns 0 if the match is
> equal - so checking for !strcmp() means it will show up as true if it
> matches "Name" - but lets look at the rest of this; you've used indenting
> as if it is what delimits an 'if' block.

[snip commented out 3 and 4 lines]

>         Good news. Line 5 is kosher. It should probably be the one (and
> only) thing within the if braces.  It's also what you want.

nope that line is the problem, a quick snip from utils.h:

#define GET_PC_NAME(ch) ((ch)->player.name)
#define GET_NAME(ch)    (IS_NPC(ch) ? \
                         (ch)->player.short_descr : GET_PC_NAME(ch))

As you can see GET_NAME may not return a constant address, hence it's
not an lvalue, some compilers may happily accept it where others don't.
The line can safely (as you only load pc chars using ascii pfiles) to:

GET_PC_NAME(ch) = strdup(line);

Cheers,
Chris


     +------------------------------------------------------------+
     | Ensure that you have read the CircleMUD Mailing List FAQ:  |
     |  http://qsilver.queensu.ca/~fletchra/Circle/list-faq.html  |
     +------------------------------------------------------------+



This archive was generated by hypermail 2b30 : 04/10/01 PDT