Your Name 4 years ago
parent
commit
d5348d08b5
4 changed files with 86 additions and 92 deletions
  1. 56 56
      01-cgminer.rules
  2. 1 1
      compat/libusb-1.0/libusb/descriptor.c
  3. 24 24
      driver-gekko.c
  4. 5 11
      util.c

+ 56 - 56
01-cgminer.rules

@@ -1,56 +1,56 @@
-# Butterfly Labs FPGA and ASIC devices
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# ModMinerQuad
-ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0003", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Lancelot and Avalon
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Icarus
-ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0083", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# AsicminerUSB and Antminer U1
-ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Cairnsmore1
-ATTRS{idVendor}=="067b", ATTRS{idProduct}=="0230", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Cairnsmore1-2
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8350", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Ztex
-ATTRS{idVendor}=="221a", ATTRS{idProduct}=="0100", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# BF1
-ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Klondike
-ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f60a", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# HashFast
-ATTRS{idVendor}=="297c", ATTRS{idProduct}=="0001", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-ATTRS{idVendor}=="297c", ATTRS{idProduct}=="8001", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# BXF
-ATTRS{idVendor}=="198c", ATTRS{idProduct}=="b1f1", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# NF1
-ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="00de", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# ANT_S1
-ATTRS{idVendor}=="4254", ATTRS{idProduct}=="4153", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Cointerra
-ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="0003", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Drillbit Thumb
-ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2404", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# Avalon4
-ATTRS{idVendor}=="29f1", ATTRS{idProduct}=="33f2", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
-# GekkoScience
-ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", SUBSYSTEM=="usb", ACTION=="add", MODE="0666", GROUP="plugdev"
-
+# Butterfly Labs FPGA and ASIC devices
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6014", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# ModMinerQuad
+ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0003", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Lancelot and Avalon
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6001", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Icarus
+ATTRS{idVendor}=="067b", ATTRS{idProduct}=="2303", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+ATTRS{idVendor}=="1fc9", ATTRS{idProduct}=="0083", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# AsicminerUSB and Antminer U1
+ATTRS{idVendor}=="10c4", ATTRS{idProduct}=="ea60", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Cairnsmore1
+ATTRS{idVendor}=="067b", ATTRS{idProduct}=="0230", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Cairnsmore1-2
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="8350", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Ztex
+ATTRS{idVendor}=="221a", ATTRS{idProduct}=="0100", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# BF1
+ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="204b", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Klondike
+ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="f60a", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# HashFast
+ATTRS{idVendor}=="297c", ATTRS{idProduct}=="0001", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+ATTRS{idVendor}=="297c", ATTRS{idProduct}=="8001", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# BXF
+ATTRS{idVendor}=="198c", ATTRS{idProduct}=="b1f1", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# NF1
+ATTRS{idVendor}=="04d8", ATTRS{idProduct}=="00de", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# ANT_S1
+ATTRS{idVendor}=="4254", ATTRS{idProduct}=="4153", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Cointerra
+ATTRS{idVendor}=="1cbe", ATTRS{idProduct}=="0003", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Drillbit Thumb
+ATTRS{idVendor}=="03eb", ATTRS{idProduct}=="2404", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# Avalon4
+ATTRS{idVendor}=="29f1", ATTRS{idProduct}=="33f2", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+
+# GekkoScience
+ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", SUBSYSTEM=="usb", ACTION=="add", MODE="0660", GROUP="plugdev"
+

+ 1 - 1
compat/libusb-1.0/libusb/descriptor.c

