Re: Alternative for getline() function in AIX 5.3

2010-07-28 Thread Nadav Har'El
On Wed, Jul 28, 2010, Etzion Bar-Noy wrote about Re: Alternative for getline() 
function in AIX 5.3:
 IBM supply a set of GNU utilities, including GCC-related software (and GCC,
 as well, if I recall correctly, but an old one) in an additional CD supplied
 with AIX. This is called something around Utilities for Linux or some
 other lie. So you do not need to force gcc to compile under AIX, but only
 use it.
 Same goes, probably, for many additional libraries.

I didn't check, but it is quite likely that while they supply gcc and many
other GNU utilities, they do not have glibc. While glibc's getline() is
trivial to port to AIX, much of glibc is very closely related to the kernel's
APIs, so it varies a lot from kernel to kernel. Last time I checked, glibc
was only available for Linux.

But needless to say, parts of glibc (like the aforementioned geline()) should
have no trouble to compile on AIX.


-- 
Nadav Har'El|   Wednesday, Jul 28 2010, 17 Av 5770
n...@math.technion.ac.il |-
Phone +972-523-790466, ICQ 13349191 |Does replacing myself with a shell-script
http://nadav.harel.org.il   |make me impressive or insignificant?

___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Nadav Har'El
On Tue, Jul 27, 2010, Israel Shikler wrote about Alternative for getline() 
function in AIX 5.3:
 I am looking for an alternative to getline(), that would be portable to both
 Linux and AIX.

