LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Programming (https://www.linuxquestions.org/questions/programming-9/)
-   -   Seg faults on one system, not on another (X windows global vars??) (https://www.linuxquestions.org/questions/programming-9/seg-faults-on-one-system-not-on-another-x-windows-global-vars-290194/)

cbranje 02-14-2005 02:50 PM

Seg faults on one system, not on another (X windows global vars??)
 
Hello

I've been working remotely on a linux server developing a little X-Windows e-mail program for an assignment. I've been logging in, and running the program off the server, and the window clients open up on my laptop at home

THE PROBLEM : When I try running the code from a terminal at school I get a seg fault whenever I try and define a widget, specifically
toplevel = XtVaAppInitialize(&app, "Demos", NULL, 0, &argc, argv, NULL, NULL);

toplevel as well as most of my widgets are declared as global variables, at the top of the code. Can anyone think of a reason why it would work on my laptop, not on the school's computers. Why doesn't the school terminal like global variables??

Carmen

Heres my code take a look, sorry about the mess. I had to delete some of the non problematic functions in the middle due to message length limits of this board.

/* search_list.c -- search for items in a List and select them */

#include <X11/Intrinsic.h>
#include <X11/StringDefs.h>
#include <stdio.h>
#include <Xm/List.h>
#include <Xm/LabelG.h>
#include <Xm/Label.h>
#include <Xm/RowColumn.h>
#include <Xm/PanedW.h>
#include <Xm/TextF.h>
#include <Xm/PushB.h>
#include <Xm/BulletinB.h>
#include <X11/Shell.h>
#include <string.h>
#include <stddef.h>
#include <sys/types.h>
#include <dirent.h>

#define TRUE 1
#define FALSE 0

XmStringCharSet charset = XmSTRING_DEFAULT_CHARSET;
Widget toplevel, rowcol, rowcol2, message, to, cc, subject, send, receive, help, quit, sendMessage, compose_shell, compose,receive_shell, folder_shell, receive, receiveList, folder, folderList, deleteMessageButton, replyMessageButton, folders;
XmString lastItemSelected;
XmString label;
Pixel pixel1, pixel2, pixel3;
XColor alloc_color;
Colormap cmap;
Display *display;
XtAppContext app;
Arg args[10];
unsigned short red, green, blue;
void add_item(), search_item(), drawComposeWin(), drawReceiveWin(), sendMsg(), messageSelected(), deleteMessage(), button_help();
int position;
char *messageVal;
char *toVal;
char *ccVal;
char *subjectVal;
char *lastMessage;
char *username, *getlogin();
char *mailLocation;
char *username;
char location[999999];

void replyMessage(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
char *replyTo;
char *tempItem;

XtPopdown(receive_shell);
receive_shell = NULL;
drawComposeWin();

XmStringGetLtoR(lastItemSelected, XmSTRING_DEFAULT_CHARSET, &tempItem);
XmTextFieldSetString(to, tempItem);




}

void button_folders(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
drawFoldersWin();
}
void button_receive(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
drawReceiveWin();
}
void button_send(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
drawComposeWin();
}
void button_help(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
drawHelpWin();
}
void button_quit(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
exit(1);
}
void sendMsg(w, client_data, call_data)
Widget w;
caddr_t client_data;
XmAnyCallbackStruct *call_data;
{
FILE *fp;
int pid, pipefds[2];
char *username, *getlogin();

XtVaGetValues(message, XmNvalue, &messageVal, NULL);
XtVaGetValues(to, XmNvalue, &toVal, NULL);
XtVaGetValues(cc, XmNvalue, &ccVal, NULL);
XtVaGetValues(subject, XmNvalue, &subjectVal, NULL);
printf("%s\n%s\n%s\n%s\n", messageVal, toVal, ccVal, subjectVal);

if (pipe(pipefds) < 0) {
perror("pipe");
exit(1);
}

if ((pid = fork()) < 0) {
perror("fork");
exit(1);
}

if (pid == 0) {
close(0);
dup(pipefds[0]);
close(pipefds[0]);
close(pipefds[1]);
execl("/bin/mail", "mail", "-s", subjectVal, toVal, 0);
perror("exec");

}

close(pipefds[0]);


fp = fdopen(pipefds[1], "w");

fprintf(fp, "%s", messageVal);
fclose(fp);

while (wait((int *) 0) != pid);

XtVaSetValues(message, XmNvalue, "", NULL);
XtVaSetValues(to, XmNvalue, "", NULL);
XtVaSetValues(cc, XmNvalue, "", NULL);
XtVaSetValues(subject, XmNvalue, "", NULL);

}
void drawHelpWin(){
int foundMessage = FALSE;
int atEndofMessage = FALSE;
FILE *fp;
char temp[100];
char helpFile[1000000];
int line_length = 9999;
XmString messages[999];
int numOfMessages;
XmString tempXmString[999];
int i;
char home[99999];

XtVaGetValues(toplevel, XtNcolormap, &cmap, NULL);
compose_shell = XtCreatePopupShell("Compose Message Window", transientShellWidgetClass, toplevel, NULL, 0);
compose = XtCreateManagedWidget("compose", xmRowColumnWidgetClass, compose_shell, NULL, 0);
XtVaSetValues(compose, XmNbackground, pixel1, NULL);

rowcol = XtVaCreateWidget("rowcol", xmBulletinBoardWidgetClass, compose, XmNbackground, pixel1, NULL);




label = XmStringCreateSimple("Help:");
XtVaCreateManagedWidget("message_label", xmLabelWidgetClass, rowcol,
XmNx, 0,
XmNy, 10,
XmNlabelString, label,
NULL);

XmStringFree(label);
XtSetArg(args[0], XmNrows, 50);
XtSetArg(args[1], XmNcolumns, 80);
XtSetArg(args[2], XmNeditable, True);
XtSetArg(args[3], XmNeditMode, XmMULTI_LINE_EDIT);
XtSetArg(args[4], XmNx, 0);
XtSetArg(args[5], XmNy, 30);

message = XmCreateScrolledText(rowcol, "message", args, (Cardinal *)6);
XtManageChild(message);





XtVaSetValues(compose_shell,
XmNx, 100,
XmNy, 100,
XmNwidth, 600,
XmNheight, 700,
XmNbackground, pixel1,
NULL);

fp = fopen("./help", "r");
while( fgets(temp, 99999999, fp) != NULL ){
strcat(helpFile, temp);

}
XmTextSetString(message, helpFile);
XtPopup(compose_shell, XtGrabExclusive);
XtManageChild(rowcol);
XtRealizeWidget(compose_shell);
}
void drawComposeWin(){

XtVaGetValues(toplevel, XtNcolormap, &cmap, NULL);
compose_shell = XtCreatePopupShell("Compose Message Window", transientShellWidgetClass, toplevel, NULL, 0);
compose = XtCreateManagedWidget("compose", xmRowColumnWidgetClass, compose_shell, NULL, 0);
XtVaSetValues(compose, XmNbackground, pixel1, NULL);

rowcol = XtVaCreateWidget("rowcol", xmBulletinBoardWidgetClass, compose, XmNbackground, pixel1, NULL);

label = XmStringCreateSimple("To:");
XtVaCreateManagedWidget(
"to",
xmLabelWidgetClass, rowcol,
XmNlabelString, label,
XmNx, 0,
XmNy, 0,
NULL);

XmStringFree(label);

to = XtVaCreateManagedWidget("to",
xmTextFieldWidgetClass, rowcol,
XmNx, 0,
XmNy, 30,
NULL);
/*XtAddCallback(text_w, XmNactivateCallback, add_item, message);*/

label = XmStringCreateSimple("CC:");
XtVaCreateManagedWidget("search_label", xmLabelWidgetClass, rowcol,
XmNlabelString, label,
XmNx, 0,
XmNy, 60,
NULL);
XmStringFree(label);

cc = XtVaCreateManagedWidget("cc",
xmTextFieldWidgetClass, rowcol,
XmNcolumns, 25,
XmNx, 0,
XmNy, 80,
NULL);
/*XtAddCallback(text_w, XmNactivateCallback, search_item, list_w);*/

label = XmStringCreateSimple("Subject:");
XtVaCreateManagedWidget("search_label", xmLabelWidgetClass, rowcol,
XmNlabelString, label,
XmNx, 0,
XmNy, 110,
NULL);
XmStringFree(label);
subject = XtVaCreateManagedWidget("subject",
xmTextFieldWidgetClass, rowcol,
XmNx, 0,
XmNy, 130,
XmNcolumns, 25,
NULL);
/* XtAddCallback(text_w, XmNactivateCallback, search_item, list_w);*/


label = XmStringCreateSimple("Message:");
XtVaCreateManagedWidget("message_label", xmLabelWidgetClass, rowcol,
XmNx, 0,
XmNy, 160,
XmNlabelString, label,
NULL);

XmStringFree(label);
XtSetArg(args[0], XmNrows, 30);
XtSetArg(args[1], XmNcolumns, 80);
XtSetArg(args[2], XmNeditable, True);
XtSetArg(args[3], XmNeditMode, XmMULTI_LINE_EDIT);
XtSetArg(args[4], XmNx, 0);
XtSetArg(args[5], XmNy, 180);

message = XmCreateScrolledText(rowcol, "message", args, (Cardinal *)6);
XtManageChild(message);


XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 200);
XtSetArg(args[3], XmNy, 30);

sendMessage = XtCreateManagedWidget("Send", xmPushButtonWidgetClass, rowcol, args, (Cardinal *)4);
XtAddCallback(sendMessage, XmNactivateCallback, sendMsg, NULL);


XtVaSetValues(compose_shell,
XmNx, 100,
XmNy, 100,
XmNwidth, 600,
XmNheight, 700,
XmNbackground, pixel1,
NULL);

XtPopup(compose_shell, XtGrabExclusive);
XtManageChild(rowcol);
XtRealizeWidget(compose_shell);
}
void drawReceiveWin(){

int foundMessage = FALSE;
int atEndofMessage = FALSE;
FILE *fp;
char temp[100];
char line[10000];
int line_length = 9999;
XmString messages[999];
int numOfMessages;
XmString tempXmString[999];
int i;

XtVaGetValues(toplevel, XtNcolormap, &cmap, NULL);

receive_shell = XtCreatePopupShell("Receive Mail Window", transientShellWidgetClass, toplevel, NULL, 0);

receive = XtCreateManagedWidget("compose"
, xmRowColumnWidgetClass, receive_shell,
NULL, 0);

XtVaSetValues(receive, XmNbackground, pixel2, NULL);

rowcol = XtVaCreateWidget("rowcol",
xmBulletinBoardWidgetClass, receive,
XmNbackground, pixel2,
NULL);

label = XmStringCreateSimple("Messages: ");
XtVaCreateManagedWidget("messagesLabel", xmLabelWidgetClass, rowcol,
XmNlabelString, label,
XmNx, 0,
XmNy, 0,
NULL);

label = XmStringCreateSimple("Message Text: ");
XtVaCreateManagedWidget("message_label", xmLabelWidgetClass, rowcol,
XmNx, 220,
XmNy, 0,
XmNlabelString, label,
NULL);
XmStringFree(label);

XtSetArg(args[0], XmNrows, 30);
XtSetArg(args[1], XmNcolumns, 80);
XtSetArg(args[2], XmNeditable, True);
XtSetArg(args[3], XmNeditMode, XmMULTI_LINE_EDIT);
XtSetArg(args[4], XmNx, 220);
XtSetArg(args[5], XmNy, 50);
XtSetArg(args[6], XmNwidth, 300);
//XtSetArg(args[7], XmNheight, 700);

message = XmCreateScrolledText(rowcol, "message", args, 7);
XtManageChild(message);

receiveList = XtVaCreateManagedWidget("receiveList",
xmListWidgetClass, rowcol,
XmNx, 0,
XmNy, 50,
XmNwidth, 200,
XmNheight, 500,
XmNlistSizePolicy, XmCONSTANT,
XmNselectionPolicy, XmEXTENDED_SELECT,

NULL);
XtAddCallback(receiveList, XmNextendedSelectionCallback, messageSelected, NULL);
XtAddCallback(receiveList, XmNdefaultActionCallback, messageSelected, NULL);

int num=0;
fp = fopen(location, "r");
while( fgets(temp, 99999999, fp) != NULL ){
if(temp[0] == 'F' && temp[1] == 'r' && temp[2] == 'o' && temp[3] == 'm' && temp[4] != ':' && temp[5] != 'M' && temp[6] != 'A' && temp[7] != 'I' && temp[8] != 'L' && temp[9] != 'E' && temp[10] != 'R'){
if(atEndofMessage == FALSE && foundMessage == FALSE){
num++;
numOfMessages++;
foundMessage = TRUE;
atEndofMessage = FALSE;
for(i=5; temp[i] != ' '; i++){
temp[-5+i] = temp[i];
printf("%s", temp);
}
temp[i-5] = '\0';
printf("%s", temp);
//exit(1);
tempXmString[0] = XmStringCreateSimple(temp);
XmListAddItems(receiveList, tempXmString, 1, numOfMessages - 1);
}
else if(foundMessage == TRUE){
atEndofMessage = TRUE;
for(i=5; temp[i] != ' '; i++){
temp[-5+i] = temp[i];
printf("%s", temp);
}
temp[i-5] = '\0';
printf("%s", temp);
tempXmString[0] = XmStringCreateSimple(temp);
XmListAddItems(receiveList, tempXmString, 1, numOfMessages - 1);
}
}

if(foundMessage == TRUE && atEndofMessage == FALSE){
strcat(line, temp);

}
if(atEndofMessage == TRUE){
strcat(line, "\n------------------------------------------------------------------\n");
//printf("FOUND!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//printf("%s", line);
strcpy(line, "");
atEndofMessage = FALSE;
strcat(line, temp);
}

}
fclose(fp);
XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 525);
XtSetArg(args[3], XmNy, 50);

deleteMessageButton = XtCreateManagedWidget("Delete", xmPushButtonWidgetClass, rowcol, args, (Cardinal *)4);
XtAddCallback(deleteMessageButton, XmNactivateCallback, deleteMessage, NULL);

XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 525);
XtSetArg(args[3], XmNy, 90);

