Help porting app from HP-UX to Linux

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • James Egan

    Help porting app from HP-UX to Linux

    I'm porting a legacy application from HP-UX to Linux. The va_start macro
    takes one argument under HP-UX, but takes two under Linux:

    va_start under HP-UX takes only one var:

    hp:/home/fredgrep va_start
    /ndata1/scratch/gcc-3.2/binutils/include/mpw/>
    #define va_start(list) list = (char *) &va_alist


    va_start under linux takes two:

    linux:/home/fredgrep -i va_start
    /usr/lib/gcc/i386-redhat-linux/4.1.1/include/stdarg.h
    #define va_start(v,l) __builtin_va_st art(v,l)


    The errors I'm seeing are listed below. What would be the best way to
    handle the discrepancy in va_start between the two systems?

    >make
    lprintf.c: In function 'lprintf':
    lprintf.c:73: error: expected declaration specifiers before 'va_dcl'
    lprintf.c:89:13 : error: macro "va_start" requires 2 arguments, but only
    1 given
    lprintf.c:145: error: expected '=', ',', ';', 'asm' or '__attribute__'
    before 'va_dcl'
    lprintf.c:161:1 3: error: macro "va_start" requires 2 arguments, but only
    1 given
    lprintf.c:218: error: expected '=', ',', ';', 'asm' or '__attribute__'
    before 'va_dcl'
    lprintf.c:234:1 3: error: macro "va_start" requires 2 arguments, but only
    1 given
    lprintf.c:284: error: expected '{' at end of input
    make[1]: *** [lprintf.o] Error 1
    make: *** [upper] Error 2

  • Richard Heathfield

    #2
    Re: Help porting app from HP-UX to Linux

    James Egan said:
    I'm porting a legacy application from HP-UX to Linux. The va_start macro
    takes one argument under HP-UX, but takes two under Linux:
    In standard C, va_start takes two arguments, the first being the name of
    the object with type 'va_list', and the second being the name of the
    last-named parameter in the function parameter list.

    One possibility is to invoke your HP-UX compiler in conforming mode (in
    which case it must accept the two arguments, because otherwise it doesn't
    conform). If that won't wash for you, you could try conditional
    compilation, I guess.

    <snip>

    --
    Richard Heathfield <http://www.cpax.org.uk >
    Email: -http://www. +rjh@
    Google users: <http://www.cpax.org.uk/prg/writings/googly.php>
    "Usenet is a strange place" - dmr 29 July 1999

    Comment

    • user923005

      #3
      Re: Help porting app from HP-UX to Linux

      On Mar 24, 8:24 pm, James Egan <jegan...@comca st.netwrote:
      I'm porting a legacy application from HP-UX to Linux.  The va_start macro
      takes one argument under HP-UX, but takes two under Linux:
      >
      va_start under HP-UX takes only one var:
      >
      hp:/home/fredgrep va_start
      /ndata1/scratch/gcc-3.2/binutils/include/mpw/>
      #define va_start(list) list = (char *) &va_alist
      >
      va_start under linux takes two:
      >
      linux:/home/fredgrep -i va_start
      /usr/lib/gcc/i386-redhat-linux/4.1.1/include/stdarg.h
      #define va_start(v,l)   __builtin_va_st art(v,l)
      >
      The errors I'm seeing are listed below.  What would be the best way to
      handle the discrepancy in va_start between the two systems?
      >
      make
      >
      lprintf.c: In function 'lprintf':
      lprintf.c:73: error: expected declaration specifiers before 'va_dcl'
      lprintf.c:89:13 : error: macro "va_start" requires 2 arguments, but only
      1 given
      lprintf.c:145: error: expected '=', ',', ';', 'asm' or '__attribute__'
      before 'va_dcl'
      lprintf.c:161:1 3: error: macro "va_start" requires 2 arguments, but only
      1 given
      lprintf.c:218: error: expected '=', ',', ';', 'asm' or '__attribute__'
      before 'va_dcl'
      lprintf.c:234:1 3: error: macro "va_start" requires 2 arguments, but only
      1 given
      lprintf.c:284: error: expected '{' at end of input
      make[1]: *** [lprintf.o] Error 1
      make: *** [upper] Error 2
      To see an example of how to portably write a varadic function (for
      instance to print stuff to a log file) see the C-FAQ starting at
      section 15.4 and running over the next few items.

      Comment

      • Keith Thompson

        #4
        Re: Help porting app from HP-UX to Linux

        James Egan <jegan472@comca st.netwrites:
        I'm porting a legacy application from HP-UX to Linux. The va_start macro
        takes one argument under HP-UX, but takes two under Linux:
        >
        va_start under HP-UX takes only one var:
        >
        hp:/home/fredgrep va_start
        /ndata1/scratch/gcc-3.2/binutils/include/mpw/>
        #define va_start(list) list = (char *) &va_alist
        >
        >
        va_start under linux takes two:
        >
        linux:/home/fredgrep -i va_start
        /usr/lib/gcc/i386-redhat-linux/4.1.1/include/stdarg.h
        #define va_start(v,l) __builtin_va_st art(v,l)
        [snip]

        The old pre-standard <varargs.hinter face defines a va_start macro
        that takes one argument ("man varargs" on your HP-UX system for
        details).

        The <stdarg.hinterf ace was introduced in the 1989 ANSI C standard,
        if not earlier. In that interface, va_start is a macro that takes
        two arguments.

        The <varargs.hinter face is still supported on some systems to
        support legacy programs, but <stdarg.his the right interface to use.

        If at all possible, I suggest modifying the application so it uses
        <stdarg.h>, which I'm 99.9% sure you'll find is supported on HP-UX.

        If that's not practical, you *might* be able to find an implementation
        of the old <varargs.hfor Linux, probably one built on top of
        <stdarg.h>. If that's what you need, a Linux newsgroup would be more
        likely to help you find it.

        --
        Keith Thompson (The_Other_Keit h) <kst-u@mib.org>
        Nokia
        "We must do something. This is something. Therefore, we must do this."
        -- Antony Jay and Jonathan Lynn, "Yes Minister"

        Comment

        Working...