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. |