replyMessageButton = XtCreateManagedWidget("Reply", xmPushButtonWidgetClass, rowcol, args, (Cardinal *)4);
XtAddCallback(replyMessageButton, XmNactivateCallback, replyMessage, NULL);
XtVaSetValues(receive_shell,
XmNx, 100,
XmNy, 100,
XmNwidth, 600,
XmNheight, 700,
NULL);
XtPopup(receive_shell, XtGrabExclusive);
XtManageChild(rowcol);
XtRealizeWidget(receive_shell);
}
void drawFoldersWin(){

int foundMessage = FALSE;
int atEndofMessage = FALSE;
FILE *fp;
char temp[100];
char line[10000];
int line_length = 9999;
XmString messages[999];
int numOfMessages;
XmString tempXmString[999];
int i;
char home[99999];

strcpy(home, getenv("HOME"));


DIR *dp;
struct dirent *ep;
strcat(home, "/mail");
dp = opendir (home);


XtVaGetValues(toplevel, XtNcolormap, &cmap, NULL);

folder_shell = XtCreatePopupShell("Receive Mail Window", transientShellWidgetClass, toplevel, NULL, 0);
XtVaSetValues(folder_shell,
XmNx, 100,
XmNy, 100,
XmNwidth, 750,
XmNheight, 700,
XmNbackground, pixel3,
NULL);

folder = XtCreateManagedWidget("folder"
, xmRowColumnWidgetClass, folder_shell,
NULL, 0);

XtVaSetValues(folder, XmNbackground, pixel3, NULL);

rowcol = XtVaCreateWidget("rowcol",
xmBulletinBoardWidgetClass, folder,
XmNbackground, pixel3,
NULL);

label = XmStringCreateSimple("Folders: ");
XtVaCreateManagedWidget("foldersLabel", xmLabelWidgetClass, rowcol,
XmNlabelString, label,
XmNx, 0,
XmNy, 0,
NULL);
XmStringFree(label);

label = XmStringCreateSimple("Message Text: ");
XtVaCreateManagedWidget("message_label", xmLabelWidgetClass, rowcol,
XmNx, 440,
XmNy, 0,
XmNlabelString, label,
NULL);
XmStringFree(label);

XtSetArg(args[0], XmNrows, 30);
XtSetArg(args[1], XmNcolumns, 40);
XtSetArg(args[2], XmNeditable, True);
XtSetArg(args[3], XmNeditMode, XmMULTI_LINE_EDIT);
XtSetArg(args[4], XmNx, 440);
XtSetArg(args[5], XmNy, 50);

message = XmCreateScrolledText(rowcol, "message", args, (Cardinal *)6);
XtManageChild(message);

folderList = XtVaCreateManagedWidget("folderList",
xmListWidgetClass, rowcol,
XmNx, 0,
XmNy, 50,
XmNwidth, 200,
XmNheight, 500,
XmNlistSizePolicy, XmCONSTANT,
XmNselectionPolicy, XmEXTENDED_SELECT,

NULL);
XtAddCallback(folderList, XmNextendedSelectionCallback, folderSelected, NULL);
XtAddCallback(folderList, XmNdefaultActionCallback, folderSelected, NULL);

if (dp != NULL)
{
while (ep = readdir (dp)){
tempXmString[0] = XmStringCreateSimple(ep->d_name);
XmListAddItems(folderList, tempXmString, 1, numOfMessages - 1);
}
//puts (ep->d_name);
(void) closedir (dp);
}
else{
perror ("Couldn't open the directory");
}


receiveList = XtVaCreateManagedWidget("receiveList",
xmListWidgetClass, rowcol,
XmNx, 225,
XmNy, 50,
XmNwidth, 200,
XmNheight, 500,
XmNlistSizePolicy, XmCONSTANT,
XmNselectionPolicy, XmEXTENDED_SELECT,

NULL);
XtAddCallback(receiveList, XmNextendedSelectionCallback, messageSelected, NULL);
XtAddCallback(receiveList, XmNdefaultActionCallback, messageSelected, NULL);

/*
int num=0;
fp = fopen(location, "r");
while( fgets(temp, 99999999, fp) != NULL ){
if(temp[0] == 'F' && temp[1] == 'r' && temp[2] == 'o' && temp[3] == 'm' && temp[4] != ':' && temp[5] != 'M' && temp[6] != 'A' && temp[7] != 'I' && temp[8] != 'L' && temp[9] != 'E' && temp[10] != 'R'){
if(atEndofMessage == FALSE && foundMessage == FALSE){
num++;
numOfMessages++;
foundMessage = TRUE;
atEndofMessage = FALSE;
for(i=5; temp[i] != ' '; i++){
temp[-5+i] = temp[i];
printf("%s", temp);
}
temp[i-5] = '\0';
printf("%s", temp);
//exit(1);
tempXmString[0] = XmStringCreateSimple(temp);
XmListAddItems(receiveList, tempXmString, 1, numOfMessages - 1);
}
else if(foundMessage == TRUE){
atEndofMessage = TRUE;
for(i=5; temp[i] != ' '; i++){
temp[-5+i] = temp[i];
printf("%s", temp);
}
temp[i-5] = '\0';
printf("%s", temp);
tempXmString[0] = XmStringCreateSimple(temp);
XmListAddItems(receiveList, tempXmString, 1, numOfMessages - 1);
}
}

if(foundMessage == TRUE && atEndofMessage == FALSE){
strcat(line, temp);

}
if(atEndofMessage == TRUE){
strcat(line, "\n------------------------------------------------------------------\n");
//printf("FOUND!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
//printf("%s", line);
strcpy(line, "");
atEndofMessage = FALSE;
strcat(line, temp);
}

}*/
//exit(1);fclose(fp);




XtPopup(folder_shell, XtGrabExclusive);
XtManageChild(rowcol);
XtRealizeWidget(folder_shell);


}
main(argc, argv)
char *argv[];
{


if ((username = getlogin()) == NULL) {
fprintf(stderr, "Who are you?\n");
exit(1);
}

red = 0;
blue = 65535;
green = 0;

toplevel = XtVaAppInitialize(&app, "Demos", NULL, 0, &argc, argv, NULL, NULL);

rowcol2 = XtVaCreateManagedWidget("rowcol2", xmBulletinBoardWidgetClass, toplevel, XmNbackground, pixel1,NULL);


XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 20);
XtSetArg(args[3], XmNy, 30);
send = XtCreateManagedWidget("Compose", xmPushButtonWidgetClass, rowcol2, args, 4);
XtAddCallback(send, XmNactivateCallback, button_send, NULL);

XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 80);
XtSetArg(args[3], XmNy, 30);
receive = XtCreateManagedWidget("Receive", xmPushButtonWidgetClass, rowcol2, args, 4);
XtAddCallback(receive, XmNactivateCallback, button_receive, NULL);

XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 140);
XtSetArg(args[3], XmNy, 30);
folders = XtCreateManagedWidget("Folders", xmPushButtonWidgetClass, rowcol2, args, 4);
XtAddCallback(folders, XmNactivateCallback, button_folders, NULL);

XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 200);
XtSetArg(args[3], XmNy, 30);
help = XtCreateManagedWidget("Help", xmPushButtonWidgetClass, rowcol2, args, 4);
XtAddCallback(help, XmNactivateCallback, button_help, NULL);

XtSetArg(args[0], XmNwidth, 50);
XtSetArg(args[1], XmNheight, 30);
XtSetArg(args[2], XmNx, 260);
XtSetArg(args[3], XmNy, 30);
quit = XtCreateManagedWidget("Quit", xmPushButtonWidgetClass, rowcol2, args, 4);
XtAddCallback(quit, XmNactivateCallback, button_quit, NULL);

display = XtDisplay(toplevel);
XtVaGetValues(toplevel, XtNcolormap, &cmap, NULL);

alloc_color.red = red;
alloc_color.blue = blue;
alloc_color.green = green;
alloc_color.flags = DoRed|DoGreen|DoBlue;

XAllocColor(display, cmap, &alloc_color);

pixel1 = alloc_color.pixel;

red = 65535;
blue = 0;
green = 0;

alloc_color.red = red;
alloc_color.blue = blue;
alloc_color.green = green;
alloc_color.flags = DoRed|DoGreen|DoBlue;

XAllocColor(display, cmap, &alloc_color);
pixel2 = alloc_color.pixel;

red = 0;
blue = 0;
green = 65535;

alloc_color.red = red;
alloc_color.blue = blue;
alloc_color.green = green;
alloc_color.flags = DoRed|DoGreen|DoBlue;

XAllocColor(display, cmap, &alloc_color);
pixel3 = alloc_color.pixel;

/*
* Get the user's name.
*/
if ((username = getlogin()) == NULL) {
fprintf(stderr, "Who are you?\n");
exit(1);
}




strcpy(location, "/usr/mail/");
strcat(location, username);
printf("%s", location);/*drawComposeWin();*/

XtRealizeWidget(toplevel);
XtAppMainLoop(app);

}


All times are GMT -5. The time now is 03:44 PM.