The first obvious alternative is to use fgets(). fgets(), unlike gets(),
is secure because you give it the buffer's length. Nobody should EVER use
gets(), but fgets() is perfectly fine (unless I'm missing something).

The second alternative is to make use of the wonderful fact that Linux is
free software, and just take the source code of getline() and incorporate
it in your program! I can't imagine that getline() is more than a couple
of dozen lines - it's not that complicated... In fact, you can probably
easily write one yourself...

Nadav.


-- 
Nadav Har'El| Tuesday, Jul 27 2010, 16 Av 5770
n...@math.technion.ac.il |-
Phone +972-523-790466, ICQ 13349191 |If I am not for myself, who will be for
http://nadav.harel.org.il   |me? If I am only for myself, who am I?

___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Shlomi Fish
On Tuesday 27 Jul 2010 13:15:13 Israel Shikler wrote:
 Hi,
 
 I have a C program that reads one line of text from the keyboard.
 
 The original program was written 10 years ago and was compiled with cc on
 AIX 4.x.
 I used the gets() function which was the only option available at the time.
 
 Recently, I had to port the program to gcc on Linux, but I was confronted
 with lots of segfaults.
 So, I had to change the function to getline() which is much more stable and
 secure.
 
 However, I was asked to maintain the new version on AIX 5.3 as well.
 
 When recompiling the program on the AIX machine I was confronted with the
 lack of getline() in AIX implementation of cc.
 I do not have gcc on that machine, and installing it would be an option of
 last resort .
 
 I am looking for an alternative to getline(), that would be portable to
 both Linux and AIX.
 

Will fgets be OK enough?

http://www.opengroup.org/onlinepubs/009695399/functions/fgets.html

Regards,

Shlomi Fish

-- 
-
Shlomi Fish   http://www.shlomifish.org/
Funny Anti-Terrorism Story - http://shlom.in/enemy

God considered inflicting XSLT as the tenth plague of Egypt, but then
decided against it because he thought it would be too evil.

Please reply to list if it's a mailing list post - http://shlom.in/reply .

___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Omer Zak
On Tue, 2010-07-27 at 14:02 +0300, Nadav Har'El wrote:
 On Tue, Jul 27, 2010, Israel Shikler wrote about Alternative for getline() 
 function in AIX 5.3:
  I am looking for an alternative to getline(), that would be portable to both
  Linux and AIX.
[... snipped ...]
 The second alternative is to make use of the wonderful fact that Linux is
 free software, and just take the source code of getline() and incorporate
 it in your program! I can't imagine that getline() is more than a couple
 of dozen lines - it's not that complicated... In fact, you can probably
 easily write one yourself...

... that is, if Shikler has access to a lawyer familiar with LGPLv2.1
who can certify that his application's license and terms of usage are
compatible with LGPLv2.1 (the license of stdio.h).  Things may even be
more complicated than this.

--- Omer
-- 
MS-Windows is the Pal-Kal of the PC world.
My own blog is at http://www.zak.co.il/tddpirate/

My opinions, as expressed in this E-mail message, are mine alone.
They do not represent the official policy of any organization with which
I may be affiliated in any way.
WARNING TO SPAMMERS:  at http://www.zak.co.il/spamwarning.html


___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Oleg Goldshmidt
Nadav Har'El n...@math.technion.ac.il writes:

 The second alternative is to make use of the wonderful fact that
 Linux is free software, and just take the source code of getline()
 and incorporate it in your program! I can't imagine that getline()
 is more than a couple of dozen lines - it's not that
 complicated... In fact, you can probably easily write one
 yourself...

It may be possible, but maybe not as simple as finding the function's
code and pasting it into an AIX app. Getline is a part of glibc, which
is licensed under LGPL. This means that you can use it as a library
and link your application to it using an API without releasing the app
under LGPL, but I doubt you can use the code in a single application
without releasing it under LGPL or GPL (unless all the code is in a
header, which I doubt). IANAL, and I didn't look too
deeply, but this is what LGPL seems to say.

The procedure would be to determine which pieces of glibc would
together be enough to provide getline functionality in a library, and
then either try to compile it on AIX (which may or may not work,
depending on how much gcc-specific stuff there is) or cross-compile
the thing with gcc for AIX, taking care that the interface is not
GNU-specific and that none of the stuff needed to compile and link
clashes with the libc of AIX. 

Then deliver the resulting library as a part of your overall AIX
package, and then take care of actual production / legal / support /
operations stuff (e.g., what is the procedure for delivering the code
of the resulting library on request?) that a commercial company needs
to deal with, unlike folks who just upload code to sourceforge or
something. (I am not saying it is impossible, I am saying it is a
serious issue beyond coding that requires involvement of many
functions in an organization).

It may or may not be simple... Or simpler than fgets, which is what
matters.

Disclaimer: I have not tried this and encountered difficulties, I am
just trying to imagine what the potential issues may be.

-- 
Oleg Goldshmidt | p...@goldshmidt.org

___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Oleg Goldshmidt
Omer Zak w...@zak.co.il writes:

 #ifdef __GNUC__
   // use getline()
 #else /* __GNUC__ */
   // use gets() or fgets()
 #endif /* __GNUC__ */

I am not sure what you meant here, Omer, but IIRC __GNUC__ means
gcc-specific code, and the OP does not have gcc on AIX. I am probably
missing something... Nor does AIX have _GNU_SOURCE, I believe.

I'd say if you wrote your code with fgets() forget about getline(). 

-- 
Oleg Goldshmidt | p...@goldshmidt.org

___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Omer Zak
What I mean is to use whatever preprocessor symbol that is defined when
building using gcc, but undefined on AIX; or vice versa.

On Tue, 2010-07-27 at 21:53 +0300, Oleg Goldshmidt wrote:
 Omer Zak w...@zak.co.il writes:
 
  #ifdef __GNUC__
// use getline()
  #else /* __GNUC__ */
// use gets() or fgets()
  #endif /* __GNUC__ */
 
 I am not sure what you meant here, Omer, but IIRC __GNUC__ means
 gcc-specific code, and the OP does not have gcc on AIX. I am probably
 missing something... Nor does AIX have _GNU_SOURCE, I believe.
 
 I'd say if you wrote your code with fgets() forget about getline().
-- 
Bottom posters are filthy heretics and infidels and ought to be burned
on the stake after having been tarred, feathered and having rotten eggs
thrown at their faces!
My own blog is at http://www.zak.co.il/tddpirate/

My opinions, as expressed in this E-mail message, are mine alone.
They do not represent the official policy of any organization with which
I may be affiliated in any way.
WARNING TO SPAMMERS:  at http://www.zak.co.il/spamwarning.html


___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Oleg Goldshmidt
Omer Zak w...@zak.co.il writes:

 What I mean is to use whatever preprocessor symbol that is defined when
 building using gcc, but undefined on AIX; or vice versa.

I see. I suspect you may need both __GNUC__ and _GNU_SOURCE to be
defined for getline() to work in the context though: the first will
react to compilation with gcc and the second will include the right
bits from glibc. I have not checked, but it is not clear to me if one
implies the other, I suspect not.

In any case, the explicit requirement is that the resulting program
should be portable (at least between Liux and AIX), and, I suppose,
the fact that gets() is insecure should be an additional
consideration. 

Yet another consideration is that newer incarnaions of POSIX removed
gets() from requirements, AFAIK, neither Linux nor AIX actually ripped
it out yet, but it may happen in the future (on Linux sooner than on
AIX).

So, between

1. develop a non-portable Linux/gcc branch based on getline() and
   choose at compile time with the preprocessor (keeping AIX insecure
   with the existing, gets()-based code),

2. develop a getline() branch for Linux and rewrite AIX with the
   secure fgets(),

3. develop a portable and secure fgets()-based implementation for both
   AIX and Linux,

I'd vote for door #3.

There is option 4 suggested by Nadav (rip getline() from glibc and use
on AIX). Depending on circumstances, it may be fairly easy or
completely unfeasible (it is, no doubt, feasible technically, it may
be unfeasible operatonally) or anything in between.

-- 
Oleg Goldshmidt | p...@goldshmidt.org

___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il


Re: Alternative for getline() function in AIX 5.3

2010-07-27 Thread Etzion Bar-Noy
IBM supply a set of GNU utilities, including GCC-related software (and GCC,
as well, if I recall correctly, but an old one) in an additional CD supplied
with AIX. This is called something around Utilities for Linux or some
other lie. So you do not need to force gcc to compile under AIX, but only
use it.
Same goes, probably, for many additional libraries.

P.S - they install in RPM format :-)

