[9fans] Updating an old port . Warning! long lines of code - Plan9

This is a discussion on [9fans] Updating an old port . Warning! long lines of code - Plan9 ; Hi all I am updating an old port from 2002. I was able to clean a few of the simple errors, but I need a bit of a hint on this one. compile errors **** /usr/fernan/tmp/scm/sys.c:628[sys.c:3613] initialization of incompatible pointers: ...

+ Reply to Thread
Results 1 to 3 of 3

Thread: [9fans] Updating an old port . Warning! long lines of code

  1. [9fans] Updating an old port . Warning! long lines of code

    Hi all

    I am updating an old port from 2002. I was able to clean a few of the simple
    errors, but I need a bit of a hint on this one.

    compile errors ****

    /usr/fernan/tmp/scm/sys.c:628[sys.c:3613] initialization of incompatible
    pointers: sfptob
    IND FUNC(INT, IND STRUCT _7_) INT and IND FUNC(OLD, INT, LONG) INT
    /usr/fernan/tmp/scm/sys.c:629[sys.c:3614] initialization of incompatible
    pointers: sfptob
    IND FUNC(IND CONST CHAR, IND STRUCT _7_) INT and IND FUNC(OLD, IND CHAR,
    LONG) INT


    The following are the relevant structure and code

    typedef struct {
    char *name;
    SCM (*mark)P((SCM ptr));
    int (*free)P((FILE *p));
    int (*print)P((SCM exp, SCM port, int writing));
    SCM (*equalp)P((SCM, SCM));
    int (*fputc)P((int c, FILE *p));
    /* int (*fputs)P((char *s, FILE *p)); */
    /* sizet (*fwrite)P((char *s, sizet siz, sizet num, FILE *p)); */
    int (*fputs)P((const char *s, FILE *p));
    sizet (*fwrite)P((const void *s, sizet siz, sizet num, FILE *p));
    int (*fflush)P((FILE *stream));
    int (*fgetc)P((FILE *p));
    int (*fclose)P((FILE *p));
    int (*ungetc)P((int c, SCM p));
    } ptobfuns;


    static ptobfuns sfptob = {
    "soft",
    markcdr,
    noop0,
    0,
    0,
    sfputc,
    sfputs,
    sfwrite,
    sfflush,
    sfgetc,
    sfclose};


    --
    http://www.fernski.com


  2. Re: [9fans] Updating an old port . Warning! long lines of code

    On Jun 29, 2008, at 7:32 AM, Fernan Bolando wrote:

    > /* int (*fputs)P((char *s, FILE *p)); */
    > /* sizet (*fwrite)P((char *s, sizet siz, sizet num, FILE *p)); */


    Try uncommenting those two lines.



  3. Re: [9fans] Updating an old port . Warning! long lines of code

    > /usr/fernan/tmp/scm/sys.c:628[sys.c:3613] initialization of incompatible
    > pointers: sfptob
    > IND FUNC(INT, IND STRUCT _7_) INT and IND FUNC(OLD, INT, LONG) INT
    > /usr/fernan/tmp/scm/sys.c:629[sys.c:3614] initialization of incompatible
    > pointers: sfptob
    > IND FUNC(IND CONST CHAR, IND STRUCT _7_) INT and IND FUNC(OLD, IND CHAR,
    > LONG) INT


    in the first case, you're trying to assign
    pointers of these types:

    IND FUNC(INT, IND STRUCT _7_) INT
    IND FUNC(OLD, INT, LONG) INT

    these kenc's internal representation for

    int (*)(int, struct _7_*);
    int (*)(int, long); /* pre-ansi declaration */

    so the problem here is that you're mixing a pointer to
    a structure with a long.

    similarly,

    IND FUNC(IND CONST CHAR, IND STRUCT _7_) INT
    IND FUNC(OLD, IND CHAR, LONG) INT
    is
    int (*)(const char*, struct _7_*);
    int (*)(char*, long); /* pre-ansi declaration */

    struct _7_ must be FILE, and the two functions must be fputc
    fputs. (but you knew that.) so the solution would be to clean up the
    declaration of sfputc and sfputs.

    - erik



+ Reply to Thread