@@ -805,7 +805,7 @@ int API_EXPORTED libusb_parse_bos_descriptor(const void *buf, int len,
 	struct libusb_bos_descriptor *bos_desc;
 	struct libusb_bos_descriptor *bos_desc;
 	int i;
 	int i;
 
 
-	len = len;
+
 	bos_desc = calloc (1, sizeof (*bos_desc));
 	bos_desc = calloc (1, sizeof (*bos_desc));
 	if (!bos_desc) {
 	if (!bos_desc) {
 		return LIBUSB_ERROR_NO_MEM;
 		return LIBUSB_ERROR_NO_MEM;

+ 24 - 24
driver-gekko.c

@@ -121,7 +121,7 @@ static int compac_micro_send(struct cgpu_info *compac, uint8_t cmd, uint8_t chan
 	usb_read_timeout(compac, (char *)info->rx, 255, &read_bytes, 1, C_GETRESULTS);
 	usb_read_timeout(compac, (char *)info->rx, 255, &read_bytes, 1, C_GETRESULTS);
 
 
 	dumpbuffer(compac, LOG_INFO, "(micro) TX", info->cmd, bytes);
 	dumpbuffer(compac, LOG_INFO, "(micro) TX", info->cmd, bytes);
-	usb_write(compac, info->cmd, bytes, &read_bytes, C_REQUESTRESULTS);
+	usb_write(compac, (char *)info->cmd, bytes, &read_bytes, C_REQUESTRESULTS);
 
 
 	memset(info->rx, 0, info->rx_len);
 	memset(info->rx, 0, info->rx_len);
 	usb_read_timeout(compac, (char *)info->rx, 1, &read_bytes, 5, C_GETRESULTS);
 	usb_read_timeout(compac, (char *)info->rx, 1, &read_bytes, 5, C_GETRESULTS);
@@ -168,7 +168,7 @@ static void compac_send(struct cgpu_info *compac, unsigned char *req_tx, uint32_
 
 
 	cgsleep_ms(1);
 	cgsleep_ms(1);
 	dumpbuffer(compac, LOG_INFO, "TX", info->cmd, bytes);
 	dumpbuffer(compac, LOG_INFO, "TX", info->cmd, bytes);
-	usb_write(compac, info->cmd, bytes, &read_bytes, C_REQUESTRESULTS);
+	usb_write(compac, (char *)info->cmd, bytes, &read_bytes, C_REQUESTRESULTS);
 }
 }
 
 
 static void compac_send_chain_inactive(struct cgpu_info *compac)
 static void compac_send_chain_inactive(struct cgpu_info *compac)
@@ -179,30 +179,30 @@ static void compac_send_chain_inactive(struct cgpu_info *compac)
 	applog(LOG_INFO,"%s %d: sending chain inactive for %d chip(s)", compac->drv->name, compac->device_id, info->chips);
 	applog(LOG_INFO,"%s %d: sending chain inactive for %d chip(s)", compac->drv->name, compac->device_id, info->chips);
 	if (info->asic_type == BM1387) {
 	if (info->asic_type == BM1387) {
 		unsigned char buffer[5] = {0x55, 0x05, 0x00, 0x00, 0x00};
 		unsigned char buffer[5] = {0x55, 0x05, 0x00, 0x00, 0x00};
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);; // chain inactive
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);; // chain inactive
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);; // chain inactive
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);; // chain inactive
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);; // chain inactive
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);; // chain inactive
 		for (i = 0; i < info->chips; i++) {
 		for (i = 0; i < info->chips; i++) {
 			buffer[0] = 0x41;
 			buffer[0] = 0x41;
 			buffer[1] = 0x05;
 			buffer[1] = 0x05;
 			buffer[2] = (0x100 / info->chips) * i;
 			buffer[2] = (0x100 / info->chips) * i;
-			compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);;
+			compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);;
 		}
 		}
 		unsigned char gateblk[9] = {0x58, 0x09, 0x00, 0x1C, 0x40, 0x20, 0x99, 0x80, 0x01};
 		unsigned char gateblk[9] = {0x58, 0x09, 0x00, 0x1C, 0x40, 0x20, 0x99, 0x80, 0x01};
 		gateblk[6] = 0x80 | info->bauddiv;
 		gateblk[6] = 0x80 | info->bauddiv;
-		compac_send(compac, (char *)gateblk, sizeof(gateblk), 8 * sizeof(gateblk) - 8);; // chain inactive
+		compac_send(compac, gateblk, sizeof(gateblk), 8 * sizeof(gateblk) - 8);; // chain inactive
 	} else if (info->asic_type == BM1384) {
 	} else if (info->asic_type == BM1384) {
 		unsigned char buffer[] = {0x85, 0x00, 0x00, 0x00};
 		unsigned char buffer[] = {0x85, 0x00, 0x00, 0x00};
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5); // chain inactive
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5); // chain inactive
 		for (i = 0; i < info->chips; i++) {
 		for (i = 0; i < info->chips; i++) {
 			buffer[0] = 0x01;
 			buffer[0] = 0x01;
 			buffer[1] = (0x100 / info->chips) * i;
 			buffer[1] = (0x100 / info->chips) * i;
-			compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+			compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 		}
 		}
 		buffer[0] = 0x86; // GATEBLK
 		buffer[0] = 0x86; // GATEBLK
 		buffer[1] = 0x00;
 		buffer[1] = 0x00;
 		buffer[2] = 0x9a; // 0x80 | 0x1a;
 		buffer[2] = 0x9a; // 0x80 | 0x1a;
