/* The main function */ int main() { int rows, i, bound; if (scanf("%d", &rows) != 1) return -1; if (rows <= 0) return -1; char cmd[STR_MAX_SIZE]; char key[STR_MAX_SIZE]; char value[STR_MAX_SIZE]; char* v = NULL; if (scanf("%s", cmd) != 1) return -1; if (strcmp(cmd, "BOUND")) return -1; if (scanf("%d", &bound) != 1) return -1; if (bound <= 0) return -1; init(bound); for (i = 1; i < rows; i++) { if (scanf("%s", cmd) != 1) break; if (strcmp(cmd, "BOUND") == 0) { if (scanf("%d", &bound) != 1) break; if (bound <= 0) break; resize(bound); } else if (strcmp(cmd, "SET") == 0) { if (scanf("%s", key) != 1) break; if (scanf("%s", value) != 1) break; put(key, value); } else if (strcmp(cmd, "GET") == 0) { if (scanf("%s", key) != 1) break; v = get(key, true); if (v) printf("%s\n", v); else printf("NULL\n"); } else if (strcmp(cmd, "PEEK") == 0) { if (scanf("%s", key) != 1) break; v = get(key, false); if (v) printf("%s\n", v); else printf("NULL\n"); } else if (strcmp(cmd, "DUMP") == 0) { dump(); } else break; } // free the memory used by the cache rear.prev->next = NULL; remove_nodes(head.next); return 0; }
OctreeNode* sps_real(CBface_list& input_faces, CBBOX& box, int height, double regularity, double min_dist, Bface_list& flist, ARRAY<Wvec>& blist, double& spacing ) { clock_t start, end; double duration; flist.clear(); blist.clear(); OctreeNode* root = new OctreeNode(box.min(), box.max(), 1, NULL); if (height == 1) { root->set_leaf(true); root->set_disp(true); } root->intersects() = input_faces; start = clock(); root->build_octree(height); end = clock(); duration = (double)(end - start) / CLOCKS_PER_SEC; err_adv(debug, "step 1 time: %f", duration); start = clock(); visit(root, regularity, flist, blist); end = clock(); duration = (double)(end - start) / CLOCKS_PER_SEC; err_adv(debug, "step 2 time: %f", duration); // remove bad samples start = clock(); double dist = min_dist * box.dim().length() / (1<<(height-1)); spacing = dist; root->set_neibors(); root->set_terms(); remove_nodes(flist, blist, dist, root->terms()); end = clock(); duration = (double)(end - start) / CLOCKS_PER_SEC; err_adv(debug, "step 3 time: %f", duration); err_adv(debug, "no of points: %d", flist.num()); return root; }
void dec_bound(size_t b) { empty_count -= (bound - b); if (empty_count < 0) { // Need to delete empty_count nodes from the end NODE *p = &head; size_t i = 0; while (i < b) { i++; p = p->next; } NODE* q = p->next; p->next = &rear; rear.prev->next = NULL; rear.prev = p; // delete the nodes from q and rebuild the sorting tree remove_nodes(q); rebuild_tree(false); empty_count = 0; } bound = b; }
int main(void) { int serial_fd, major; struct termios tio; int ldisc = N_GSM0710; struct gsm_config gsm; char atcommand[40]; /* print global parameters */ dbg("SERIAL_PORT = %s", SERIAL_PORT); /* open the serial port */ serial_fd = open(SERIAL_PORT, O_RDWR | O_NOCTTY | O_NDELAY); if (serial_fd == -1) err(EXIT_FAILURE, "Cannot open %s", SERIAL_PORT); /* get the current attributes of the serial port */ if (tcgetattr(serial_fd, &tio) == -1) err(EXIT_FAILURE, "Cannot get line attributes"); /* set the new attrbiutes */ tio.c_iflag = 0; tio.c_oflag = 0; tio.c_cflag = CS8 | CREAD | CLOCAL; // tio.c_cflag |= CRTSCTS; tio.c_lflag = 0; tio.c_cc[VMIN] = 1; tio.c_cc[VTIME] = 0; /* write the speed of the serial line */ if (cfsetospeed(&tio, LINE_SPEED) < 0 || cfsetispeed(&tio, LINE_SPEED) < 0) err(EXIT_FAILURE, "Cannot set line speed"); /* write the attributes */ if (tcsetattr(serial_fd, TCSANOW, &tio) == -1) err(EXIT_FAILURE, "Cannot set line attributes"); /** * Send AT commands to put the modem in CMUX mode. * This is vendor specific and should be changed * to fit your modem needs. * The following matches Quectel M95. */ // if (send_at_command(serial_fd, "AT+IFC=2,2\r") == -1) // errx(EXIT_FAILURE, "AT+IFC=2,2: bad response"); if (send_at_command(serial_fd, "AT+GMM\r") == -1) warnx("AT+GMM: bad response"); if (send_at_command(serial_fd, "AT\r") == -1) warnx("AT: bad response"); if (send_at_command(serial_fd, "AT+IPR=38400\r") == -1) errx(EXIT_FAILURE, "AT+IPR=38400: bad response"); sprintf(atcommand, "AT+CMUX=0,0,3,%d,10,3,30,10,2\r", MTU); if (send_at_command(serial_fd, atcommand) == -1) errx(EXIT_FAILURE, "Cannot enable modem CMUX"); /* use n_gsm line discipline */ sleep(2); if (ioctl(serial_fd, TIOCSETD, &ldisc) < 0) err(EXIT_FAILURE, "Cannot set line dicipline. Is 'n_gsm' module registred?"); /* get n_gsm configuration */ if (ioctl(serial_fd, GSMIOC_GETCONF, &gsm) < 0) err(EXIT_FAILURE, "Cannot get GSM multiplex parameters"); /* set and write new attributes */ gsm.initiator = 1; gsm.encapsulation = 0; /* 0 or 1, basic/advanced */ gsm.mru = MTU; gsm.mtu = MTU; gsm.t1 = 10; gsm.n2 = 3; gsm.t2 = 30; gsm.t3 = 10; if (ioctl(serial_fd, GSMIOC_SETCONF, &gsm) < 0) err(EXIT_FAILURE, "Cannot set GSM multiplex parameters"); dbg("Line dicipline set"); /* create the virtual TTYs */ if (CREATE_NODES) { int created; if ((major = get_major(DRIVER_NAME)) < 0) errx(EXIT_FAILURE, "Cannot get major number"); if ((created = make_nodes(major, BASENAME_NODES, NUM_NODES)) < NUM_NODES) warnx("Cannot create all nodes, only %d/%d have been created.", created, NUM_NODES); } /* detach from the terminal if needed */ if (DAEMONIZE) { dbg("Going to background"); if (daemon(0,0) != 0) err(EXIT_FAILURE, "Cannot daemonize"); } /* wait to keep the line discipline enabled, wake it up with a signal */ signal(SIGINT, signal_callback_handler); signal(SIGTERM, signal_callback_handler); pause(); /* remove the created virtual TTYs */ if (CREATE_NODES) { remove_nodes(BASENAME_NODES, NUM_NODES); } /* close the serial line */ close(serial_fd); return EXIT_SUCCESS; }
static void create_midilinks (void) { int dev, newdev, numfiles = 0; struct stat st; char devname[64]; oss_midi_info *xi, *mididevs[MAXDEV]; oss_renumber_t renum = { 0 }; if (recreate_all) remove_nodes ("/dev", "midi[0-9]*"); if (si.nummidis < 1) /* No MIDI devices in the system */ return; if (verbose) printf ("%d midi devices\n", si.nummidis); for (dev = 0; dev < si.nummidis; dev++) { xi = malloc (sizeof (*xi)); xi->dev = dev; if (ioctl (mixerfd, SNDCTL_MIDIINFO, xi) == -1) { perror ("SNDCTL_MIDIINFO"); exit (-1); } mididevs[dev] = xi; /* if (verbose) printf ("Mididev %d = %s\n", dev, xi->devnode); */ } for (dev = 0; dev < MAXDEV; dev++) { sprintf (devname, "/dev/midi%02d", dev); newdev = dev; if (lstat (devname, &st) != -1) { if (S_ISLNK (st.st_mode)) numfiles = dev + 1; } } if (numfiles < si.nummidis) numfiles = si.nummidis; if (verbose) printf ("/dev/midi%02d is the next free legacy device\n",numfiles); for (dev = 0; dev < si.nummidis; dev++) { int recreate = 0; sprintf (devname, "/dev/midi%02d", dev); newdev = dev; if (lstat (devname, &st) == -1) { if (verbose) printf ("%s: %s\n", devname, strerror (errno)); recreate = 1; } else { if (S_ISCHR (st.st_mode)) { if (verbose) printf ("%s: character device\n", devname); recreate = 1; } else if (S_ISLNK (st.st_mode)) { int l; char linkdev[256]; if ((l = readlink (devname, linkdev, sizeof (linkdev) - 1)) == -1) { perror ("readlink"); strcpy (linkdev, "Invalid"); } else { linkdev[l] = 0; } if (verbose) printf ("%s: symlink -> %s ", devname, linkdev); if (strcmp (linkdev, mididevs[dev]->devnode) != 0) { if (verbose) printf ("(should be %s)\n", mididevs[dev]->devnode); if ((newdev = find_midilink (mididevs[dev])) == -1) { recreate = 1; newdev = numfiles++; } else if (verbose) printf ("\tAlready linked to /dev/midi%02d\n", newdev); } else if (verbose) printf ("OK\n"); } else { if (verbose) printf ("%s: unknown file type\n", devname); recreate = 1; } } if (recreate) { mididevs[dev]->legacy_device = newdev; sprintf (devname, "/dev/midi%02d", newdev); if (strcmp (mididevs[dev]->devnode, devname) != 0) /* Not the same */ { unlink (devname); if (symlink (mididevs[dev]->devnode, devname) == -1) { perror ("symlink"); fprintf (stderr, "Cannot create link %s->%s\n", devname, mididevs[dev]->devnode); exit (-1); } if (verbose) printf ("Created new legacy device %s -> %s\n", devname, mididevs[dev]->devnode); } } } if (verbose) printf ("%d legacy MIDI device files\n", numfiles); renum.n = si.nummidis; for (dev = 0; dev < si.nummidis; dev++) { if (mididevs[dev]->legacy_device != dev) if (verbose) printf ("Mididev %d is legacy device file /dev/midi%02d\n", dev, mididevs[dev]->legacy_device); renum.map[dev] = mididevs[dev]->legacy_device; } if (ioctl (mixerfd, OSSCTL_RENUM_MIDIDEVS, &renum) == -1) { perror ("midi_renum"); } }
static void create_dsplinks (void) { int dev, newdev, numfiles = 0, legacy_number = 0; struct stat st; char devname[64]; oss_audioinfo *ai, *audiodevs[MAXDEV]; oss_renumber_t renum = { 0 }; if (recreate_all) { if ((unlink ("/dev/dsp") == -1) && (errno != ENOENT)) fprintf (stderr, "Couldn't remove /dev/dsp link!\n"); remove_nodes ("/dev", "dsp[0-9]*"); remove_nodes ("/dev", "dsp_*"); } if (verbose) printf ("%d audio devices\n", si.numaudios); if (si.numaudios < 1) return; for (dev = 0; dev < si.numaudios; dev++) { ai = malloc (sizeof (*ai)); ai->dev = dev; if (ioctl (mixerfd, SNDCTL_AUDIOINFO, ai) == -1) { perror ("SNDCTL_AUDIOINFO"); exit (-1); } audiodevs[dev] = ai; /* if (verbose) printf ("Adev %d = %s\n", dev, ai->devnode); */ } for (dev = 0; dev < MAXDEV; dev++) { sprintf (devname, "/dev/dsp%d", dev); newdev = dev; if (lstat (devname, &st) != -1) { if (S_ISLNK (st.st_mode)) numfiles = dev + 1; } } if (verbose) printf ("/dev/dsp%d is the next free legacy device\n", numfiles); for (dev = 0; dev < si.numaudios; dev++) { int recreate = 0; #ifdef VDEV_SUPPORT if (audiodevs[dev]->caps & PCM_CAP_HIDDEN) /* Ignore hidden devices */ { audiodevs[dev]->legacy_device = -1; continue; } #endif newdev = legacy_number++; sprintf (devname, "/dev/dsp%d", newdev); if (lstat (devname, &st) == -1) { if (verbose) printf ("%s: %s\n", devname, strerror (errno)); recreate = 1; } else { if (S_ISCHR (st.st_mode)) { if (verbose) printf ("%s: character device\n", devname); recreate = 1; } else if (S_ISLNK (st.st_mode)) { int l; char linkdev[256]; if ((l = readlink (devname, linkdev, sizeof (linkdev) - 1)) == -1) { perror ("readlink"); strcpy (linkdev, "Invalid"); } else { linkdev[l] = 0; } if (verbose) printf ("%s: symlink -> %s ", devname, linkdev); if (strcmp (linkdev, audiodevs[dev]->devnode) != 0) { if (verbose) printf ("(should be %s)\n", audiodevs[dev]->devnode); if ((newdev = find_dsplink (audiodevs[dev])) == -1) { recreate = 1; newdev = numfiles++; } else if (verbose) printf ("\tAlready linked to /dev/dsp%d\n", newdev); } else if (verbose) printf ("OK\n"); } else { if (verbose) printf ("%s: unknown file type\n", devname); recreate = 1; } } if (recreate) { audiodevs[dev]->legacy_device = newdev; sprintf (devname, "/dev/dsp%d", newdev); if (strcmp (audiodevs[dev]->devnode, devname) != 0) /* Not the same */ { unlink (devname); if (symlink (audiodevs[dev]->devnode, devname) == -1) { perror ("symlink"); fprintf (stderr, "Cannot create link %s->%s\n", devname, audiodevs[dev]->devnode); exit (-1); } if (verbose) printf ("Created new legacy device %s -> %s\n", devname, audiodevs[dev]->devnode); audiodevs[dev]->legacy_device = newdev; } } } if (verbose) printf ("%d legacy dsp device files\n", numfiles); renum.n = si.numaudios; for (dev = 0; dev < si.numaudios; dev++) { if (audiodevs[dev]->legacy_device != dev) if (audiodevs[dev]->legacy_device >= 0) if (verbose) printf ("Adev %d (%s) is legacy device file " "/dev/dsp%d\n", dev, audiodevs[dev]->devnode, audiodevs[dev]->legacy_device); renum.map[dev] = audiodevs[dev]->legacy_device; } if (ioctl (mixerfd, OSSCTL_RENUM_AUDIODEVS, &renum) == -1) { perror ("audio_renum"); } /* * Find out a suitable /dev/dsp device (input and output capable). * Remove old /dev/dsp if it appears to be a character device node. */ if (lstat ("/dev/dsp", &st) != -1) if (S_ISCHR (st.st_mode)) unlink ("/dev/dsp"); /* * Remove /dev/dsp link that points to some bogus device. This may * happen if some hot-pluggable (USB) device has been * removed from the system. */ if (lstat ("/dev/dsp", &st) != -1) /* /dev/dsp exists (and is symlink) */ if (stat ("/dev/dsp", &st) == -1) /* But points to nowhere */ unlink ("/dev/dsp"); /* * Next find a duplex capable audio device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_OUTPUT)) continue; if (!(ai->caps & PCM_CAP_INPUT)) continue; if (ai->min_channels > 2 || ai->max_channels < 2) /* No stereo */ continue; if (verbose) printf ("%s is the default /dev/dsp device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp"); /* Ignore errors */ break; } /* * Find out a suitable /dev/dsp_out device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_OUTPUT)) continue; if (verbose) printf ("%s is the default dsp_out device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp_out"); /* Ignore errors */ /* * Also link /dev/dsp just in case the link doesn't * exist yet. */ err = symlink (ai->devnode, "/dev/dsp"); /* Ignore errors */ break; } /* * Find out a suitable /dev/dsp_in device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_INPUT)) continue; if (verbose) printf ("%s is the default dsp_in device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp_in"); /* Ignore errors */ /* * Also link /dev/dsp just in case the link doesn't * exist yet. */ err = symlink (ai->devnode, "/dev/dsp"); /* Ignore errors */ break; } /* * Find out a suitable /dev/dsp_ac3 output device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_OUTPUT)) continue; if (!(ai->oformats & AFMT_AC3)) continue; if (verbose) printf ("%s is the default AC3 output device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp_ac3"); /* Ignore errors */ break; } /* * Find out a suitable /dev/dsp_mmap output device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_OUTPUT)) continue; if (!(ai->caps & PCM_CAP_MMAP)) continue; if (!(ai->caps & PCM_CAP_TRIGGER)) continue; if (ai->max_channels < 2) continue; if (ai->min_channels > 2) continue; if (verbose) printf ("%s is the default mmap output device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp_mmap"); /* Ignore errors */ break; } /* * Find out a suitable /dev/dsp_multich output device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_OUTPUT)) continue; if (ai->max_channels < 4) continue; if (verbose) printf ("%s is the default multichan output device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp_multich"); /* Ignore errors */ break; } /* * Find out a suitable /dev/dsp_spdifout output device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_OUTPUT)) continue; if (!(ai->caps & PCM_CAP_DIGITALOUT)) continue; if (verbose) printf ("%s is the default S/PDIF digital output device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp_spdifout"); /* Ignore errors */ break; } /* * Find out a suitable /dev/dsp_spdifin input device. */ for (dev = 0; dev < si.numaudios; dev++) { ai = audiodevs[dev]; if (!(ai->caps & PCM_CAP_INPUT)) continue; if (!(ai->caps & PCM_CAP_DIGITALIN)) continue; if (verbose) printf ("%s is the default S/PDIF digital input device\n", ai->devnode); err = symlink (ai->devnode, "/dev/dsp_spdifin"); /* Ignore errors */ break; } }
ATF_TC_BODY(rbt_insert_and_remove, tc) { /* * What is the best way to test our red-black tree code? It is * not a good method to test every case handled in the actual * code itself. This is because our approach itself may be * incorrect. * * We test our code at the interface level here by exercising the * tree randomly multiple times, checking that red-black tree * properties are valid, and all the nodes that are supposed to be * in the tree exist and are in order. * * NOTE: These tests are run within a single tree level in the * forest. The number of nodes in the tree level doesn't grow * over 1024. */ isc_result_t result; dns_rbt_t *mytree = NULL; /* * We use an array for storing names instead of a set * structure. It's slow, but works and is good enough for tests. */ char *names[1024]; size_t names_count; int i; UNUSED(tc); isc_mem_debugging = ISC_MEM_DEBUGRECORD; result = dns_test_begin(NULL, ISC_TRUE); ATF_CHECK_EQ(result, ISC_R_SUCCESS); result = dns_rbt_create(mctx, delete_data, NULL, &mytree); ATF_REQUIRE_EQ(result, ISC_R_SUCCESS); memset(names, 0, sizeof(names)); names_count = 0; /* Repeat the insert/remove test some 4096 times */ for (i = 0; i < 4096; i++) { isc_uint32_t num_names; isc_random_get(&num_names); if (names_count < 1024) { num_names %= 1024 - names_count; num_names++; } else { num_names = 0; } insert_nodes(mytree, names, &names_count, num_names); check_tree(mytree, names, names_count); isc_random_get(&num_names); if (names_count > 0) { num_names %= names_count; num_names++; } else { num_names = 0; } remove_nodes(mytree, names, &names_count, num_names); check_tree(mytree, names, names_count); } /* Remove the rest of the nodes */ remove_nodes(mytree, names, &names_count, names_count); check_tree(mytree, names, names_count); for (i = 0; i < 1024; i++) { if (names[i] != NULL) { isc_mem_free(mctx, names[i]); } } dns_rbt_destroy(&mytree); dns_test_end(); }