Added to repository. WIP.
* Makefile.am: * fsusage.c: (linux_2_6_0), (linux_2_4_0), (_glibtop_linux_get_fsusage_read_write): Added to repository. WIP. * glibtop_server.h: LINUX_VERSION -> LINUX_VERSION_CODE * netload.c: (glibtop_get_netload_s): Cleanups. Added support for hardware address. s/LINUX_VERSION/LINUX_VERSION_CODE/ * open.c: (get_linux_version): s/LINUX_VERSION/LINUX_VERSION_CODE/ * procmap.c: (glibtop_get_proc_map_s): glibify: used GArray * procuid.c: (glibtop_get_proc_uid_s): s/LINUX_VERSION/LINUX_VERSION_CODE/. Used Linux MKDEV.
This commit is contained in:
@@ -1,3 +1,22 @@
|
|||||||
|
2004-07-17 Benoît Dejean <tazforever@dlfp.org>
|
||||||
|
|
||||||
|
* Makefile.am:
|
||||||
|
* fsusage.c: (linux_2_6_0), (linux_2_4_0),
|
||||||
|
(_glibtop_linux_get_fsusage_read_write): Added to repository. WIP.
|
||||||
|
|
||||||
|
|
||||||
|
* glibtop_server.h: LINUX_VERSION -> LINUX_VERSION_CODE
|
||||||
|
|
||||||
|
* netload.c: (glibtop_get_netload_s): Cleanups. Added support for
|
||||||
|
hardware address. s/LINUX_VERSION/LINUX_VERSION_CODE/
|
||||||
|
|
||||||
|
* open.c: (get_linux_version): s/LINUX_VERSION/LINUX_VERSION_CODE/
|
||||||
|
|
||||||
|
* procmap.c: (glibtop_get_proc_map_s): glibify: used GArray
|
||||||
|
|
||||||
|
* procuid.c: (glibtop_get_proc_uid_s): s/LINUX_VERSION/LINUX_VERSION_CODE/.
|
||||||
|
Used Linux MKDEV.
|
||||||
|
|
||||||
2004-07-15 Benoît Dejean <tazforever@dlfp.org>
|
2004-07-15 Benoît Dejean <tazforever@dlfp.org>
|
||||||
|
|
||||||
* procstate.c: (glibtop_get_proc_state_s): Wake, we're libgtop2.7.x,
|
* procstate.c: (glibtop_get_proc_state_s): Wake, we're libgtop2.7.x,
|
||||||
|
@@ -8,7 +8,9 @@ libgtop_sysdeps_2_0_la_SOURCES = open.c close.c cpu.c mem.c swap.c \
|
|||||||
sem_limits.c proclist.c procstate.c procuid.c \
|
sem_limits.c proclist.c procstate.c procuid.c \
|
||||||
proctime.c procmem.c procsignal.c prockernel.c \
|
proctime.c procmem.c procsignal.c prockernel.c \
|
||||||
procsegment.c procargs.c procmap.c siglist.c \
|
procsegment.c procargs.c procmap.c siglist.c \
|
||||||
sysinfo.c netload.c ppp.c glibtop_server.c
|
sysinfo.c netload.c ppp.c glibtop_server.c \
|
||||||
|
fsusage.c
|
||||||
|
|
||||||
libgtop_sysdeps_2_0_la_LIBADD = @GLIB_LIBS@
|
libgtop_sysdeps_2_0_la_LIBADD = @GLIB_LIBS@
|
||||||
|
|
||||||
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
libgtop_sysdeps_2_0_la_LDFLAGS = $(LT_VERSION_INFO)
|
||||||
|
101
sysdeps/linux/fsusage.c
Normal file
101
sysdeps/linux/fsusage.c
Normal file
@@ -0,0 +1,101 @@
|
|||||||
|
#include <glibtop.h>
|
||||||
|
#include <glibtop/fsusage.h>
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
|
#include <mntent.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
void _glibtop_linux_get_fsusage_read_write(glibtop *server,
|
||||||
|
glibtop_fsusage *buf,
|
||||||
|
const char *path);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Linux 2.6.x
|
||||||
|
* linux/Documentation/iostats.txt
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void linux_2_6_0(glibtop *server, glibtop_fsusage *buf, const char *path)
|
||||||
|
{
|
||||||
|
FILE *mtab = setmntent("/etc/mtab", "r");
|
||||||
|
|
||||||
|
struct mntent *emnt;
|
||||||
|
|
||||||
|
while((emnt = getmntent(mtab)) != NULL)
|
||||||
|
{
|
||||||
|
if(strcmp(emnt->mnt_dir, path) != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
char filename[64]; /* magic */
|
||||||
|
|
||||||
|
char buffer[1024]; /* magic */
|
||||||
|
char *p;
|
||||||
|
|
||||||
|
char device[32]; /* magic */
|
||||||
|
unsigned partition;
|
||||||
|
|
||||||
|
const char *devname = emnt->mnt_fsname;
|
||||||
|
size_t offset;
|
||||||
|
|
||||||
|
/*
|
||||||
|
we only deal with /dev block devices "/dev/<DEVICE><PARTITION>"
|
||||||
|
i don't know if other block devices such as network block
|
||||||
|
devices provide this kind of information.
|
||||||
|
*/
|
||||||
|
|
||||||
|
if(!g_str_has_prefix(devname, "/dev/"))
|
||||||
|
break;
|
||||||
|
|
||||||
|
/* skip the "/dev/" */
|
||||||
|
devname += sizeof "/dev/" - 1;
|
||||||
|
|
||||||
|
g_strlcpy(device, devname, sizeof device);
|
||||||
|
|
||||||
|
offset = strcspn(devname, "0123456789");
|
||||||
|
partition = strtoul(devname + offset, NULL, 0);
|
||||||
|
|
||||||
|
device[offset] = '\0';
|
||||||
|
|
||||||
|
if((size_t) g_snprintf(filename, sizeof filename,
|
||||||
|
"/sys/block/%s/%s%u/stat",
|
||||||
|
device, device, partition) >= sizeof filename)
|
||||||
|
break;
|
||||||
|
|
||||||
|
|
||||||
|
if(try_file_to_buffer(buffer, filename) < 0)
|
||||||
|
break;
|
||||||
|
|
||||||
|
p = buffer;
|
||||||
|
p = skip_token(p);
|
||||||
|
buf->read = strtoull(p, &p, 0);
|
||||||
|
p = skip_token(p);
|
||||||
|
buf->write = strtoull(p, &p, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
endmntent(mtab);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void linux_2_4_0(glibtop *server, glibtop_fsusage *buf, const char *path)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void _glibtop_linux_get_fsusage_read_write(glibtop *server,
|
||||||
|
glibtop_fsusage *buf,
|
||||||
|
const char *path)
|
||||||
|
{
|
||||||
|
if(server->os_version_code >= LINUX_VERSION_CODE(2, 6, 0))
|
||||||
|
{
|
||||||
|
linux_2_6_0(server, buf, path);
|
||||||
|
}
|
||||||
|
else if(server->os_version_code >= LINUX_VERSION_CODE(2, 4, 0))
|
||||||
|
{
|
||||||
|
linux_2_4_0(server, buf, path);
|
||||||
|
}
|
||||||
|
}
|
@@ -36,7 +36,7 @@ G_BEGIN_DECLS
|
|||||||
|
|
||||||
#ifdef _IN_LIBGTOP
|
#ifdef _IN_LIBGTOP
|
||||||
|
|
||||||
#define LINUX_VERSION(x,y,z) (0x10000*(x) + 0x100*(y) + z)
|
#define LINUX_VERSION_CODE(x,y,z) (0x10000*(x) + 0x100*(y) + z)
|
||||||
|
|
||||||
|
|
||||||
unsigned get_pageshift();
|
unsigned get_pageshift();
|
||||||
|
@@ -128,58 +128,53 @@ glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
|
|||||||
skfd = socket (AF_INET, SOCK_DGRAM, 0);
|
skfd = socket (AF_INET, SOCK_DGRAM, 0);
|
||||||
if (skfd) {
|
if (skfd) {
|
||||||
struct ifreq ifr;
|
struct ifreq ifr;
|
||||||
unsigned long long flags;
|
|
||||||
|
|
||||||
g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
|
g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
|
||||||
if (!ioctl (skfd, SIOCGIFFLAGS, &ifr)) {
|
if (!ioctl (skfd, SIOCGIFFLAGS, &ifr)) {
|
||||||
|
const unsigned long long flags = ifr.ifr_flags;
|
||||||
|
|
||||||
buf->flags |= (1L << GLIBTOP_NETLOAD_IF_FLAGS);
|
buf->flags |= (1L << GLIBTOP_NETLOAD_IF_FLAGS);
|
||||||
flags = ifr.ifr_flags;
|
|
||||||
} else
|
|
||||||
flags = 0;
|
|
||||||
|
|
||||||
if (flags & IFF_UP)
|
if (flags & IFF_UP)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_UP);
|
||||||
|
|
||||||
if (flags & IFF_BROADCAST)
|
if (flags & IFF_BROADCAST)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_BROADCAST);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_BROADCAST);
|
||||||
|
|
||||||
if (flags & IFF_DEBUG)
|
if (flags & IFF_DEBUG)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_DEBUG);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_DEBUG);
|
||||||
|
|
||||||
if (flags & IFF_LOOPBACK)
|
if (flags & IFF_LOOPBACK)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LOOPBACK);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_LOOPBACK);
|
||||||
|
|
||||||
if (flags & IFF_POINTOPOINT)
|
if (flags & IFF_POINTOPOINT)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_POINTOPOINT);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_POINTOPOINT);
|
||||||
|
|
||||||
if (flags & IFF_RUNNING)
|
if (flags & IFF_RUNNING)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_RUNNING);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_RUNNING);
|
||||||
|
|
||||||
if (flags & IFF_NOARP)
|
if (flags & IFF_NOARP)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_NOARP);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_NOARP);
|
||||||
|
|
||||||
if (flags & IFF_PROMISC)
|
if (flags & IFF_PROMISC)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_PROMISC);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_PROMISC);
|
||||||
|
|
||||||
if (flags & IFF_ALLMULTI)
|
if (flags & IFF_ALLMULTI)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_ALLMULTI);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_ALLMULTI);
|
||||||
|
|
||||||
if (flags & IFF_MULTICAST)
|
if (flags & IFF_MULTICAST)
|
||||||
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_MULTICAST);
|
buf->if_flags |= (1L << GLIBTOP_IF_FLAGS_MULTICAST);
|
||||||
|
}
|
||||||
|
|
||||||
g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
|
g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
|
||||||
if (!ioctl (skfd, SIOCGIFADDR, &ifr)) {
|
if (!ioctl (skfd, SIOCGIFADDR, &ifr)) {
|
||||||
struct sockaddr_in addr =
|
buf->address = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr;
|
||||||
*(struct sockaddr_in *) &ifr.ifr_addr;
|
|
||||||
buf->address = addr.sin_addr.s_addr;
|
|
||||||
buf->flags |= (1L << GLIBTOP_NETLOAD_ADDRESS);
|
buf->flags |= (1L << GLIBTOP_NETLOAD_ADDRESS);
|
||||||
}
|
}
|
||||||
|
|
||||||
g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
|
g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
|
||||||
if (!ioctl (skfd, SIOCGIFNETMASK, &ifr)) {
|
if (!ioctl (skfd, SIOCGIFNETMASK, &ifr)) {
|
||||||
struct sockaddr_in addr =
|
buf->subnet = ((struct sockaddr_in *) &ifr.ifr_addr)->sin_addr.s_addr;
|
||||||
*(struct sockaddr_in *) &ifr.ifr_addr;
|
|
||||||
buf->subnet = addr.sin_addr.s_addr;
|
|
||||||
buf->flags |= (1L << GLIBTOP_NETLOAD_SUBNET);
|
buf->flags |= (1L << GLIBTOP_NETLOAD_SUBNET);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -189,6 +184,12 @@ glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
|
|||||||
buf->flags |= (1L << GLIBTOP_NETLOAD_MTU);
|
buf->flags |= (1L << GLIBTOP_NETLOAD_MTU);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
g_strlcpy (ifr.ifr_name, interface, sizeof ifr.ifr_name);
|
||||||
|
if (!ioctl (skfd, SIOCGIFHWADDR, &ifr)) {
|
||||||
|
memcpy(buf->hwaddress, &ifr.ifr_hwaddr.sa_data, 8);
|
||||||
|
buf->flags |= (1L << GLIBTOP_NETLOAD_HWADDRESS);
|
||||||
|
}
|
||||||
|
|
||||||
close (skfd);
|
close (skfd);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -197,7 +198,7 @@ glibtop_get_netload_s (glibtop *server, glibtop_netload *buf,
|
|||||||
* need IP accounting.
|
* need IP accounting.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (server->os_version_code < 131442) {
|
if (server->os_version_code < LINUX_VERSION_CODE(2, 1, 14)) {
|
||||||
|
|
||||||
/* If IP accounting is enabled in the kernel and it is
|
/* If IP accounting is enabled in the kernel and it is
|
||||||
* enabled for the requested interface, we use it to
|
* enabled for the requested interface, we use it to
|
||||||
|
@@ -46,9 +46,9 @@ static unsigned get_linux_version(void) {
|
|||||||
fprintf(stderr, /* *very* unlikely to happen by accident */
|
fprintf(stderr, /* *very* unlikely to happen by accident */
|
||||||
"Non-standard uts for running kernel:\n"
|
"Non-standard uts for running kernel:\n"
|
||||||
"release %s=%u.%u.%u gives version code %d\n",
|
"release %s=%u.%u.%u gives version code %d\n",
|
||||||
uts.release, x, y, z, LINUX_VERSION(x,y,z));
|
uts.release, x, y, z, LINUX_VERSION_CODE(x,y,z));
|
||||||
|
|
||||||
linux_version_code = LINUX_VERSION(x, y, z);
|
linux_version_code = LINUX_VERSION_CODE(x, y, z);
|
||||||
}
|
}
|
||||||
|
|
||||||
return linux_version_code;
|
return linux_version_code;
|
||||||
|
@@ -21,10 +21,14 @@
|
|||||||
Boston, MA 02111-1307, USA.
|
Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
|
||||||
#include <glibtop.h>
|
#include <glibtop.h>
|
||||||
#include <glibtop/error.h>
|
#include <glibtop/error.h>
|
||||||
#include <glibtop/procmap.h>
|
#include <glibtop/procmap.h>
|
||||||
|
|
||||||
|
#include <linux/kdev_t.h>
|
||||||
|
|
||||||
|
|
||||||
#define PROC_MAPS_FORMAT ((sizeof(void*) == 8) \
|
#define PROC_MAPS_FORMAT ((sizeof(void*) == 8) \
|
||||||
? "%16lx-%16lx %4c %16lx %02hx:%02hx %lu%*[ ]%[^\n]\n" \
|
? "%16lx-%16lx %4c %16lx %02hx:%02hx %lu%*[ ]%[^\n]\n" \
|
||||||
@@ -54,35 +58,34 @@ glibtop_init_proc_map_s (glibtop *server)
|
|||||||
glibtop_map_entry *
|
glibtop_map_entry *
|
||||||
glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
|
glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
|
||||||
{
|
{
|
||||||
char filename [GLIBTOP_MAP_FILENAME_LEN+1];
|
char procfilename[GLIBTOP_MAP_FILENAME_LEN+1];
|
||||||
glibtop_map_entry *entry_list;
|
GArray *entry_list = g_array_new(FALSE, FALSE,
|
||||||
gsize allocated;
|
sizeof(glibtop_map_entry));
|
||||||
FILE *maps;
|
FILE *maps;
|
||||||
|
|
||||||
/* fscanf args */
|
|
||||||
unsigned short dev_major, dev_minor;
|
|
||||||
unsigned long start, end, offset, inode;
|
|
||||||
char flags[4];
|
|
||||||
/* filename is the 8th argument */
|
|
||||||
|
|
||||||
glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_MAP, 0);
|
glibtop_init_s (&server, GLIBTOP_SYSDEPS_PROC_MAP, 0);
|
||||||
|
|
||||||
memset (buf, 0, sizeof (glibtop_proc_map));
|
memset (buf, 0, sizeof (glibtop_proc_map));
|
||||||
|
|
||||||
sprintf (filename, "/proc/%d/maps", pid);
|
snprintf (procfilename, sizeof procfilename, "/proc/%d/maps", pid);
|
||||||
|
|
||||||
maps = fopen (filename, "r");
|
if((maps = fopen (procfilename, "r")) == NULL) {
|
||||||
if (!maps) return NULL;
|
return (glibtop_map_entry*) g_array_free(entry_list, TRUE);
|
||||||
|
}
|
||||||
|
|
||||||
allocated = 32; /* magic */
|
while(TRUE)
|
||||||
entry_list = g_new(glibtop_map_entry, allocated);
|
|
||||||
|
|
||||||
for(buf->number = 0; TRUE; buf->number++)
|
|
||||||
{
|
{
|
||||||
unsigned long perm = 0;
|
unsigned long perm = 0;
|
||||||
|
|
||||||
int rv;
|
int rv;
|
||||||
|
|
||||||
|
unsigned short dev_major, dev_minor;
|
||||||
|
unsigned long start, end, offset, inode;
|
||||||
|
char flags[4];
|
||||||
|
char filename [GLIBTOP_MAP_FILENAME_LEN+1];
|
||||||
|
|
||||||
|
glibtop_map_entry entry;
|
||||||
|
|
||||||
|
|
||||||
/* 8 arguments */
|
/* 8 arguments */
|
||||||
rv = fscanf (maps, PROC_MAPS_FORMAT,
|
rv = fscanf (maps, PROC_MAPS_FORMAT,
|
||||||
&start, &end, flags, &offset,
|
&start, &end, flags, &offset,
|
||||||
@@ -110,34 +113,25 @@ glibtop_get_proc_map_s (glibtop *server, glibtop_proc_map *buf, pid_t pid)
|
|||||||
else if (flags [3] == 'p')
|
else if (flags [3] == 'p')
|
||||||
perm |= GLIBTOP_MAP_PERM_PRIVATE;
|
perm |= GLIBTOP_MAP_PERM_PRIVATE;
|
||||||
|
|
||||||
|
entry.flags = _glibtop_sysdeps_map_entry;
|
||||||
|
entry.start = (guint64) start;
|
||||||
|
entry.end = (guint64) end;
|
||||||
|
entry.offset = (guint64) offset;
|
||||||
|
entry.perm = (guint64) perm;
|
||||||
|
entry.device = (guint64) MKDEV(dev_major, dev_minor);
|
||||||
|
entry.inode = (guint64) inode;
|
||||||
|
g_strlcpy (entry.filename, filename, sizeof entry.filename);
|
||||||
|
|
||||||
if(buf->number == allocated) {
|
g_array_append_val(entry_list, entry);
|
||||||
/* grow by 2 and blank the newly allocated entries */
|
|
||||||
entry_list = g_renew (glibtop_map_entry, entry_list, allocated * 2);
|
|
||||||
allocated *= 2;
|
|
||||||
}
|
|
||||||
|
|
||||||
entry_list [buf->number].flags = _glibtop_sysdeps_map_entry;
|
|
||||||
|
|
||||||
entry_list [buf->number].start = (guint64) start;
|
|
||||||
entry_list [buf->number].end = (guint64) end;
|
|
||||||
entry_list [buf->number].offset = (guint64) offset;
|
|
||||||
entry_list [buf->number].perm = (guint64) perm;
|
|
||||||
entry_list [buf->number].device = (guint64) (dev_major << 8) +
|
|
||||||
(guint64) dev_minor;
|
|
||||||
entry_list [buf->number].inode = (guint64) inode;
|
|
||||||
|
|
||||||
g_strlcpy (entry_list [buf->number].filename, filename,
|
|
||||||
sizeof entry_list [buf->number].filename);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
fclose (maps);
|
fclose (maps);
|
||||||
|
|
||||||
buf->flags = _glibtop_sysdeps_proc_map;
|
buf->flags = _glibtop_sysdeps_proc_map;
|
||||||
|
|
||||||
|
buf->number = entry_list->len;
|
||||||
buf->size = sizeof (glibtop_map_entry);
|
buf->size = sizeof (glibtop_map_entry);
|
||||||
buf->total = buf->number * buf->size;
|
buf->total = buf->number * buf->size;
|
||||||
|
|
||||||
g_renew(glibtop_map_entry, entry_list, buf->number);
|
return (glibtop_map_entry*) g_array_free(entry_list, FALSE);
|
||||||
|
|
||||||
return entry_list;
|
|
||||||
}
|
}
|
||||||
|
@@ -112,12 +112,12 @@ glibtop_get_proc_uid_s (glibtop *server, glibtop_proc_uid *buf, pid_t pid)
|
|||||||
/* the old notty val, update elsewhere bef. moving to 0 */
|
/* the old notty val, update elsewhere bef. moving to 0 */
|
||||||
buf->tty = -1;
|
buf->tty = -1;
|
||||||
|
|
||||||
if (server->os_version_code < LINUX_VERSION(1,3,39)) {
|
if (server->os_version_code < LINUX_VERSION_CODE(1,3,39)) {
|
||||||
/* map old meanings to new */
|
/* map old meanings to new */
|
||||||
buf->priority = 2*15 - buf->priority;
|
buf->priority = 2*15 - buf->priority;
|
||||||
buf->nice = 15 - buf->nice;
|
buf->nice = 15 - buf->nice;
|
||||||
}
|
}
|
||||||
else if (server->os_version_code < LINUX_VERSION(1,1,30) && buf->tty != -1)
|
else if (server->os_version_code < LINUX_VERSION_CODE(1,1,30) && buf->tty != -1)
|
||||||
/* when tty wasn't full devno */
|
/* when tty wasn't full devno */
|
||||||
buf->tty = 4*0x100 + buf->tty;
|
buf->tty = 4*0x100 + buf->tty;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user