-		//compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+		//compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 	}
 	}
 
 
 	if (info->mining_state != MINER_MINING) {
 	if (info->mining_state != MINER_MINING) {
@@ -234,7 +234,7 @@ static void compac_set_frequency(struct cgpu_info *compac, float frequency)
 			buffer[5] = (frequency * 2) / 25;
 			buffer[5] = (frequency * 2) / 25;
 		}
 		}
 		applog(LOG_WARNING, "%s %d: setting frequency to %.2fMHz", compac->drv->name, compac->device_id, frequency);
 		applog(LOG_WARNING, "%s %d: setting frequency to %.2fMHz", compac->drv->name, compac->device_id, frequency);
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
 		info->frequency = frequency;
 		info->frequency = frequency;
 	} else if (info->asic_type == BM1384) {
 	} else if (info->asic_type == BM1384) {
 		unsigned char buffer[] = {0x82, 0x0b, 0x83, 0x00};
 		unsigned char buffer[] = {0x82, 0x0b, 0x83, 0x00};
@@ -263,13 +263,13 @@ static void compac_set_frequency(struct cgpu_info *compac, float frequency)
 		buffer[2] = (pll) & 0xff;
 		buffer[2] = (pll) & 0xff;
 
 
 		applog(LOG_WARNING, "%s %d: setting frequency to %.2fMHz", compac->drv->name, compac->device_id, frequency);
 		applog(LOG_WARNING, "%s %d: setting frequency to %.2fMHz", compac->drv->name, compac->device_id, frequency);
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 		buffer[0] = 0x84;
 		buffer[0] = 0x84;
 		buffer[1] = 0x00;
 		buffer[1] = 0x00;
 		buffer[2] = 0x00;
 		buffer[2] = 0x00;
-//		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+//		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 		buffer[2] = 0x04;
 		buffer[2] = 0x04;
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 	}
 	}
 
 
 	info->hashrate = info->chips * info->frequency * info->cores * 1000000;
 	info->hashrate = info->chips * info->frequency * info->cores * 1000000;
@@ -541,10 +541,10 @@ static void *compac_mine(void *object)
 			if (ms_tdiff(&now, &info->last_frequency_ping) > 5000) {
 			if (ms_tdiff(&now, &info->last_frequency_ping) > 5000) {
 				if (info->asic_type == BM1387) {
 				if (info->asic_type == BM1387) {
 					unsigned char buffer[] = {0x54, 0x05, 0x00, 0x0C, 0x00};  // PLL_PARAMETER
 					unsigned char buffer[] = {0x54, 0x05, 0x00, 0x0C, 0x00};  // PLL_PARAMETER
-					compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
+					compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
 				} else if (info->asic_type == BM1384) {
 				} else if (info->asic_type == BM1384) {
 					unsigned char buffer[] = {0x84, 0x00, 0x04, 0x00};
 					unsigned char buffer[] = {0x84, 0x00, 0x04, 0x00};
-					compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+					compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 				}
 				}
 				cgtime(&info->last_frequency_ping);
 				cgtime(&info->last_frequency_ping);
 
 
@@ -844,10 +844,10 @@ static int64_t compac_scanwork(struct thr_info *thr)
 
 
 			if (info->asic_type == BM1387) {
 			if (info->asic_type == BM1387) {
 				unsigned char buffer[] = {0x54, 0x05, 0x00, 0x00, 0x00};
 				unsigned char buffer[] = {0x54, 0x05, 0x00, 0x00, 0x00};
-				compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
+				compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
 			} else if (info->asic_type == BM1384) {
 			} else if (info->asic_type == BM1384) {
 				unsigned char buffer[] = {0x84, 0x00, 0x00, 0x00};
 				unsigned char buffer[] = {0x84, 0x00, 0x00, 0x00};
-				compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+				compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 			}
 			}
 			return 0;
 			return 0;
 			break;
 			break;
@@ -929,7 +929,7 @@ static int64_t compac_scanwork(struct thr_info *thr)
 				//check for reset condition
 				//check for reset condition
 				if (info->asic_type == BM1384) {
 				if (info->asic_type == BM1384) {
 					unsigned char buffer[] = {0x84, 0x00, 0x04, 0x00};
 					unsigned char buffer[] = {0x84, 0x00, 0x04, 0x00};
-					compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+					compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 				}
 				}
 				cgtime(&info->last_frequency_ping);
 				cgtime(&info->last_frequency_ping);
 			}
 			}
