Magellan Linux

Diff of /trunk/mkinitrd-magellan/busybox/util-linux/ipcs.c

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 532 by niro, Sat Sep 1 22:45:15 2007 UTC revision 816 by niro, Fri Apr 24 18:33:46 2009 UTC
# Line 8  Line 8 
8   * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.   * Licensed under GPLv2 or later, see file LICENSE in this tarball for details.
9   */   */
10    
 #include "busybox.h"  
 #include <errno.h>  
 #include <time.h>  
 #include <pwd.h>  
 #include <grp.h>  
   
11  /* X/OPEN tells us to use <sys/{types,ipc,sem}.h> for semctl() */  /* X/OPEN tells us to use <sys/{types,ipc,sem}.h> for semctl() */
12  /* X/OPEN tells us to use <sys/{types,ipc,msg}.h> for msgctl() */  /* X/OPEN tells us to use <sys/{types,ipc,msg}.h> for msgctl() */
13  /* X/OPEN tells us to use <sys/{types,ipc,shm}.h> for shmctl() */  /* X/OPEN tells us to use <sys/{types,ipc,shm}.h> for shmctl() */
# Line 23  Line 17 
17  #include <sys/msg.h>  #include <sys/msg.h>
18  #include <sys/shm.h>  #include <sys/shm.h>
19    
20    #include "libbb.h"
21    
22  /*-------------------------------------------------------------------*/  /*-------------------------------------------------------------------*/
23  /* SHM_DEST and SHM_LOCKED are defined in kernel headers,  /* SHM_DEST and SHM_LOCKED are defined in kernel headers,
# Line 67  struct shm_info { Line 61  struct shm_info {
61  /* The last arg of semctl is a union semun, but where is it defined?  /* The last arg of semctl is a union semun, but where is it defined?
62     X/OPEN tells us to define it ourselves, but until recently     X/OPEN tells us to define it ourselves, but until recently
63     Linux include files would also define it. */     Linux include files would also define it. */
64  #if defined (__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)  #if defined(__GNU_LIBRARY__) && !defined(_SEM_SEMUN_UNDEFINED)
65  /* union semun is defined by including <sys/sem.h> */  /* union semun is defined by including <sys/sem.h> */
66  #else  #else
67  /* according to X/OPEN we have to define it ourselves */  /* according to X/OPEN we have to define it ourselves */
68  union semun {  union semun {
69   int val;   int val;
70   struct semid_ds *buf;   struct semid_ds *buf;
71   unsigned short int *array;   unsigned short *array;
72   struct seminfo *__buf;   struct seminfo *__buf;
73  };  };
74  #endif  #endif
# Line 84  union semun { Line 78  union semun {
78     <linux/ipc.h>, which defines a struct ipc_perm with such fields.     <linux/ipc.h>, which defines a struct ipc_perm with such fields.
79     glibc-1.09 has no support for sysv ipc.     glibc-1.09 has no support for sysv ipc.
80     glibc 2 uses __key, __seq */     glibc 2 uses __key, __seq */
81  #if defined (__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1  #if defined(__GNU_LIBRARY__) && __GNU_LIBRARY__ > 1
82  #define KEY __key  #define KEY __key
83  #else  #else
84  #define KEY key  #define KEY key
# Line 105  static void print_perms(int id, struct i Line 99  static void print_perms(int id, struct i
99    
100   printf("%-10d %-10o", id, ipcp->mode & 0777);   printf("%-10d %-10o", id, ipcp->mode & 0777);
101    
102   if ((pw = getpwuid(ipcp->cuid)))   pw = getpwuid(ipcp->cuid);
103   printf(" %-10s", pw->pw_name);   if (pw) printf(" %-10s", pw->pw_name);
104   else   else printf(" %-10d", ipcp->cuid);
105   printf(" %-10d", ipcp->cuid);   gr = getgrgid(ipcp->cgid);
106   if ((gr = getgrgid(ipcp->cgid)))   if (gr) printf(" %-10s", gr->gr_name);
107   printf(" %-10s", gr->gr_name);   else printf(" %-10d", ipcp->cgid);
108   else  
109   printf(" %-10d", ipcp->cgid);   pw = getpwuid(ipcp->uid);
110     if (pw) printf(" %-10s", pw->pw_name);
111   if ((pw = getpwuid(ipcp->uid)))   else printf(" %-10d", ipcp->uid);
112   printf(" %-10s", pw->pw_name);   gr = getgrgid(ipcp->gid);
113   else   if (gr) printf(" %-10s\n", gr->gr_name);
114   printf(" %-10d", ipcp->uid);   else printf(" %-10d\n", ipcp->gid);
  if ((gr = getgrgid(ipcp->gid)))  
  printf(" %-10s\n", gr->gr_name);  
  else  
  printf(" %-10d\n", ipcp->gid);  
