[2 days left] What’s wrong with your cloud strategy? Learn why multicloud solutions matter with Nimble Storage.Register Now

x
?
Solved

getenv crashes

Posted on 2003-10-21
8
Medium Priority
?
450 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
  • 4
  • 3
8 Comments
 
LVL 46

Accepted Solution

by:
Kent Olsen earned 160 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 46

Expert Comment

by:Kent Olsen
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
Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

 

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
 
LVL 46

Expert Comment

by:Kent Olsen
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 46

Expert Comment

by:Kent Olsen
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

Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Have you thought about creating an iPhone application (app), but didn't even know where to get started? Here's how: ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ ~ Important pre-programming comments: I’ve never tri…
Examines three attack vectors, specifically, the different types of malware used in malicious attacks, web application attacks, and finally, network based attacks.  Concludes by examining the means of securing and protecting critical systems and inf…
The goal of this video is to provide viewers with basic examples to understand how to use strings and some functions related to them in the C programming language.
The goal of this video is to provide viewers with basic examples to understand opening and reading files in the C programming language.
Suggested Courses

656 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