mirror of
https://github.com/sheumann/hush.git
synced 2024-12-21 23:29:34 +00:00
random s/short/int/
add_cmd 1189 1190 +1 xconnect_ftpdata 118 117 -1 data_align 86 84 -2 process_files 2101 2096 -5 forkexec 1345 1334 -11
This commit is contained in:
parent
069e347863
commit
284d0faed6
@ -3,14 +3,12 @@
|
|||||||
* 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.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
//#include <sys/types.h>
|
|
||||||
|
|
||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
#include "unarchive.h"
|
#include "unarchive.h"
|
||||||
|
|
||||||
void data_align(archive_handle_t *archive_handle, const unsigned short boundary)
|
void data_align(archive_handle_t *archive_handle, unsigned boundary)
|
||||||
{
|
{
|
||||||
const unsigned short skip_amount = (boundary - (archive_handle->offset % boundary)) % boundary;
|
unsigned skip_amount = (boundary - (archive_handle->offset % boundary)) % boundary;
|
||||||
|
|
||||||
archive_handle->seek(archive_handle, skip_amount);
|
archive_handle->seek(archive_handle, skip_amount);
|
||||||
archive_handle->offset += skip_amount;
|
archive_handle->offset += skip_amount;
|
||||||
|
@ -546,13 +546,16 @@ static int writeTarFile(const int tar_fd, const int verboseFlag,
|
|||||||
|
|
||||||
if (gzipPid == 0) {
|
if (gzipPid == 0) {
|
||||||
/* child */
|
/* child */
|
||||||
xmove_fd(tbInfo.tarFd, 1);
|
/* NB: close _first_, then move fds! */
|
||||||
xmove_fd(gzipDataPipe.rd, 0);
|
|
||||||
close(gzipDataPipe.wr);
|
close(gzipDataPipe.wr);
|
||||||
#if WAIT_FOR_CHILD
|
#if WAIT_FOR_CHILD
|
||||||
close(gzipStatusPipe.rd);
|
close(gzipStatusPipe.rd);
|
||||||
|
/* gzipStatusPipe.wr will close only on exec -
|
||||||
|
* parent waits for this close to happen */
|
||||||
fcntl(gzipStatusPipe.wr, F_SETFD, FD_CLOEXEC);
|
fcntl(gzipStatusPipe.wr, F_SETFD, FD_CLOEXEC);
|
||||||
#endif
|
#endif
|
||||||
|
xmove_fd(gzipDataPipe.rd, 0);
|
||||||
|
xmove_fd(tbInfo.tarFd, 1);
|
||||||
/* exec gzip/bzip2 program/applet */
|
/* exec gzip/bzip2 program/applet */
|
||||||
BB_EXECLP(zip_exec, zip_exec, "-f", NULL);
|
BB_EXECLP(zip_exec, zip_exec, "-f", NULL);
|
||||||
vfork_exec_errno = errno;
|
vfork_exec_errno = errno;
|
||||||
@ -570,7 +573,7 @@ static int writeTarFile(const int tar_fd, const int verboseFlag,
|
|||||||
|
|
||||||
/* Wait until child execs (or fails to) */
|
/* Wait until child execs (or fails to) */
|
||||||
n = full_read(gzipStatusPipe.rd, &buf, 1);
|
n = full_read(gzipStatusPipe.rd, &buf, 1);
|
||||||
if ((n < 0) && (/*errno == EAGAIN ||*/ errno == EINTR))
|
if (n < 0 /* && errno == EAGAIN */)
|
||||||
continue; /* try it again */
|
continue; /* try it again */
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -12,6 +12,7 @@ lib-$(CONFIG_CAL) += cal.o
|
|||||||
lib-$(CONFIG_CAT) += cat.o
|
lib-$(CONFIG_CAT) += cat.o
|
||||||
lib-$(CONFIG_MORE) += cat.o # more uses it if stdout isn't a tty
|
lib-$(CONFIG_MORE) += cat.o # more uses it if stdout isn't a tty
|
||||||
lib-$(CONFIG_LESS) += cat.o # less too
|
lib-$(CONFIG_LESS) += cat.o # less too
|
||||||
|
lib-$(CONFIG_CRONTAB) += cat.o # crontab -l
|
||||||
lib-$(CONFIG_CATV) += catv.o
|
lib-$(CONFIG_CATV) += catv.o
|
||||||
lib-$(CONFIG_CHGRP) += chgrp.o chown.o
|
lib-$(CONFIG_CHGRP) += chgrp.o chown.o
|
||||||
lib-$(CONFIG_CHMOD) += chmod.o
|
lib-$(CONFIG_CHMOD) += chmod.o
|
||||||
|
@ -76,7 +76,7 @@ typedef struct sed_cmd_s {
|
|||||||
FILE *sw_file; /* File (sw) command writes to, -1 for none. */
|
FILE *sw_file; /* File (sw) command writes to, -1 for none. */
|
||||||
char *string; /* Data string for (saicytb) commands. */
|
char *string; /* Data string for (saicytb) commands. */
|
||||||
|
|
||||||
unsigned short which_match; /* (s) Which match to replace (0 for all) */
|
unsigned which_match; /* (s) Which match to replace (0 for all) */
|
||||||
|
|
||||||
/* Bitfields (gcc won't group them if we don't) */
|
/* Bitfields (gcc won't group them if we don't) */
|
||||||
unsigned invert:1; /* the '!' after the address */
|
unsigned invert:1; /* the '!' after the address */
|
||||||
@ -353,7 +353,7 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr)
|
|||||||
/* Match 0 treated as all, multiple matches we take the last one. */
|
/* Match 0 treated as all, multiple matches we take the last one. */
|
||||||
const char *pos = substr + idx;
|
const char *pos = substr + idx;
|
||||||
/* FIXME: error check? */
|
/* FIXME: error check? */
|
||||||
sed_cmd->which_match = (unsigned short)strtol(substr+idx, (char**) &pos, 10);
|
sed_cmd->which_match = (unsigned)strtol(substr+idx, (char**) &pos, 10);
|
||||||
idx = pos - substr;
|
idx = pos - substr;
|
||||||
}
|
}
|
||||||
continue;
|
continue;
|
||||||
@ -364,7 +364,8 @@ static int parse_subst_cmd(sed_cmd_t *sed_cmd, const char *substr)
|
|||||||
switch (substr[idx]) {
|
switch (substr[idx]) {
|
||||||
/* Replace all occurrences */
|
/* Replace all occurrences */
|
||||||
case 'g':
|
case 'g':
|
||||||
if (match[0] != '^') sed_cmd->which_match = 0;
|
if (match[0] != '^')
|
||||||
|
sed_cmd->which_match = 0;
|
||||||
break;
|
break;
|
||||||
/* Print pattern space */
|
/* Print pattern space */
|
||||||
case 'p':
|
case 'p':
|
||||||
@ -683,7 +684,8 @@ static int do_subst_command(sed_cmd_t *sed_cmd, char **line)
|
|||||||
altered++;
|
altered++;
|
||||||
|
|
||||||
/* if we're not doing this globally, get out now */
|
/* if we're not doing this globally, get out now */
|
||||||
if (sed_cmd->which_match) break;
|
if (sed_cmd->which_match)
|
||||||
|
break;
|
||||||
} while (*oldline && (regexec(current_regex, oldline, 10, G.regmatch, 0) != REG_NOMATCH));
|
} while (*oldline && (regexec(current_regex, oldline, 10, G.regmatch, 0) != REG_NOMATCH));
|
||||||
|
|
||||||
/* Copy rest of string into output pipeline */
|
/* Copy rest of string into output pipeline */
|
||||||
|
@ -595,14 +595,14 @@ int bb_execvp(const char *file, char *const argv[]);
|
|||||||
pid_t spawn(char **argv);
|
pid_t spawn(char **argv);
|
||||||
pid_t xspawn(char **argv);
|
pid_t xspawn(char **argv);
|
||||||
|
|
||||||
/* Unlike waitpid, waits ONLY for one process,
|
int safe_waitpid(int pid, int *wstat, int options);
|
||||||
|
/* Unlike waitpid, waits ONLY for one process.
|
||||||
* It's safe to pass negative 'pids' from failed [v]fork -
|
* It's safe to pass negative 'pids' from failed [v]fork -
|
||||||
* wait4pid will return -1 (and will not clobber [v]fork's errno).
|
* wait4pid will return -1 (and will not clobber [v]fork's errno).
|
||||||
* IOW: rc = wait4pid(spawn(argv));
|
* IOW: rc = wait4pid(spawn(argv));
|
||||||
* if (rc < 0) bb_perror_msg("%s", argv[0]);
|
* if (rc < 0) bb_perror_msg("%s", argv[0]);
|
||||||
* if (rc > 0) bb_error_msg("exit code: %d", rc);
|
* if (rc > 0) bb_error_msg("exit code: %d", rc);
|
||||||
*/
|
*/
|
||||||
int safe_waitpid(int pid, int *wstat, int options);
|
|
||||||
int wait4pid(int pid);
|
int wait4pid(int pid);
|
||||||
int wait_any_nohang(int *wstat);
|
int wait_any_nohang(int *wstat);
|
||||||
#define wait_crashed(w) ((w) & 127)
|
#define wait_crashed(w) ((w) & 127)
|
||||||
|
@ -97,7 +97,7 @@ extern void seek_by_read(const archive_handle_t *archive_handle, const unsigned
|
|||||||
|
|
||||||
extern ssize_t archive_xread_all_eof(archive_handle_t *archive_handle, unsigned char *buf, size_t count);
|
extern ssize_t archive_xread_all_eof(archive_handle_t *archive_handle, unsigned char *buf, size_t count);
|
||||||
|
|
||||||
extern void data_align(archive_handle_t *archive_handle, const unsigned short boundary);
|
extern void data_align(archive_handle_t *archive_handle, unsigned boundary);
|
||||||
extern const llist_t *find_list_entry(const llist_t *list, const char *filename);
|
extern const llist_t *find_list_entry(const llist_t *list, const char *filename);
|
||||||
extern const llist_t *find_list_entry2(const llist_t *list, const char *filename);
|
extern const llist_t *find_list_entry2(const llist_t *list, const char *filename);
|
||||||
|
|
||||||
|
@ -1168,7 +1168,7 @@ static const char BuffType[] ALIGN1 =
|
|||||||
static void dump_identity(const struct hd_driveid *id)
|
static void dump_identity(const struct hd_driveid *id)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
const unsigned short int *id_regs = (const void*) id;
|
const unsigned short *id_regs = (const void*) id;
|
||||||
|
|
||||||
printf("\n Model=%.40s, FwRev=%.8s, SerialNo=%.20s\n Config={",
|
printf("\n Model=%.40s, FwRev=%.8s, SerialNo=%.20s\n Config={",
|
||||||
id->model, id->fw_rev, id->serial_no);
|
id->model, id->fw_rev, id->serial_no);
|
||||||
|
@ -72,7 +72,7 @@ static int ftpcmd(const char *s1, const char *s2, FILE *stream, char *buf)
|
|||||||
static int xconnect_ftpdata(ftp_host_info_t *server, char *buf)
|
static int xconnect_ftpdata(ftp_host_info_t *server, char *buf)
|
||||||
{
|
{
|
||||||
char *buf_ptr;
|
char *buf_ptr;
|
||||||
unsigned short port_num;
|
unsigned port_num;
|
||||||
|
|
||||||
/* Response is "NNN garbageN1,N2,N3,N4,P1,P2[)garbage]
|
/* Response is "NNN garbageN1,N2,N3,N4,P1,P2[)garbage]
|
||||||
* Server's IP is N1.N2.N3.N4 (we ignore it)
|
* Server's IP is N1.N2.N3.N4 (we ignore it)
|
||||||
|
@ -1409,10 +1409,11 @@ static void send_cgi_and_exit(
|
|||||||
/* Child process */
|
/* Child process */
|
||||||
xfunc_error_retval = 242;
|
xfunc_error_retval = 242;
|
||||||
|
|
||||||
|
/* NB: close _first_, then move fds! */
|
||||||
|
close(toCgi.wr);
|
||||||
|
close(fromCgi.rd);
|
||||||
xmove_fd(toCgi.rd, 0); /* replace stdin with the pipe */
|
xmove_fd(toCgi.rd, 0); /* replace stdin with the pipe */
|
||||||
xmove_fd(fromCgi.wr, 1); /* replace stdout with the pipe */
|
xmove_fd(fromCgi.wr, 1); /* replace stdout with the pipe */
|
||||||
close(fromCgi.rd);
|
|
||||||
close(toCgi.wr);
|
|
||||||
/* User seeing stderr output can be a security problem.
|
/* User seeing stderr output can be a security problem.
|
||||||
* If CGI really wants that, it can always do dup itself. */
|
* If CGI really wants that, it can always do dup itself. */
|
||||||
/* dup2(1, 2); */
|
/* dup2(1, 2); */
|
||||||
|
@ -102,7 +102,7 @@ const char *ll_proto_n2a(unsigned short id, char *buf, int len)
|
|||||||
|
|
||||||
id = ntohs(id);
|
id = ntohs(id);
|
||||||
|
|
||||||
for (i=0; i < ARRAY_SIZE(llproto_names); i++) {
|
for (i = 0; i < ARRAY_SIZE(llproto_names); i++) {
|
||||||
if (llproto_names[i].id == id)
|
if (llproto_names[i].id == id)
|
||||||
return llproto_names[i].name;
|
return llproto_names[i].name;
|
||||||
}
|
}
|
||||||
@ -113,7 +113,7 @@ const char *ll_proto_n2a(unsigned short id, char *buf, int len)
|
|||||||
int ll_proto_a2n(unsigned short *id, char *buf)
|
int ll_proto_a2n(unsigned short *id, char *buf)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
for (i=0; i < ARRAY_SIZE(llproto_names); i++) {
|
for (i = 0; i < ARRAY_SIZE(llproto_names); i++) {
|
||||||
if (strcasecmp(llproto_names[i].name, buf) == 0) {
|
if (strcasecmp(llproto_names[i].name, buf) == 0) {
|
||||||
*id = htons(llproto_names[i].id);
|
*id = htons(llproto_names[i].id);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -42,8 +42,8 @@ typedef struct
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
struct dn_naddr {
|
struct dn_naddr {
|
||||||
unsigned short a_len;
|
unsigned short a_len;
|
||||||
unsigned char a_addr[DN_MAXADDL];
|
unsigned char a_addr[DN_MAXADDL];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define IPX_NODE_LEN 6
|
#define IPX_NODE_LEN 6
|
||||||
|
@ -3243,7 +3243,7 @@ static FILE *generate_stream_from_list(struct pipe *head)
|
|||||||
if (pid == 0) { /* child */
|
if (pid == 0) { /* child */
|
||||||
if (ENABLE_HUSH_JOB)
|
if (ENABLE_HUSH_JOB)
|
||||||
die_sleep = 0; /* let nofork's xfuncs die */
|
die_sleep = 0; /* let nofork's xfuncs die */
|
||||||
close(channel[0]);
|
close(channel[0]); /* NB: close _first_, then move fd! */
|
||||||
xmove_fd(channel[1], 1);
|
xmove_fd(channel[1], 1);
|
||||||
/* Prevent it from trying to handle ctrl-z etc */
|
/* Prevent it from trying to handle ctrl-z etc */
|
||||||
#if ENABLE_HUSH_JOB
|
#if ENABLE_HUSH_JOB
|
||||||
|
@ -2797,15 +2797,13 @@ static int forkexec(struct op *t, int *pin, int *pout, int no_fork, char **wp)
|
|||||||
if (!bltin)
|
if (!bltin)
|
||||||
export(lookup(cp));
|
export(lookup(cp));
|
||||||
|
|
||||||
if (pin) {
|
if (pin) { /* NB: close _first_, then move fds! */
|
||||||
|
close(pin[1]);
|
||||||
xmove_fd(pin[0], 0);
|
xmove_fd(pin[0], 0);
|
||||||
if (pin[1] != 0)
|
|
||||||
close(pin[1]);
|
|
||||||
}
|
}
|
||||||
if (pout) {
|
if (pout) {
|
||||||
|
close(pout[0]);
|
||||||
xmove_fd(pout[1], 1);
|
xmove_fd(pout[1], 1);
|
||||||
if (pout[0] > 1)
|
|
||||||
close(pout[0]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
iopp = t->ioact;
|
iopp = t->ioact;
|
||||||
|
@ -29,8 +29,8 @@ typedef struct {
|
|||||||
* Some fixes
|
* Some fixes
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int aix_other_endian;
|
static smallint aix_other_endian; /* bool */
|
||||||
static short aix_volumes = 1;
|
static smallint aix_volumes = 1; /* max 15 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* only dealing with free blocks here
|
* only dealing with free blocks here
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#if ENABLE_FEATURE_SGI_LABEL
|
#if ENABLE_FEATURE_SGI_LABEL
|
||||||
|
|
||||||
|
#define SGI_DEBUG 0
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (C) Andreas Neuper, Sep 1998.
|
* Copyright (C) Andreas Neuper, Sep 1998.
|
||||||
* This file may be modified and redistributed under
|
* This file may be modified and redistributed under
|
||||||
@ -117,9 +119,8 @@ typedef struct {
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
static int sgi_other_endian;
|
static smallint sgi_other_endian; /* bool */
|
||||||
static int debug;
|
static smallint sgi_volumes = 1; /* max 15 */
|
||||||
static short sgi_volumes = 1;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* only dealing with free blocks here
|
* only dealing with free blocks here
|
||||||
@ -318,7 +319,7 @@ sgi_list_table(int xtra)
|
|||||||
"Pt# %*s Info Start End Sectors Id System\n",
|
"Pt# %*s Info Start End Sectors Id System\n",
|
||||||
w + 2, "Device");
|
w + 2, "Device");
|
||||||
for (i = 0; i < g_partitions; i++) {
|
for (i = 0; i < g_partitions; i++) {
|
||||||
if (sgi_get_num_sectors(i) || debug ) {
|
if (sgi_get_num_sectors(i) || SGI_DEBUG) {
|
||||||
uint32_t start = sgi_get_start_sector(i);
|
uint32_t start = sgi_get_start_sector(i);
|
||||||
uint32_t len = sgi_get_num_sectors(i);
|
uint32_t len = sgi_get_num_sectors(i);
|
||||||
kpi++; /* only count nonempty partitions */
|
kpi++; /* only count nonempty partitions */
|
||||||
@ -514,7 +515,7 @@ verify_sgi(int verbose)
|
|||||||
"at block 0,\n"
|
"at block 0,\n"
|
||||||
"not at diskblock %d\n",
|
"not at diskblock %d\n",
|
||||||
sgi_get_start_sector(Index[0]));
|
sgi_get_start_sector(Index[0]));
|
||||||
if (debug) /* I do not understand how some disks fulfil it */
|
if (SGI_DEBUG) /* I do not understand how some disks fulfil it */
|
||||||
if ((sgi_get_num_sectors(Index[0]) != lastblock) && verbose)
|
if ((sgi_get_num_sectors(Index[0]) != lastblock) && verbose)
|
||||||
printf("The entire disk partition is only %d diskblock large,\n"
|
printf("The entire disk partition is only %d diskblock large,\n"
|
||||||
"but the disk is %d diskblocks long\n",
|
"but the disk is %d diskblocks long\n",
|
||||||
@ -523,7 +524,7 @@ verify_sgi(int verbose)
|
|||||||
} else {
|
} else {
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printf("One Partition (#11) should cover the entire disk\n");
|
printf("One Partition (#11) should cover the entire disk\n");
|
||||||
if (debug > 2)
|
if (SGI_DEBUG > 2)
|
||||||
printf("sysid=%d\tpartition=%d\n",
|
printf("sysid=%d\tpartition=%d\n",
|
||||||
sgi_get_sysid(Index[0]), Index[0]+1);
|
sgi_get_sysid(Index[0]), Index[0]+1);
|
||||||
}
|
}
|
||||||
@ -531,13 +532,13 @@ verify_sgi(int verbose)
|
|||||||
int cylsize = sgi_get_nsect() * sgi_get_ntrks();
|
int cylsize = sgi_get_nsect() * sgi_get_ntrks();
|
||||||
|
|
||||||
if ((sgi_get_start_sector(Index[i]) % cylsize) != 0) {
|
if ((sgi_get_start_sector(Index[i]) % cylsize) != 0) {
|
||||||
if (debug) /* I do not understand how some disks fulfil it */
|
if (SGI_DEBUG) /* I do not understand how some disks fulfil it */
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printf("Partition %d does not start on cylinder boundary\n",
|
printf("Partition %d does not start on cylinder boundary\n",
|
||||||
Index[i]+1);
|
Index[i]+1);
|
||||||
}
|
}
|
||||||
if (sgi_get_num_sectors(Index[i]) % cylsize != 0) {
|
if (sgi_get_num_sectors(Index[i]) % cylsize != 0) {
|
||||||
if (debug) /* I do not understand how some disks fulfil it */
|
if (SGI_DEBUG) /* I do not understand how some disks fulfil it */
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printf("Partition %d does not end on cylinder boundary\n",
|
printf("Partition %d does not end on cylinder boundary\n",
|
||||||
Index[i]+1);
|
Index[i]+1);
|
||||||
@ -562,7 +563,7 @@ verify_sgi(int verbose)
|
|||||||
}
|
}
|
||||||
start = sgi_get_start_sector(Index[i])
|
start = sgi_get_start_sector(Index[i])
|
||||||
+ sgi_get_num_sectors(Index[i]);
|
+ sgi_get_num_sectors(Index[i]);
|
||||||
if (debug > 1) {
|
if (SGI_DEBUG > 1) {
|
||||||
if (verbose)
|
if (verbose)
|
||||||
printf("%2d:%12d\t%12d\t%12d\n", Index[i],
|
printf("%2d:%12d\t%12d\t%12d\n", Index[i],
|
||||||
sgi_get_start_sector(Index[i]),
|
sgi_get_start_sector(Index[i]),
|
||||||
@ -805,7 +806,7 @@ create_sgilabel(void)
|
|||||||
old[i].start = get_start_sect(get_part_table(i));
|
old[i].start = get_start_sect(get_part_table(i));
|
||||||
old[i].nsect = get_nr_sects(get_part_table(i));
|
old[i].nsect = get_nr_sects(get_part_table(i));
|
||||||
printf("Trying to keep parameters of partition %d\n", i);
|
printf("Trying to keep parameters of partition %d\n", i);
|
||||||
if (debug)
|
if (SGI_DEBUG)
|
||||||
printf("ID=%02x\tSTART=%d\tLENGTH=%d\n",
|
printf("ID=%02x\tSTART=%d\tLENGTH=%d\n",
|
||||||
old[i].sysid, old[i].start, old[i].nsect);
|
old[i].sysid, old[i].start, old[i].nsect);
|
||||||
}
|
}
|
||||||
|
@ -24,7 +24,7 @@
|
|||||||
union semun {
|
union semun {
|
||||||
int val;
|
int val;
|
||||||
struct semid_ds *buf;
|
struct semid_ds *buf;
|
||||||
unsigned short int *array;
|
unsigned short *array;
|
||||||
struct seminfo *__buf;
|
struct seminfo *__buf;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -68,7 +68,7 @@ struct shm_info {
|
|||||||
union semun {
|
union semun {
|
||||||
int val;
|
int val;
|
||||||
struct semid_ds *buf;
|
struct semid_ds *buf;
|
||||||
unsigned short int *array;
|
unsigned short *array;
|
||||||
struct seminfo *__buf;
|
struct seminfo *__buf;
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
Reference in New Issue
Block a user