115  }  }
116    
117    
# Line 565  static void print_sem(int semid) Line 555  static void print_sem(int semid)
555   }   }
556   printf("%-10d %-10d %-10d %-10d %-10d\n", i, val, ncnt, zcnt, pid);   printf("%-10d %-10d %-10d %-10d %-10d\n", i, val, ncnt, zcnt, pid);
557   }   }
558   puts("");   bb_putchar('\n');
559  }  }
560    
561  int ipcs_main(int argc, char **argv)  int ipcs_main(int argc, char **argv) MAIN_EXTERNALLY_VISIBLE;
562    int ipcs_main(int argc UNUSED_PARAM, char **argv)
563  {  {
564   int id = 0;   int id = 0;
565   unsigned flags = 0;   unsigned flags = 0;
# Line 579  int ipcs_main(int argc, char **argv) Line 570  int ipcs_main(int argc, char **argv)
570  #define flag_sem (1<<2)  #define flag_sem (1<<2)
571  #define flag_shm (1<<3)  #define flag_shm (1<<3)
572    
573   opt = getopt32(argc, argv, "i:aqsmtcplu", &opt_i);   opt = getopt32(argv, "i:aqsmtcplu", &opt_i);
574   if (opt & 0x1) { // -i   if (opt & 0x1) { // -i
575   id = xatoi(opt_i);   id = xatoi(opt_i);
576   flags |= flag_print;   flags |= flag_print;
# Line 597  int ipcs_main(int argc, char **argv) Line 588  int ipcs_main(int argc, char **argv)
588   if (flags & flag_print) {   if (flags & flag_print) {
589   if (flags & flag_shm) {   if (flags & flag_shm) {
590   print_shm(id);   print_shm(id);
591   fflush_stdout_and_exit(0);   fflush_stdout_and_exit(EXIT_SUCCESS);
592   }   }
593   if (flags & flag_sem) {   if (flags & flag_sem) {
594   print_sem(id);   print_sem(id);
595   fflush_stdout_and_exit(0);   fflush_stdout_and_exit(EXIT_SUCCESS);
596   }   }
597   if (flags & flag_msg) {   if (flags & flag_msg) {
598   print_msg(id);   print_msg(id);
599   fflush_stdout_and_exit(0);   fflush_stdout_and_exit(EXIT_SUCCESS);
600   }   }
601   bb_show_usage();   bb_show_usage();
602   }   }
603    
604   if (!(flags & (flag_shm | flag_msg | flag_sem)))   if (!(flags & (flag_shm | flag_msg | flag_sem)))
605   flags |= flag_msg | flag_shm | flag_sem;   flags |= flag_msg | flag_shm | flag_sem;
606   puts("");   bb_putchar('\n');
607    
608   if (flags & flag_shm) {   if (flags & flag_shm) {
609   do_shm();   do_shm();
610   puts("");   bb_putchar('\n');
611   }   }
612   if (flags & flag_sem) {   if (flags & flag_sem) {
613   do_sem();   do_sem();
614   puts("");   bb_putchar('\n');
615   }   }
616   if (flags & flag_msg) {   if (flags & flag_msg) {
617   do_msg();   do_msg();
618   puts("");   bb_putchar('\n');
619   }   }
620   fflush_stdout_and_exit(0);   fflush_stdout_and_exit(EXIT_SUCCESS);
621  }  }

Legend:
Removed from v.532  
changed lines
  Added in v.816