Changeset 5846 for trunk/Ohana/src/opihi/lib.data/open_image.c
- Timestamp:
- Dec 27, 2005, 5:06:32 AM (21 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/lib.data/open_image.c (modified) (4 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/lib.data/open_image.c
r4301 r5846 1 1 # include "display.h" 2 2 3 # define DEBUG 0 3 4 … … 18 19 19 20 for (i = 0; i < NXIMAGE; i++) { 20 if (Ximage[i] > 0) { 21 SendGraphCommand (Ximage[i], 4, "QUIT"); 22 } 21 KiiClose (Ximage[i]); 23 22 } 24 23 } 25 26 24 27 25 void InitImage () { … … 48 46 int open_image (int N) { 49 47 50 int InitSocket, status, addreslen; 51 struct sockaddr_un Address; 52 char temp[128], socket_name[64], *kii_exec; 53 int Ntry, fd; 48 int fd; 49 char *kii_exec; 54 50 55 51 kii_exec = get_variable ("KII"); … … 59 55 } 60 56 61 sprintf (socket_name, "/tmp/Kii.XXXXXX"); 62 if ((fd = mkstemp (socket_name)) == -1) { 57 fd = KiiOpen (kii_exec, NULL); 58 free (kii_exec); 59 60 if (fd < 0) { 63 61 fprintf (stderr, "error starting kii\n"); 64 62 return (FALSE); 65 } 66 close (fd); 67 unlink (socket_name); 63 } 68 64 69 strcpy (Address.sun_path, socket_name); 70 Address.sun_family = AF_UNIX; 71 InitSocket = socket (AF_UNIX, SOCK_STREAM, 0); 72 status = bind (InitSocket, (struct sockaddr *) &Address, sizeof (Address)); 73 status = listen (InitSocket, 1); 74 75 sprintf (temp, "%s %s &", kii_exec, socket_name); 76 free (kii_exec); 77 78 # if DEBUG 79 fprintf (stderr, "start kii, press return: %s\n", temp); 80 fscanf (stdin, "%d", &i); 81 # else 82 system (temp); 83 # endif 84 85 addreslen = sizeof (Address); 86 fcntl (InitSocket, F_SETFL, O_NONBLOCK); 87 88 # define NTRY 2000 89 Ntry = 0; 90 while (Ntry < NTRY) { 91 Ximage[N] = accept (InitSocket, (struct sockaddr *)&Address, &addreslen); 92 if (Ximage[N] == -1) { 93 if (errno == EAGAIN) { 94 usleep (10000); 95 Ntry ++; 96 } else { 97 Ntry = NTRY; 98 } 99 } else { 100 Ntry = NTRY; 101 } 102 } 103 104 if (Ximage[N] < 0) { 105 fprintf (stderr, "error starting kii\n"); 106 return (FALSE); 107 } else { 108 fcntl (Ximage[N], F_SETFL, !O_NONBLOCK); 109 return (TRUE); 110 } 111 65 Ximage[N] = fd; 66 return (TRUE); 112 67 } 113 68
Note:
See TracChangeset
for help on using the changeset viewer.
