/*
* Copyright (C) 2011 - David Goulet <david.goulet@polymtl.ca>
*
- * 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; only version 2
- * of the License.
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License, version 2 only,
+ * as published by the Free Software Foundation.
*
* 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, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#define _GNU_SOURCE
#include <common/common.h>
#include <common/kernel-ctl/kernel-ctl.h>
+#include <common/sessiond-comm/sessiond-comm.h>
#include "kernel.h"
#include "kern-modules.h"
int ret;
ret = kernctl_enable(event->fd);
- if (ret < 0 && errno != EEXIST) {
- PERROR("enable kernel event");
+ if (ret < 0) {
+ switch (errno) {
+ case EEXIST:
+ ret = LTTCOMM_KERN_EVENT_EXIST;
+ break;
+ default:
+ PERROR("enable kernel event");
+ break;
+ }
goto error;
}
int ret;
ret = kernctl_disable(event->fd);
- if (ret < 0 && errno != EEXIST) {
- PERROR("disable kernel event");
+ if (ret < 0) {
+ switch (errno) {
+ case EEXIST:
+ ret = LTTCOMM_KERN_EVENT_EXIST;
+ break;
+ default:
+ PERROR("disable kernel event");
+ break;
+ }
goto error;
}
*/
nbmem = KERNEL_EVENT_INIT_LIST_SIZE;
elist = zmalloc(sizeof(struct lttng_event) * nbmem);
+ if (elist == NULL) {
+ PERROR("alloc list events");
+ count = -ENOMEM;
+ goto end;
+ }
while ((size = fscanf(fp, "event { name = %m[^;]; };%n\n", &event, &pos)) == 1) {
if (count >= nbmem) {
+ struct lttng_event *new_elist;
+
DBG("Reallocating event list from %zu to %zu bytes", nbmem,
nbmem * 2);
/* Double the size */
nbmem <<= 1;
- elist = realloc(elist, nbmem * sizeof(struct lttng_event));
- if (elist == NULL) {
+ new_elist = realloc(elist, nbmem * sizeof(struct lttng_event));
+ if (new_elist == NULL) {
PERROR("realloc list events");
+ free(event);
+ free(elist);
count = -ENOMEM;
goto end;
}
+ elist = new_elist;
}
strncpy(elist[count].name, event, LTTNG_SYMBOL_NAME_LEN);
elist[count].name[LTTNG_SYMBOL_NAME_LEN - 1] = '\0';
elist[count].enabled = -1;
count++;
+ free(event);
}
*events = elist;