Remove old queue mode from tree
This commit is contained in:
1 parent
857123e9e4
commit
355fe9dc62
6 files changed
+1
-554
No files matched your search
+1
-1
@@ -4,7 +4,7 @@ CPPFLAGS += -DVERSION=\"$(VERSION)\" -D_GNU_SOURCE -I.
|
|||||||
CFLAGS += -W -Wall -O2 -pedantic -std=c99
|
CFLAGS += -W -Wall -O2 -pedantic -std=c99
|
||||||
LIBS += -lm -lusb
|
LIBS += -lm -lusb
|
||||||
|
|
||||||
OBJS = main.o nolo.o printf-utils.o image.o fiasco.o device.o usb-device.o cold-flash.o qmode.o console.o squeue/squeue.o operations.o local.o mkii.o disk.o cal.o
|
OBJS = main.o nolo.o printf-utils.o image.o fiasco.o device.o usb-device.o cold-flash.o console.o operations.o local.o mkii.o disk.o cal.o
|
||||||
BIN = 0xFFFF
|
BIN = 0xFFFF
|
||||||
|
|
||||||
all: $(BIN)
|
all: $(BIN)
|
||||||
|
|||||||
-161
@@ -1,161 +0,0 @@
|
|||||||
/*
|
|
||||||
* 0xFFFF - Open Free Fiasco Firmware Flasher
|
|
||||||
* Copyright (C) 2008 pancake <pancake@youterm.com>
|
|
||||||
* Copyright (C) 2012 Pali Rohár <pali.rohar@gmail.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <signal.h>
|
|
||||||
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/wait.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
|
|
||||||
#include "global.h"
|
|
||||||
|
|
||||||
#include "qmode.h"
|
|
||||||
#include "nolo.h"
|
|
||||||
|
|
||||||
#if HAVE_SQUEUE
|
|
||||||
|
|
||||||
#include "squeue/squeue.h"
|
|
||||||
extern int qmode;
|
|
||||||
extern struct squeue_t *p;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if HAVE_SQUEUE
|
|
||||||
|
|
||||||
struct squeue_t *q;
|
|
||||||
struct squeue_t *p;
|
|
||||||
|
|
||||||
static int fork_enabled = 0;
|
|
||||||
static int dofork()
|
|
||||||
{
|
|
||||||
if (fork_enabled)
|
|
||||||
return fork();
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void process_message(char *msg)
|
|
||||||
{
|
|
||||||
char *str;
|
|
||||||
char *arg;
|
|
||||||
int c=1;
|
|
||||||
if (msg == NULL)
|
|
||||||
return;
|
|
||||||
printf("[x] (%s)\n", msg);
|
|
||||||
str = strdup(msg);
|
|
||||||
arg = strchr(str, ':');
|
|
||||||
if (c!=0) {
|
|
||||||
arg[0]='\0';
|
|
||||||
arg = arg +1;
|
|
||||||
/* if (!strcmp(str, "flash")) {
|
|
||||||
const char *type = fpid_file(arg);
|
|
||||||
if (type == NULL) {
|
|
||||||
squeue_push2(p, "error", "Unknown piece format", 1);
|
|
||||||
} else flash_image(arg, type, NULL, NULL, NULL);
|
|
||||||
} else*/
|
|
||||||
if (!strcmp(str, "reset")) {
|
|
||||||
// if (reboot_board() == 0) {
|
|
||||||
// squeue_push2(p,"info", "Device reboots", 1);
|
|
||||||
// } else squeue_push2(p,"error", "Cannot reboot device", 1);
|
|
||||||
} else
|
|
||||||
if (!strcmp(str, "info")) {
|
|
||||||
// get_rd_flags();
|
|
||||||
// squeue_push2(p, "info", strbuf, 1);
|
|
||||||
// get_nolo_version();
|
|
||||||
// squeue_push2(p, "info", strbuf, 1);
|
|
||||||
// get_usb_mode();
|
|
||||||
// squeue_push2(p, "info", strbuf, 1);
|
|
||||||
} else
|
|
||||||
squeue_push2(p, "error", "invalid command", 0);
|
|
||||||
} else {
|
|
||||||
squeue_push2(p, "error", "invalid command format", 0);
|
|
||||||
}
|
|
||||||
free(str);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cc(int signum)
|
|
||||||
{
|
|
||||||
squeue_close(p);
|
|
||||||
squeue_close(q);
|
|
||||||
printf("pipes closed\n");
|
|
||||||
squeue_release("/tmp/0xFFFF.1");
|
|
||||||
squeue_release("/tmp/0xFFFF.2");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int queue_mode(void)
|
|
||||||
{
|
|
||||||
int pid = 0;
|
|
||||||
char *msg;
|
|
||||||
|
|
||||||
signal(SIGINT, cc);
|
|
||||||
|
|
||||||
pid = dofork();
|
|
||||||
if (pid) {
|
|
||||||
wait(&pid);
|
|
||||||
return 0;
|
|
||||||
} else {
|
|
||||||
p = squeue_open("/tmp/0xFFFF.1", Q_CREAT);
|
|
||||||
q = squeue_open("/tmp/0xFFFF.2", Q_CREAT);
|
|
||||||
if (p == NULL || q == NULL) {
|
|
||||||
fprintf(stderr, "Cannot open queue files\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
chmod("/tmp/0xFFFF.1", 0666);
|
|
||||||
chmod("/tmp/0xFFFF.2", 0666);
|
|
||||||
pid = dofork();
|
|
||||||
if (pid) {
|
|
||||||
printf( "Entering into shared queue server mode.\n"
|
|
||||||
"Type $ kill -9 %d # to stop\n"
|
|
||||||
"NOTE: Manually remove the /tmp/.0xFFFF.* files to solve perm problems\n", pid);
|
|
||||||
} else {
|
|
||||||
do {
|
|
||||||
#if HAVE_USB
|
|
||||||
/* if (connect_via_usb()) {
|
|
||||||
fprintf(stderr, "Cannot connect to device. It is possibly not in boot stage.\n");
|
|
||||||
squeue_push2(p, "error", "Cannot connect to the device", 1);
|
|
||||||
return 0;
|
|
||||||
}*/
|
|
||||||
#endif
|
|
||||||
printf("Waiting for a client in shared queues..\n");
|
|
||||||
setsid();
|
|
||||||
while(1) {
|
|
||||||
msg = squeue_get(q, 1);
|
|
||||||
if (msg) {
|
|
||||||
process_message(msg);
|
|
||||||
squeue_pop(q);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
printf("Connection restarted\n");
|
|
||||||
} while (1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
int queue_mode(void)
|
|
||||||
{
|
|
||||||
/* dummy */
|
|
||||||
fprintf(stderr, "No HAVE_SQUEUE support\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
-25
@@ -1,25 +0,0 @@
|
|||||||
/*
|
|
||||||
* 0xFFFF - Open Free Fiasco Firmware Flasher
|
|
||||||
* Copyright (C) 2008 pancake <pancake@youterm.com>
|
|
||||||
* Copyright (C) 2012 Pali Rohár <pali.rohar@gmail.com>
|
|
||||||
*
|
|
||||||
* This program is free software: you can redistribute it and/or modify
|
|
||||||
* it under the terms of the GNU General Public License as published by
|
|
||||||
* the Free Software Foundation, either version 3 of the License, or
|
|
||||||
* (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This program is distributed in the hope that it will be useful,
|
|
||||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
||||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
||||||
* GNU General Public License for more details.
|
|
||||||
*
|
|
||||||
* You should have received a copy of the GNU General Public License
|
|
||||||
* along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef QMODE_H
|
|
||||||
#define QMODE_H
|
|
||||||
|
|
||||||
int queue_mode(void);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
@@ -1,294 +0,0 @@
|
|||||||
#include "squeue.h"
|
|
||||||
#define _XOPEN_SOURCE 500 /* Or: #define _BSD_SOURCE */
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <sys/ipc.h>
|
|
||||||
#include <signal.h>
|
|
||||||
#include <sys/shm.h>
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/stat.h>
|
|
||||||
#include <sys/mman.h>
|
|
||||||
#include <fcntl.h>
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <unistd.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#define POOL_SIZE ITEM_MAX*ITEM_SIZE
|
|
||||||
#define ITEM_SIZE 512
|
|
||||||
#define ITEM_MAX 10
|
|
||||||
|
|
||||||
int squeue_release(const char *file)
|
|
||||||
{
|
|
||||||
int shmid;
|
|
||||||
key_t k = ftok(file, 0xa3);
|
|
||||||
|
|
||||||
if (k == -1) {
|
|
||||||
perror("ftok");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
shmid = shmget(k, POOL_SIZE, 0666);
|
|
||||||
if (shmid == -1)
|
|
||||||
return -1; // not released
|
|
||||||
return shmctl(shmid, IPC_RMID,NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern int errno;
|
|
||||||
struct squeue_t *squeue_open(const char *file, int mode)
|
|
||||||
{
|
|
||||||
struct squeue_t *q;
|
|
||||||
char *pool;
|
|
||||||
int shmid;
|
|
||||||
key_t k;
|
|
||||||
|
|
||||||
k = ftok(file, 0x34);
|
|
||||||
if (k == -1) {
|
|
||||||
perror("ftok");
|
|
||||||
squeue_release(file);
|
|
||||||
close(creat(file, 0666));
|
|
||||||
chmod(file, 0666);
|
|
||||||
k = ftok(file, 0xa3);
|
|
||||||
if (k == -1) {
|
|
||||||
perror("ftok");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
_retry:
|
|
||||||
shmid = shmget(k, POOL_SIZE, 0666|(mode==Q_CREAT)?IPC_CREAT:0);
|
|
||||||
if (shmid == -1) {
|
|
||||||
perror("shmget1");
|
|
||||||
shmid = shmget(k, POOL_SIZE, 0666|((mode==Q_CREAT)?IPC_CREAT:0));
|
|
||||||
if (shmid == -1) {
|
|
||||||
perror("shmget2");
|
|
||||||
if (errno == EEXIST)
|
|
||||||
shmid = shmget(k, POOL_SIZE, 0666 |IPC_CREAT);
|
|
||||||
|
|
||||||
if (shmid == -1) {
|
|
||||||
if (mode == Q_WAIT) {
|
|
||||||
usleep(100);
|
|
||||||
goto _retry;
|
|
||||||
}
|
|
||||||
perror("shmget");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode == Q_WAIT)
|
|
||||||
mode = Q_OPEN;
|
|
||||||
|
|
||||||
/* fix perms */
|
|
||||||
if (mode == Q_CREAT) {
|
|
||||||
struct shmid_ds sd;
|
|
||||||
shmctl(shmid, IPC_STAT, &sd);
|
|
||||||
sd.shm_perm.uid = 1000;
|
|
||||||
sd.shm_perm.gid = 1000;
|
|
||||||
sd.shm_perm.mode = sd.shm_perm.mode|0666;
|
|
||||||
shmctl(shmid, IPC_SET, &sd);
|
|
||||||
}
|
|
||||||
|
|
||||||
pool = shmat(shmid, NULL, 0);
|
|
||||||
if (pool == (void *)-1) {
|
|
||||||
perror("shmat");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (mode == Q_CREAT)
|
|
||||||
memset(pool, '\0', POOL_SIZE);
|
|
||||||
|
|
||||||
q = (struct squeue_t *)malloc(sizeof(struct squeue_t));
|
|
||||||
memset(q, '\0', sizeof(struct squeue_t));
|
|
||||||
q->shmid = shmid;
|
|
||||||
q->pool = pool;
|
|
||||||
q->mode = mode;
|
|
||||||
|
|
||||||
return q;
|
|
||||||
}
|
|
||||||
|
|
||||||
void squeue_free(struct squeue_t *q)
|
|
||||||
{
|
|
||||||
free(q);
|
|
||||||
}
|
|
||||||
|
|
||||||
int squeue_close(struct squeue_t *q)
|
|
||||||
{
|
|
||||||
char *pool;
|
|
||||||
|
|
||||||
if (q==NULL)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
pool = q->pool;
|
|
||||||
shmctl(q->shmid, IPC_RMID, NULL);
|
|
||||||
free(q);
|
|
||||||
return shmdt(pool);
|
|
||||||
}
|
|
||||||
|
|
||||||
int squeue_push(struct squeue_t *q, const char *str, int lock)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (q==NULL)
|
|
||||||
return -1;
|
|
||||||
// if (q->mode == Q_CREAT) {
|
|
||||||
// printf("squeue_push: cannot push from the creator\n");
|
|
||||||
// return -1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
if (str==NULL||strlen(str)>ITEM_SIZE)
|
|
||||||
return -1;
|
|
||||||
do {
|
|
||||||
if (q->squeue_idx >= ITEM_MAX) {
|
|
||||||
while (q->pool[0]!='\0') {
|
|
||||||
q->squeue_locks++;
|
|
||||||
if (!lock) {
|
|
||||||
printf("buffer is full\n");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
usleep(100);
|
|
||||||
}
|
|
||||||
q->squeue_idx = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for(i=q->squeue_idx*ITEM_SIZE;i<POOL_SIZE;i+=ITEM_SIZE) {
|
|
||||||
if (q->pool[i]=='\0') {
|
|
||||||
strcpy(q->pool+i, str);
|
|
||||||
q->squeue_idx++;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
q->squeue_locks++;
|
|
||||||
} while (lock);
|
|
||||||
q->squeue_lost++;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int squeue_push2(struct squeue_t *q, const char *head, const char *str, int lock)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
char *buf = malloc(strlen(head) + strlen(str) + 2);
|
|
||||||
strcpy(buf, head);
|
|
||||||
strcat(buf, ":");
|
|
||||||
strcat(buf, str);
|
|
||||||
ret = squeue_push(q, buf, lock);
|
|
||||||
free(buf);
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
int squeue_pop(struct squeue_t *q)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
int two = 1;
|
|
||||||
|
|
||||||
if (q==NULL)
|
|
||||||
return -1;
|
|
||||||
// if (q->mode == Q_OPEN) { // cannot pop when not owner of squeue
|
|
||||||
// fprintf(stderr, "squeue_pop: cannot pop when you are not owner.\n");
|
|
||||||
// return -1;
|
|
||||||
// }
|
|
||||||
for(two=1;two--;q->head_idx = 0)
|
|
||||||
for(i=q->head_idx*ITEM_SIZE;i<POOL_SIZE;i+=ITEM_SIZE) {
|
|
||||||
if (q->pool[i]!='\0') {
|
|
||||||
q->pool[i]='\0';
|
|
||||||
q->head_idx++;
|
|
||||||
q->squeue_pops++;
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
q->squeue_oops++;
|
|
||||||
fprintf(stderr, "WARNING: race condition detected in squeue.\n");
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
char *squeue_get(struct squeue_t *q, int lock)
|
|
||||||
{
|
|
||||||
int i=0;
|
|
||||||
int two = 1;
|
|
||||||
|
|
||||||
if(q==NULL)
|
|
||||||
return NULL;
|
|
||||||
// if (q->mode == Q_OPEN) { // cannot pop when not owner of squeue
|
|
||||||
// fprintf(stderr, "squeue_get: cannot pop when you are not owner.\n");
|
|
||||||
// return NULL;
|
|
||||||
// }
|
|
||||||
do {
|
|
||||||
for(two=1;two--;q->head_idx = 0) {
|
|
||||||
for(i=q->head_idx*ITEM_SIZE;i<POOL_SIZE;i+=ITEM_SIZE)
|
|
||||||
if (q->pool[i]!='\0')
|
|
||||||
return q->pool+i;
|
|
||||||
}
|
|
||||||
if (lock)
|
|
||||||
usleep(100);
|
|
||||||
} while (lock);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
void squeue_stats(struct squeue_t *q)
|
|
||||||
{
|
|
||||||
if(q==NULL)
|
|
||||||
return;
|
|
||||||
printf("Queue locks: %d\n", q->squeue_locks);
|
|
||||||
printf("Queue lost: %d\n", q->squeue_lost);
|
|
||||||
printf("Queue oops: %d\n", q->squeue_oops);
|
|
||||||
printf("Queue pops: %d\n", q->squeue_pops);
|
|
||||||
}
|
|
||||||
|
|
||||||
#if _MAIN_
|
|
||||||
struct squeue_t *q;
|
|
||||||
|
|
||||||
int sigc()
|
|
||||||
{
|
|
||||||
squeue_stats(q);
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int main()
|
|
||||||
{
|
|
||||||
char buf[102];
|
|
||||||
int i;
|
|
||||||
int pid;
|
|
||||||
|
|
||||||
signal(SIGINT, sigc);
|
|
||||||
|
|
||||||
squeue_release("/dev/null");
|
|
||||||
|
|
||||||
pid = fork();
|
|
||||||
if (pid) {
|
|
||||||
q = squeue_open("/dev/null", Q_CREAT);
|
|
||||||
if (q == NULL) {
|
|
||||||
perror("oops");
|
|
||||||
kill(pid, SIGINT);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
squeue_push(q, "Hello World", 0);
|
|
||||||
squeue_push(q, "jeje msg 2", 0);
|
|
||||||
|
|
||||||
while(1) {
|
|
||||||
char *uh = squeue_get(q,1);
|
|
||||||
if (uh) {
|
|
||||||
printf("get: (%s)\n", uh);
|
|
||||||
squeue_pop(q);
|
|
||||||
}
|
|
||||||
usleep(100);
|
|
||||||
}
|
|
||||||
squeue_close(q);
|
|
||||||
} else {
|
|
||||||
q = squeue_open("/dev/null", Q_WAIT);
|
|
||||||
if (q == NULL) {
|
|
||||||
perror("oops");
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
for(i=0;i<128;i++) {
|
|
||||||
sprintf(buf, "puta%d", i);
|
|
||||||
squeue_push(q, buf, 1);
|
|
||||||
usleep(100);
|
|
||||||
}
|
|
||||||
squeue_stats(q);
|
|
||||||
printf("cya\n");
|
|
||||||
squeue_close(q);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
@@ -1,28 +0,0 @@
|
|||||||
struct squeue_t {
|
|
||||||
int shmid;
|
|
||||||
int mode;
|
|
||||||
char *pool;
|
|
||||||
/* pointers */
|
|
||||||
int head_idx;
|
|
||||||
int squeue_idx;
|
|
||||||
/* counters */
|
|
||||||
int squeue_locks;
|
|
||||||
int squeue_lost;
|
|
||||||
int squeue_oops;
|
|
||||||
int squeue_pops;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
#define Q_OPEN 0
|
|
||||||
#define Q_CREAT 1
|
|
||||||
#define Q_WAIT 2
|
|
||||||
|
|
||||||
int squeue_release(const char *file);
|
|
||||||
struct squeue_t *squeue_open(const char *file, int init);
|
|
||||||
int squeue_close(struct squeue_t *q);
|
|
||||||
void squeue_free(struct squeue_t *q);
|
|
||||||
int squeue_push(struct squeue_t *q, const char *str, int lock);
|
|
||||||
int squeue_push2(struct squeue_t *q, const char *head, const char *str, int lock);
|
|
||||||
int squeue_pop(struct squeue_t *q);
|
|
||||||
char *squeue_get(struct squeue_t *q, int lock);
|
|
||||||
void squeue_stats(struct squeue_t *q);
|
|
||||||
@@ -1,45 +0,0 @@
|
|||||||
using GLib;
|
|
||||||
|
|
||||||
[CCode (lower_case_cprefix = "squeue_", cheader_filename = "squeue.h")]
|
|
||||||
namespace SQueues {
|
|
||||||
[CCode (cname = "struct squeue_t", free_function = "squeue_free")]
|
|
||||||
public struct SQueue {
|
|
||||||
int shmid;
|
|
||||||
int mode;
|
|
||||||
char *pool;
|
|
||||||
/* pointers */
|
|
||||||
int head_idx;
|
|
||||||
int queue_idx;
|
|
||||||
/* counters */
|
|
||||||
int locks;
|
|
||||||
int lost;
|
|
||||||
int oops;
|
|
||||||
int pops;
|
|
||||||
[CCode (cname = "squeue_open")]
|
|
||||||
public static SQueue* open(string file, int mode);
|
|
||||||
[CCode (cname = "squeue_push")]
|
|
||||||
public int push(string msg, int l);
|
|
||||||
[CCode (cname = "squeue_push2")]
|
|
||||||
public int push2(string cmd, string msg, int l);
|
|
||||||
[CCode (cname = "squeue_get")]
|
|
||||||
public unowned string get(int l);
|
|
||||||
[CCode (cname = "squeue_pop")]
|
|
||||||
public int pop();
|
|
||||||
[CCode (cname = "squeue_stats")]
|
|
||||||
public int stats();
|
|
||||||
[CCode (cname = "squeue_close")]
|
|
||||||
public int close();
|
|
||||||
[CCode (cname = "squeue_free")]
|
|
||||||
public int free();
|
|
||||||
[CCode (cname = "squeue_release")]
|
|
||||||
public static int release(string file);
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
[CCode (cprefix = "Q_", cheader_fileneme = "squeue.h")]
|
|
||||||
public enum SQueueMode {
|
|
||||||
OPEN = 0,
|
|
||||||
CREAT = 1,
|
|
||||||
WAIT = 2
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in new issue
Block a user