1*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 2*15db2897SKrishnendu Sadhukhan - Sun Microsystems * CDDL HEADER START 3*15db2897SKrishnendu Sadhukhan - Sun Microsystems * 4*15db2897SKrishnendu Sadhukhan - Sun Microsystems * The contents of this file are subject to the terms of the 5*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Common Development and Distribution License (the "License"). 6*15db2897SKrishnendu Sadhukhan - Sun Microsystems * You may not use this file except in compliance with the License. 7*15db2897SKrishnendu Sadhukhan - Sun Microsystems * 8*15db2897SKrishnendu Sadhukhan - Sun Microsystems * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9*15db2897SKrishnendu Sadhukhan - Sun Microsystems * or http://www.opensolaris.org/os/licensing. 10*15db2897SKrishnendu Sadhukhan - Sun Microsystems * See the License for the specific language governing permissions 11*15db2897SKrishnendu Sadhukhan - Sun Microsystems * and limitations under the License. 12*15db2897SKrishnendu Sadhukhan - Sun Microsystems * 13*15db2897SKrishnendu Sadhukhan - Sun Microsystems * When distributing Covered Code, include this CDDL HEADER in each 14*15db2897SKrishnendu Sadhukhan - Sun Microsystems * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15*15db2897SKrishnendu Sadhukhan - Sun Microsystems * If applicable, add the following below this CDDL HEADER, with the 16*15db2897SKrishnendu Sadhukhan - Sun Microsystems * fields enclosed by brackets "[]" replaced with your own identifying 17*15db2897SKrishnendu Sadhukhan - Sun Microsystems * information: Portions Copyright [yyyy] [name of copyright owner] 18*15db2897SKrishnendu Sadhukhan - Sun Microsystems * 19*15db2897SKrishnendu Sadhukhan - Sun Microsystems * CDDL HEADER END 20*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 21*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 22*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Copyright (c) 2008-2009, Intel Corporation. 23*15db2897SKrishnendu Sadhukhan - Sun Microsystems * All Rights Reserved. 24*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 25*15db2897SKrishnendu Sadhukhan - Sun Microsystems 26*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <unistd.h> 27*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <libintl.h> 28*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <stdio.h> 29*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <stdlib.h> 30*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <string.h> 31*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <ctype.h> 32*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <procfs.h> 33*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <fcntl.h> 34*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <sys/types.h> 35*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include <sys/stat.h> 36*15db2897SKrishnendu Sadhukhan - Sun Microsystems 37*15db2897SKrishnendu Sadhukhan - Sun Microsystems #include "latencytop.h" 38*15db2897SKrishnendu Sadhukhan - Sun Microsystems 39*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* Pipe that breaks the event loop (and exits early) */ 40*15db2897SKrishnendu Sadhukhan - Sun Microsystems static int signal_pipe[2]; 41*15db2897SKrishnendu Sadhukhan - Sun Microsystems 42*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 43*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Get current system time in milliseconds (1e-3). 44*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 45*15db2897SKrishnendu Sadhukhan - Sun Microsystems uint64_t 46*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_millisecond(void) 47*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 48*15db2897SKrishnendu Sadhukhan - Sun Microsystems struct timeval p; 49*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) gettimeofday(&p, NULL); 50*15db2897SKrishnendu Sadhukhan - Sun Microsystems return ((uint64_t)p.tv_sec * 1000 + p.tv_usec / 1000); 51*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 52*15db2897SKrishnendu Sadhukhan - Sun Microsystems 53*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 54*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Check if we are out of memory. 55*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 56*15db2897SKrishnendu Sadhukhan - Sun Microsystems void 57*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_check_null(void *p) 58*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 59*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (p == NULL) { 60*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) fprintf(stderr, "Out of memory!\n"); 61*15db2897SKrishnendu Sadhukhan - Sun Microsystems g_assert(0); 62*15db2897SKrishnendu Sadhukhan - Sun Microsystems exit(2); 63*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 64*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 65*15db2897SKrishnendu Sadhukhan - Sun Microsystems 66*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 67*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Safe malloc. 68*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 69*15db2897SKrishnendu Sadhukhan - Sun Microsystems void * 70*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_malloc(size_t size) 71*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 72*15db2897SKrishnendu Sadhukhan - Sun Microsystems void *ret = malloc(size); 73*15db2897SKrishnendu Sadhukhan - Sun Microsystems 74*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_check_null(ret); 75*15db2897SKrishnendu Sadhukhan - Sun Microsystems 76*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (ret); 77*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 78*15db2897SKrishnendu Sadhukhan - Sun Microsystems 79*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 80*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Safe alloc with memory cleared. 81*15db2897SKrishnendu Sadhukhan - Sun Microsystems * It is named "zalloc" because its signature is different from 82*15db2897SKrishnendu Sadhukhan - Sun Microsystems * calloc() in stdlib. 83*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 84*15db2897SKrishnendu Sadhukhan - Sun Microsystems void * 85*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_zalloc(size_t size) 86*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 87*15db2897SKrishnendu Sadhukhan - Sun Microsystems void *ret = calloc(size, 1); 88*15db2897SKrishnendu Sadhukhan - Sun Microsystems 89*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_check_null(ret); 90*15db2897SKrishnendu Sadhukhan - Sun Microsystems 91*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (ret); 92*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 93*15db2897SKrishnendu Sadhukhan - Sun Microsystems 94*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 95*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Safe strdup. 96*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 97*15db2897SKrishnendu Sadhukhan - Sun Microsystems char * 98*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_strdup(const char *str) 99*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 100*15db2897SKrishnendu Sadhukhan - Sun Microsystems char *ret = strdup(str); 101*15db2897SKrishnendu Sadhukhan - Sun Microsystems 102*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_check_null(ret); 103*15db2897SKrishnendu Sadhukhan - Sun Microsystems 104*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (ret); 105*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 106*15db2897SKrishnendu Sadhukhan - Sun Microsystems 107*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 108*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Get string for current time, e.g. YYYY-MM-DD 109*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 110*15db2897SKrishnendu Sadhukhan - Sun Microsystems void 111*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_time_str(char *buffer, int len) 112*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 113*15db2897SKrishnendu Sadhukhan - Sun Microsystems struct tm tms; 114*15db2897SKrishnendu Sadhukhan - Sun Microsystems time_t t; 115*15db2897SKrishnendu Sadhukhan - Sun Microsystems int i; 116*15db2897SKrishnendu Sadhukhan - Sun Microsystems 117*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) time(&t); 118*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) gmtime_r(&t, &tms); 119*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) asctime_r(&tms, buffer, len); 120*15db2897SKrishnendu Sadhukhan - Sun Microsystems 121*15db2897SKrishnendu Sadhukhan - Sun Microsystems for (i = strlen(buffer)-1; i > 0; --i) { 122*15db2897SKrishnendu Sadhukhan - Sun Microsystems 123*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (isspace(buffer[i])) { 124*15db2897SKrishnendu Sadhukhan - Sun Microsystems buffer[i] = '\0'; 125*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else { 126*15db2897SKrishnendu Sadhukhan - Sun Microsystems break; 127*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 128*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 129*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 130*15db2897SKrishnendu Sadhukhan - Sun Microsystems 131*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 132*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Retrieves the process's executable name and arguments from /proc. 133*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 134*15db2897SKrishnendu Sadhukhan - Sun Microsystems char * 135*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_get_proc_field(pid_t pid, lt_field_t field) 136*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 137*15db2897SKrishnendu Sadhukhan - Sun Microsystems char name[PATH_MAX]; 138*15db2897SKrishnendu Sadhukhan - Sun Microsystems int fd; 139*15db2897SKrishnendu Sadhukhan - Sun Microsystems int ret; 140*15db2897SKrishnendu Sadhukhan - Sun Microsystems psinfo_t psinfo; 141*15db2897SKrishnendu Sadhukhan - Sun Microsystems 142*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) snprintf(name, PATH_MAX, "/proc/%d/psinfo", (int)pid); 143*15db2897SKrishnendu Sadhukhan - Sun Microsystems fd = open(name, O_RDONLY); 144*15db2897SKrishnendu Sadhukhan - Sun Microsystems 145*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (fd == -1) { 146*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (NULL); 147*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 148*15db2897SKrishnendu Sadhukhan - Sun Microsystems 149*15db2897SKrishnendu Sadhukhan - Sun Microsystems ret = read(fd, (char *)&psinfo, sizeof (psinfo_t)); 150*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) close(fd); 151*15db2897SKrishnendu Sadhukhan - Sun Microsystems 152*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (ret < 0) { 153*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (NULL); 154*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 155*15db2897SKrishnendu Sadhukhan - Sun Microsystems 156*15db2897SKrishnendu Sadhukhan - Sun Microsystems switch (field) { 157*15db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_FIELD_FNAME: 158*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (lt_strdup(psinfo.pr_fname)); 159*15db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_FIELD_PSARGS: 160*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (lt_strdup(psinfo.pr_psargs)); 161*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 162*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (NULL); 163*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 164*15db2897SKrishnendu Sadhukhan - Sun Microsystems 165*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 166*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Helper function to update the data structure. 167*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 168*15db2897SKrishnendu Sadhukhan - Sun Microsystems void 169*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_update_stat_value(lt_stat_data_t *entry, 170*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_stat_type_t type, uint64_t value) 171*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 172*15db2897SKrishnendu Sadhukhan - Sun Microsystems switch (type) { 173*15db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_STAT_COUNT: 174*15db2897SKrishnendu Sadhukhan - Sun Microsystems entry->lt_s_count += value; 175*15db2897SKrishnendu Sadhukhan - Sun Microsystems break; 176*15db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_STAT_SUM: 177*15db2897SKrishnendu Sadhukhan - Sun Microsystems entry->lt_s_total += value; 178*15db2897SKrishnendu Sadhukhan - Sun Microsystems break; 179*15db2897SKrishnendu Sadhukhan - Sun Microsystems case LT_STAT_MAX: 180*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (value > entry->lt_s_max) { 181*15db2897SKrishnendu Sadhukhan - Sun Microsystems entry->lt_s_max = value; 182*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 183*15db2897SKrishnendu Sadhukhan - Sun Microsystems break; 184*15db2897SKrishnendu Sadhukhan - Sun Microsystems default: 185*15db2897SKrishnendu Sadhukhan - Sun Microsystems break; 186*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 187*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 188*15db2897SKrishnendu Sadhukhan - Sun Microsystems 189*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 190*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Helper function to sort on total. 191*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 192*15db2897SKrishnendu Sadhukhan - Sun Microsystems int 193*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_sort_by_total_desc(lt_stat_entry_t *a, lt_stat_entry_t *b) 194*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 195*15db2897SKrishnendu Sadhukhan - Sun Microsystems g_assert(a != NULL && b != NULL); 196*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 197*15db2897SKrishnendu Sadhukhan - Sun Microsystems * lt_s_total is of type int64_t, so we can't simply return 198*15db2897SKrishnendu Sadhukhan - Sun Microsystems * (b->lt_se_data.lt_s_total - a->lt_se_data.lt_s_total). 199*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 200*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (b->lt_se_data.lt_s_total > a->lt_se_data.lt_s_total) { 201*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (1); 202*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (b->lt_se_data.lt_s_total < a->lt_se_data.lt_s_total) { 203*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (-1); 204*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else { 205*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (0); 206*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 207*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 208*15db2897SKrishnendu Sadhukhan - Sun Microsystems 209*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 210*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Helper function to sort on max. 211*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 212*15db2897SKrishnendu Sadhukhan - Sun Microsystems int 213*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_sort_by_max_desc(lt_stat_entry_t *a, lt_stat_entry_t *b) 214*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 215*15db2897SKrishnendu Sadhukhan - Sun Microsystems g_assert(a != NULL && b != NULL); 216*15db2897SKrishnendu Sadhukhan - Sun Microsystems 217*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (b->lt_se_data.lt_s_max > a->lt_se_data.lt_s_max) { 218*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (1); 219*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (b->lt_se_data.lt_s_max < a->lt_se_data.lt_s_max) { 220*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (-1); 221*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else { 222*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (0); 223*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 224*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 225*15db2897SKrishnendu Sadhukhan - Sun Microsystems 226*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 227*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Helper function to sort on count. 228*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 229*15db2897SKrishnendu Sadhukhan - Sun Microsystems int 230*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_sort_by_count_desc(lt_stat_entry_t *a, lt_stat_entry_t *b) 231*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 232*15db2897SKrishnendu Sadhukhan - Sun Microsystems g_assert(a != NULL && b != NULL); 233*15db2897SKrishnendu Sadhukhan - Sun Microsystems 234*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (b->lt_se_data.lt_s_count > a->lt_se_data.lt_s_count) { 235*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (1); 236*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (b->lt_se_data.lt_s_count < a->lt_se_data.lt_s_count) { 237*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (-1); 238*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else { 239*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (0); 240*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 241*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 242*15db2897SKrishnendu Sadhukhan - Sun Microsystems 243*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 244*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Helper function to sort on average. 245*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 246*15db2897SKrishnendu Sadhukhan - Sun Microsystems int 247*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_sort_by_avg_desc(lt_stat_entry_t *a, lt_stat_entry_t *b) 248*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 249*15db2897SKrishnendu Sadhukhan - Sun Microsystems double avg_a, avg_b; 250*15db2897SKrishnendu Sadhukhan - Sun Microsystems 251*15db2897SKrishnendu Sadhukhan - Sun Microsystems g_assert(a != NULL && b != NULL); 252*15db2897SKrishnendu Sadhukhan - Sun Microsystems 253*15db2897SKrishnendu Sadhukhan - Sun Microsystems avg_a = (double)a->lt_se_data.lt_s_total / a->lt_se_data.lt_s_count; 254*15db2897SKrishnendu Sadhukhan - Sun Microsystems avg_b = (double)b->lt_se_data.lt_s_total / b->lt_se_data.lt_s_count; 255*15db2897SKrishnendu Sadhukhan - Sun Microsystems 256*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (avg_b > avg_a) { 257*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (1); 258*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else if (avg_b < avg_a) { 259*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (-1); 260*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else { 261*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (0); 262*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 263*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 264*15db2897SKrishnendu Sadhukhan - Sun Microsystems 265*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 266*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Create pipe for signal handler and wakeup. 267*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 268*15db2897SKrishnendu Sadhukhan - Sun Microsystems void 269*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_gpipe_init(void) 270*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 271*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) pipe(signal_pipe); 272*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 273*15db2897SKrishnendu Sadhukhan - Sun Microsystems 274*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 275*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Close the pipe used in signal handler. 276*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 277*15db2897SKrishnendu Sadhukhan - Sun Microsystems void 278*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_gpipe_deinit(void) 279*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 280*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) close(signal_pipe[0]); 281*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) close(signal_pipe[1]); 282*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 283*15db2897SKrishnendu Sadhukhan - Sun Microsystems 284*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 285*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Break early from the main loop. 286*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 287*15db2897SKrishnendu Sadhukhan - Sun Microsystems void 288*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_gpipe_break(const char *ch) 289*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 290*15db2897SKrishnendu Sadhukhan - Sun Microsystems (void) write(signal_pipe[1], ch, 1); 291*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 292*15db2897SKrishnendu Sadhukhan - Sun Microsystems 293*15db2897SKrishnendu Sadhukhan - Sun Microsystems int 294*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_gpipe_readfd(void) 295*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 296*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (signal_pipe[0]); 297*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 298*15db2897SKrishnendu Sadhukhan - Sun Microsystems 299*15db2897SKrishnendu Sadhukhan - Sun Microsystems /* 300*15db2897SKrishnendu Sadhukhan - Sun Microsystems * Check if the given file exists. 301*15db2897SKrishnendu Sadhukhan - Sun Microsystems */ 302*15db2897SKrishnendu Sadhukhan - Sun Microsystems int 303*15db2897SKrishnendu Sadhukhan - Sun Microsystems lt_file_exist(const char *name) 304*15db2897SKrishnendu Sadhukhan - Sun Microsystems { 305*15db2897SKrishnendu Sadhukhan - Sun Microsystems struct stat64 st; 306*15db2897SKrishnendu Sadhukhan - Sun Microsystems 307*15db2897SKrishnendu Sadhukhan - Sun Microsystems if (stat64(name, &st) == 0) { 308*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (1); 309*15db2897SKrishnendu Sadhukhan - Sun Microsystems } else { 310*15db2897SKrishnendu Sadhukhan - Sun Microsystems return (0); 311*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 312*15db2897SKrishnendu Sadhukhan - Sun Microsystems } 313