@@ -1068,7 +1068,7 @@ static bool compac_prepare(struct thr_info *thr)
 		unsigned char buffer[] = { 0x58, 0x09, 0x00, 0x1C, 0x00, 0x20, 0x07, 0x00, 0x19 };
 		unsigned char buffer[] = { 0x58, 0x09, 0x00, 0x1C, 0x00, 0x20, 0x07, 0x00, 0x19 };
 		info->bauddiv = 0x01; // 1.5Mbps baud.
 		info->bauddiv = 0x01; // 1.5Mbps baud.
 		buffer[6] = info->bauddiv;
 		buffer[6] = info->bauddiv;
-		compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
+		compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
 		cgsleep_ms(1);
 		cgsleep_ms(1);
 		usb_transfer(compac, FTDI_TYPE_OUT, FTDI_REQUEST_BAUD, (info->bauddiv + 1), (FTDI_INDEX_BAUD_BTS & 0xff00) | info->interface, C_SETBAUD);
 		usb_transfer(compac, FTDI_TYPE_OUT, FTDI_REQUEST_BAUD, (info->bauddiv + 1), (FTDI_INDEX_BAUD_BTS & 0xff00) | info->interface, C_SETBAUD);
 		cgsleep_ms(1);
 		cgsleep_ms(1);
@@ -1091,12 +1091,12 @@ static bool compac_prepare(struct thr_info *thr)
 	if (info->mining_state == MINER_INIT) {
 	if (info->mining_state == MINER_INIT) {
 		if (info->asic_type == BM1387) {
 		if (info->asic_type == BM1387) {
 			unsigned char buffer[] = {0x54, 0x05, 0x00, 0x00, 0x00};
 			unsigned char buffer[] = {0x54, 0x05, 0x00, 0x00, 0x00};
-			compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
-			compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
+			compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
+			compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 8);
 		} else if (info->asic_type == BM1384) {
 		} else if (info->asic_type == BM1384) {
 			unsigned char buffer[] = {0x84, 0x00, 0x00, 0x00};
 			unsigned char buffer[] = {0x84, 0x00, 0x00, 0x00};
-			compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
-			compac_send(compac, (char *)buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+			compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
+			compac_send(compac, buffer, sizeof(buffer), 8 * sizeof(buffer) - 5);
 		}
 		}
 
 
 		miner_ok = false;
 		miner_ok = false;

+ 5 - 11
util.c

@@ -1384,15 +1384,9 @@ char *Strcasestr(char *haystack, const char *needle)
 		lowneedle[i] = tolower(needle[i]);
 		lowneedle[i] = tolower(needle[i]);
 	ret = strstr(lowhay, lowneedle);
 	ret = strstr(lowhay, lowneedle);
 	if (ret)
 	if (ret)
-    {
-        ofs = ret - lowhay;
-        ret = haystack + ofs;
-    }
-
-    free(lowhay);
-    free(lowneedle);
-
-    return ret;
+    	return NULL;
+	ofs = ret - lowhay;
+    	return haystack + ofs;
 }
 }
 
 
 char *Strsep(char **stringp, const char *delim)
 char *Strsep(char **stringp, const char *delim)
@@ -3652,7 +3646,7 @@ retry:
 	ret = write(cgsem->pipefd[1], &buf, 1);
 	ret = write(cgsem->pipefd[1], &buf, 1);
 	if (unlikely(ret == 0))
 	if (unlikely(ret == 0))
 		applog(LOG_WARNING, "Failed to write errno=%d" IN_FMT_FFL, errno, file, func, line);
 		applog(LOG_WARNING, "Failed to write errno=%d" IN_FMT_FFL, errno, file, func, line);
-	else if (unlikely(ret < 0 && interrupted))
+	else if (unlikely(ret < 0 && interrupted()))
 		goto retry;
 		goto retry;
 }
 }
 
 
@@ -3664,7 +3658,7 @@ retry:
 	ret = read(cgsem->pipefd[0], &buf, 1);
 	ret = read(cgsem->pipefd[0], &buf, 1);
 	if (unlikely(ret == 0))
 	if (unlikely(ret == 0))
 		applog(LOG_WARNING, "Failed to read errno=%d" IN_FMT_FFL, errno, file, func, line);
 		applog(LOG_WARNING, "Failed to read errno=%d" IN_FMT_FFL, errno, file, func, line);
-	else if (unlikely(ret < 0 && interrupted))
+	else if (unlikely(ret < 0 && interrupted())
 		goto retry;
 		goto retry;
 }
 }