Solved

getenv crashes

Posted on 2003-10-21
8
403 Views
Last Modified: 2012-06-27
Pro*C
getenv function in User exit crashes when an environment variable is not exported

if ((envdbg = getenv("somevar")) != NULL )

any idea of why this is happening?

Thanks!
0
Comment
Question by:Jkrish
  • 4
  • 3
8 Comments
 
LVL 45

Accepted Solution

by:
Kdo earned 40 total points
ID: 9592253

getenv() has been around a long time so I doubt that the problem is with this particular function.

How about "proving" if the function's failure is its own doing, or caused by something else clobbering part of the program by running the following:


main (int argc, char **argv)
{
  char *Var;
  int    idx;

  for (idx = 1; idx < argc; idx++)
  {
    Var = getenv (argv[idx]);
    printf (" %s = %s\n", argv[idx], Var == NULL ? "<none>" : Var);
  }
}

Test it by doing something like this:

runit path
runit path terminal test nothing etc


Kent




0
 
LVL 22

Expert Comment

by:grg99
ID: 9592894
Perhaps you've somehow scrozzled your local copy of the environment.

Try doing this crashy line first thing in your program. If it works there but doesnt later on,
yo may have stepped on the environment.

0
 
LVL 45

Expert Comment

by:Kdo
ID: 9593077

Hi grg99,

That's where my test code was going.  If it passes, then his program is scribbling where it aughtn't.

Kent
0
 

Author Comment

by:Jkrish
ID: 9599060
Problem is, the function is not a main function and it's an user exit
and it's more confusing because of the fact that other user exits (.pc files) are working fine.  
getenv is crashing even before it returns anything at all when the env variable is not exported.  

Thanks a lot guys!
0
Maximize Your Threat Intelligence Reporting

Reporting is one of the most important and least talked about aspects of a world-class threat intelligence program. Here’s how to do it right.

 
LVL 45

Expert Comment

by:Kdo
ID: 9599763

Hi Jkrish,

I'm not sure what your last comment meant.


Did you try the sample code that I provided to see if getenv() has a problem.  (I still don't think that getenv() is failing on its own.)

If you've got some really good debug tools (like Rational) you should be able to discover where your program is overflowing a buffer.

If not, link the program and generate a loadmap.  Find out what's loaded right above getenv().  Chances are that a buffer one or two items above getenv() is the culprit.


Kent
0
 

Author Comment

by:Jkrish
ID: 9602886
Many thanks Kent!

I am calling a user exit (Pro*C) from oracle forms (version 6)
and this piece of function is in a library archive and it's a .pc file.

It's interesting to see if I open a text file and insert a line of text
and close prior to running the above mentioned command,
( fp = fopen("testfile","w");
fprintf(fp,"testline\n");
fclose(fp);
)
everything works fine.  

Like you have pointed out, an item above the call to getenv must be a culprit. But this is the first line of code in the program (only oracle variables and host variables are declared above it).  

Thanks again
0
 
LVL 45

Expert Comment

by:Kdo
ID: 9605756

I wonder if the Oracle library includes its own getenv() function?

Kent
0
 

Author Comment

by:Jkrish
ID: 9606013
Resolved!

It was because of the following

FILE *fp;


if ((envdbg = getenv("somevar")) != NULL )
// open a file pointer fp if somevar exists
...
...
...

if (fp)
  fprintf(fp,"print message");  <-- it's crashing here because of this
as fp was not initialized.  

FILE *fp = NULL;  // solved the problem

Thanks a lot Kent!
0

Featured Post

How to run any project with ease

Manage projects of all sizes how you want. Great for personal to-do lists, project milestones, team priorities and launch plans.
- Combine task lists, docs, spreadsheets, and chat in one
- View and edit from mobile/offline
- Cut down on emails

Join & Write a Comment

Suggested Solutions

Title # Comments Views Activity
Beginner Probleme with my IDE Code::Blocks C++ 5 228
Problem with MFCApp 78 317
UPD maximums on Red Hat 6 102
Unable to start eclipse ? 17 87
An Outlet in Cocoa is a persistent reference to a GUI control; it connects a property (a variable) to a control.  For example, it is common to create an Outlet for the text field GUI control and change the text that appears in this field via that Ou…
Preface I don't like visual development tools that are supposed to write a program for me. Even if it is Xcode and I can use Interface Builder. Yes, it is a perfect tool and has helped me a lot, mainly, in the beginning, when my programs were small…
The goal of this video is to provide viewers with basic examples to understand opening and writing to files in the C programming language.
Video by: Grant
The goal of this video is to provide viewers with basic examples to understand and use for-loops in the C programming language.

747 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

12 Experts available now in Live!

Get 1:1 Help Now