Ez

On Tue, Jul 27, 2010 at 11:32 PM, Oleg Goldshmidt p...@goldshmidt.orgwrote:

 Omer Zak w...@zak.co.il writes:

  What I mean is to use whatever preprocessor symbol that is defined when
  building using gcc, but undefined on AIX; or vice versa.

 I see. I suspect you may need both __GNUC__ and _GNU_SOURCE to be
 defined for getline() to work in the context though: the first will
 react to compilation with gcc and the second will include the right
 bits from glibc. I have not checked, but it is not clear to me if one
 implies the other, I suspect not.

 In any case, the explicit requirement is that the resulting program
 should be portable (at least between Liux and AIX), and, I suppose,
 the fact that gets() is insecure should be an additional
 consideration.

 Yet another consideration is that newer incarnaions of POSIX removed
 gets() from requirements, AFAIK, neither Linux nor AIX actually ripped
 it out yet, but it may happen in the future (on Linux sooner than on
 AIX).

 So, between

 1. develop a non-portable Linux/gcc branch based on getline() and
   choose at compile time with the preprocessor (keeping AIX insecure
   with the existing, gets()-based code),

 2. develop a getline() branch for Linux and rewrite AIX with the
   secure fgets(),

 3. develop a portable and secure fgets()-based implementation for both
   AIX and Linux,

 I'd vote for door #3.

 There is option 4 suggested by Nadav (rip getline() from glibc and use
 on AIX). Depending on circumstances, it may be fairly easy or
 completely unfeasible (it is, no doubt, feasible technically, it may
 be unfeasible operatonally) or anything in between.

 --
 Oleg Goldshmidt | p...@goldshmidt.org

 ___
 Linux-il mailing list
 Linux-il@cs.huji.ac.il
 http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il

___
Linux-il mailing list
Linux-il@cs.huji.ac.il
http://mailman.cs.huji.ac.il/mailman/listinfo/linux-il