예제 #1
0
파일: alter.c 프로젝트: tvrc4m/mysql_shell
int cmd_alter(int argc,const char **argv){
	// check necessary param
	check_cmd_args(argc,argv);

	st_show_sql *stsql=(st_show_sql*)malloc(sizeof(st_show_sql));

	char type[50];
	char like[50];
	const char *table="";
	char sql[125];

	while(*argv){
		if(!strcmp(*argv,"--tables")){
			stsql->type=*argv+2;
			argv++;
		}else if(!strcmp(*argv,"--columns")){
			const char *t=*argv+2;
			argv++;
			if(!start_with(*argv,"--")){
				usage("about show --columns table-name");
			}
			sprintf(type,"%s FROM %s%s",t,DBPRE,*argv);
			stsql->type=type;
			argv++;
		}else if(!strcmp(*argv,"--create")){
			const char *t=*argv+2;
			argv++;
			if(!start_with(*argv,"--")){
				usage("about show --create table-name");
			}
			sprintf(type,"%s TABLE %s%s",t,DBPRE,*argv);
			stsql->type=type;
			argv++;
		}else if(!strcmp(*argv,"--variables")){
			stsql->type=*argv+2;
			argv++;
		}else if(!strcmp(*argv,"--like")){
			argv++;
			cat_sql_like(*argv,like);
			argv++;
		}else{
			argv++;
		}
	}
	stsql->table=table;
	stsql->like=like;
	parse_show_sql(stsql,sql);
	MYSQL_RES *res=select(sql);
	print_sql_result(res,1);
	free_res(res);
	return 0;
}
예제 #2
0
bool rsingle_diff_search_index::search(std::string &key, std::string &value, std::set<std::string> & search)
{
   if (start_with(key, "rsingle_diff_0_ge") || start_with(key, "rsingle_diff_1_ge") || start_with(key, "rsingle_diff_2_ge"))
   {
       return do_check_rsingle_diff_ge(key, value, search);
   }
   else if (start_with(key, "rsingle_diff_0_le") || start_with(key, "rsingle_diff_1_le") || start_with(key, "rsingle_diff_2_le"))
   {
       return do_check_rsingle_diff_le(key, value, search);
   }

   return false;
}
예제 #3
0
// Central CELS function that provides all CELS services
int CELS_Call (TABI_ELEMENT* params)
{
  TABI_MAP p(params); p.dump();
  char *service = p._str("service");

  // ==== AUTO-SERVICES =====================================
  // Ignore zero mem parameter to Set* calls
  if (start_with (service, "Set") && isupper(service[3]))
    if (p._int("mem",1)==0)
      return p._return(p._str("method"));

  // Limit* = Set* if Get*>limit
  if (start_with (service, "Limit") && isupper(service[5]))                 return p._return(p._str("method"));   // to do: get & set
/*
  {
    char new_service[MAX_METHOD_STRLEN];
    sprintf(new_service, "Get%s", service+5);
    MemSize mem = TABI_callret(CELS_Call, TABI_DYNAMAP(p) ("service", new_service));
    if (mem <= p._longlong("mem"))         // if method already uses less memory than specified limit
      return p._return(p._str("method"));  // then return method unmodified
    sprintf(new_service, "Set%s", service+5);
    return TABI_call(CELS_Call, TABI_DYNAMAP(p) ("service", new_service));
  }
*/
  if (strequ (service, "encryption?"))               return 1;                             // to do: aes-specific
  if (start_with (p._str("method",""), "aes"))       return p._return(p._str("method"));   // to do: aes-specific
  //default: GetBlockSize        {return 0;}
  //default: SetBlockSize        {}
  // ========================================================

  // Find appropriate method to service this call
  for (int i=0; i<methodsCount; i++)
  {
    try
    {
      int x = methodsTable[i](params);
      if (x!=FREEARC_ERRCODE_NOT_IMPLEMENTED)
        return x;
    }
    catch (...)
    {
    }
  }
  return FREEARC_ERRCODE_NOT_IMPLEMENTED;
}
예제 #4
0
파일: alter.c 프로젝트: tvrc4m/mysql_shell
static int has_cmd_args(const char **argv,const char *arg){
	while(*argv){
		if(!start_with(*argv,"--") && !strcmp(*argv+2,arg)){
			return 1;
		}
		argv++;
	}
	return 0;
}
예제 #5
0
int main() {
	//variables
	struct sockaddr_in serverAddress, clientAddress;
	char * ipClient;//pour l'affichage de l'adresse
	int serverSocket, clientSocket, err;
	socklen_t clientAddrLen = sizeof(clientAddress);
	void * line;
	choice_t * choix_joueur, choix_serveur;
	score_t score;
	win_t win;
	end_t end;

	//creation du socket
	serverSocket = socket(AF_INET, SOCK_STREAM, 0);
	if (serverSocket < 0) {
		puts("Cannot open socket.");
		exit(EXIT_FAILURE);
	}
	puts("Socket openned.");

	//liaison au port
	serverAddress.sin_family = AF_INET;
	serverAddress.sin_addr.s_addr = htonl(INADDR_ANY);
	serverAddress.sin_port = htons(SERVER_PORT);
	err = bind(serverSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress));
	if (err < 0) {
		printf("Cannot bind port %hu.\n", SERVER_PORT);
		close(serverSocket);
		exit(EXIT_FAILURE);
	}
	printf("Port %hu bound.\n", SERVER_PORT);

	//ecoute du port
	err = listen(serverSocket, MAX_CLIENTS);
	if (err < 0) {
		printf("Cannot listen port %hu.\n", SERVER_PORT);
		close(serverSocket);
		exit(EXIT_FAILURE);
	}
	printf("Listening port %hu.\n", SERVER_PORT);

	while (1) {
		//attente de connection
		clientSocket = accept(serverSocket, (struct sockaddr *) &clientAddress, &clientAddrLen);
		if (clientSocket < 0) {
			puts("Cannot accept connection.");
			close(serverSocket);
			exit(EXIT_FAILURE);
		}
		ipClient = inet_ntoa(clientAddress.sin_addr);
		printf("New connection from %s.\n", ipClient);

		//traitement
		srand(time(NULL));
		memcpy(choix_serveur.CHOICE, "CHOICE", 6);
		choix_serveur.SPACE = ' ';
		choix_serveur.ZERO = '\0';
		memcpy(score.SCORE, "SCORE", 5);
		score.SPACE = ' ';
		score.ZERO = '\0';
		score.player_score = 0;
		score.server_score = 0;
		memcpy(win.WIN, "WIN", 3);
		win.SPACE = ' ';
		win.ZERO = '\0';
		memcpy(end.END, "END", 3);
		end.SPACE = ' ';
		end.ZERO = '\0';
		line = read_line(clientSocket);
		if (line == NULL || strcmp(line, "HELLO") != 0) {
			puts("Communication error.");
			close(clientSocket);
			break;
		}
		free(line);
		send(clientSocket, "OK", 3, 0);
		line = read_line(clientSocket);
		if (line == NULL || strcmp(line, "CHIFOUMI") != 0) {
			puts("Communication error.");
			close(clientSocket);
			break;
		}
		free(line);
		send(clientSocket, "OK", 3, 0);
		while (1) {
			line = read_line(clientSocket);
			if (line == NULL || !start_with(line, "CHOICE")) {
				break;
			}
			choix_joueur = line;
			choix_serveur.choice = rand() % 3;
			send(clientSocket, &choix_serveur, sizeof(choice_t), 0);
			if (((choix_joueur->choice + 1) % 3) == choix_serveur.choice) {
				win.winner = SERVER;
				score.server_score++;
			} else if (((choix_serveur.choice + 1) % 3) == choix_joueur->choice) {
				win.winner = PLAYER;
				score.player_score++;
			} else {
				win.winner = NONE;
			}
			free(line);
			line = read_line(clientSocket);
			if (line == NULL || strcmp(line, "OK") != 0) {
				break;
			}
			free(line);
			send(clientSocket, &win, sizeof(win_t), 0);
			line = read_line(clientSocket);
			if (line == NULL || strcmp(line, "OK") != 0) {
				break;
			}
			free(line);
			send(clientSocket, &score, sizeof(score_t), 0);
			line = read_line(clientSocket);
			if (line == NULL || strcmp(line, "OK") != 0) {
				break;
			}
			free(line);
			if (score.player_score == 3) {
				end.winner = PLAYER;
			} else if (score.server_score == 3) {
				end.winner = SERVER;
			} else {
				end.winner = NONE;
			}
			send(clientSocket, &end, sizeof(end_t), 0);
			line = read_line(clientSocket);
			if (line == NULL || strcmp(line, "OK") != 0) {
				break;
			}
			free(line);
		}

		//fermeture de la connection
		while (read_line(clientSocket) != NULL);
		printf("Connection with %s closed.\n", ipClient);
	}
}
예제 #6
0
int main(int argc, char * argv[]) {
	//variables
	struct sockaddr_in clientAddress, serverAddress;
	struct hostent * serverHost;
	int clientSocket, err;
	void * line;
	choice_t * choix_serveur, choix_joueur;
	score_t * score;
	win_t * win;
	end_t * end;

	//arguments du programme
	if (argc != 2) {
		printf("%s <hostname>\n", argv[0]);
		exit(EXIT_FAILURE);
	}

	//resolution de l'hôte
	serverHost = gethostbyname(argv[1]);
	if (serverHost == NULL) {
		printf("Unknown host %s.\n", argv[1]);
		exit(EXIT_FAILURE);
	}
	printf("Host %s found.\n", argv[1]);
	serverAddress.sin_family = serverHost->h_addrtype;
	memcpy(&serverAddress.sin_addr.s_addr, serverHost->h_addr_list[0], serverHost->h_length);
	serverAddress.sin_port = htons(SERVER_PORT);

	//creation du socket
	clientSocket = socket(AF_INET, SOCK_STREAM, 0);
	if (clientSocket < 0) {
		puts("Cannot open socket");
		exit(EXIT_FAILURE);
	}
	puts("Socket openned.");

	//liaison a un port
	clientAddress.sin_family = AF_INET;
	clientAddress.sin_addr.s_addr = htonl(INADDR_ANY);
	clientAddress.sin_port = htons(0);
	err = bind(clientSocket, (struct sockaddr *) &clientAddress, sizeof(clientAddress));
	if (err < 0) {
		puts("Cannot bind port %hu.");
		close(clientSocket);
		exit(EXIT_FAILURE);
	}
	puts("Port bound.");

	//connection au serveur
	err = connect(clientSocket, (struct sockaddr *) &serverAddress, sizeof(serverAddress));
	if (err < 0) {
		printf("Cannot connect to server %s.\n", argv[1]);
		close(clientSocket);
		exit(EXIT_FAILURE);
	}
	printf("Connected to %s.\n", argv[1]);

	//traitement
	send(clientSocket, "HELLO", 6, 0);
	line = read_line(clientSocket);
	if (line == NULL || strcmp(line, "OK") != 0) {
		puts("Communication error");
		close(clientSocket);
		exit(EXIT_FAILURE);
	}
	free(line);
	send(clientSocket, "CHIFOUMI", 9, 0);
	line = read_line(clientSocket);
	if (line == NULL || strcmp(line, "OK") != 0) {
		puts("Communication error");
		close(clientSocket);
		exit(EXIT_FAILURE);
	}
	free(line);
	memcpy(choix_joueur.CHOICE, "CHOICE", 6);
	choix_joueur.SPACE = ' ';
	choix_joueur.ZERO = '\0';
	while (1) {
		printf("Entrez %hhu pour pierre, %hhu pour feuille et %hhu pour ciseau : ", PIERRE, FEUILLE, CISEAU);
		scanf("%hhu", &choix_joueur.choice);
		while (choix_joueur.choice > 2) {
			puts("Invalide.");
			printf("Entrez %hhu pour pierre, %hhu pour feuille et %hhu pour ciseau : ", PIERRE, FEUILLE, CISEAU);
			scanf("%hhu", &choix_joueur.choice);
		}
		switch (choix_joueur.choice) {
			case PIERRE:
				puts("Vous avez choisi PIERRE.");
				break;
			case FEUILLE:
				puts("Vous avez choisi FEUILLE.");
				break;
			case CISEAU:
				puts("Vous avez choisi CISEAU.");
				break;
		}
		send(clientSocket, &choix_joueur, sizeof(choice_t), 0);
		line = read_line(clientSocket);
		if (line == NULL || !start_with(line, "CHOICE")) {
			puts("Communication error");
			close(clientSocket);
			exit(EXIT_FAILURE);
		}
		choix_serveur = line;
		switch (choix_serveur->choice) {
			case PIERRE:
				puts("Le serveur a choisi PIERRE.");
				break;
			case FEUILLE:
				puts("Le serveur a choisi FEUILLE.");
				break;
			case CISEAU:
				puts("Le serveur a choisi CISEAU.");
				break;
		}
		free(line);
		send(clientSocket, "OK", 3, 0);
		line = read_line(clientSocket);
		if (line == NULL || !start_with(line, "WIN")) {
			puts("Communication error");
			close(clientSocket);
			exit(EXIT_FAILURE);
		}
		send(clientSocket, "OK", 3, 0);
		win = line;
		switch (win->winner) {
			case PLAYER:
				puts("Vous l'emportez.");
				break;
			case SERVER:
				puts("Le serveur l'emporte.");
				break;
			case NONE:
				puts("Egalite.");
				break;
		}
		free(line);
		line = read_line(clientSocket);
		if (line == NULL || !start_with(line, "SCORE")) {
			puts("Communication error");
			close(clientSocket);
			exit(EXIT_FAILURE);
		}
		send(clientSocket, "OK", 3, 0);
		score = line;
		printf("Scores :\t\tVous %hhu\t\tLe serveur %hhu\n", score->player_score, score->server_score);
		free(line);
		line = read_line(clientSocket);
		if (line == NULL || !start_with(line, "END")) {
			puts("Communication error");
			close(clientSocket);
			exit(EXIT_FAILURE);
		}
		end = line;
		send(clientSocket, "OK", 3, 0);
		if (end->winner == PLAYER) {
			puts("Vous avez gagne la partie.");
			free(line);
			break;
		} else if (end->winner == SERVER) {
			puts("Le serveur a gagne la partie.");
			free(line);
			break;
		}
		free(line);
	}

	//fin du programme
	close(clientSocket);
	puts("Connection closed.");
	exit(EXIT_SUCCESS);
}
예제 #7
0
파일: main.cpp 프로젝트: nemequ/tornado
int main (int argc, char **argv)
{
    // Optimize allocation for Tornado (2GB hash allocated after 1GB dictionary)
    AllocTopDown = FALSE;

    // Operation mode
    OPMODE global_mode=AUTO;

    // Record that stores all the info required for ReadWriteCallback
    static Results r;
    r.use_cpu_time = r.quiet_title = r.quiet_header = r.quiet_progress = r.quiet_result = FALSE;

    // Default compression parameters are equivalent to option -5
    r.method = std_Tornado_method [default_Tornado_method];

    // Delete successfully (de)compressed input files
    bool delete_input_files = FALSE;

    // Count of files to process
    int fcount=0;

    // Output path/filename
    const char *output_filename = NULL;

    // Process options until "--"
    // 1. First, process -1..-16 option if any
    for (char **argv_ptr = argv; *++argv_ptr!=NULL; ) {
        char *param = *argv_ptr;
        if (*param == '-') {
            param++;
                 if (strcasecmp(param,"-")==0)   break;   // "--" is a "stop processing" option
            else if (isdigit(*param))            r.method = std_Tornado_method[check_parse_int (param, 1, elements(std_Tornado_method)-1, param-1)];
        }
    }
    // 2. Second, process rest of options
    for (char **argv_ptr = argv; *++argv_ptr!=NULL; ) {
        char *param = *argv_ptr;
        if (param[0] != '-' || param[1]=='\0') {
            fcount++;
        } else { param++;  int error=0;
                 if (strcasecmp(param,"-")==0)      break;
            else if (strcasecmp(param,"") ==0)      continue;
            else if (strcasecmp(param,"z")==0)      global_mode=_COMPRESS;
            else if (strcasecmp(param,"d")==0)      global_mode=_DECOMPRESS;
            else if (strcasecmp(param,"delete")==0) delete_input_files=TRUE;
            else if (strcasecmp(param,"t")==0)      output_filename="";
            else if (strcasecmp(param,"q")==0)      r.quiet_title = r.quiet_header = r.quiet_progress = r.quiet_result = TRUE;
#ifndef FREEARC_NO_TIMING
            else if (strcasecmp(param,"cpu")==0)    r.use_cpu_time=TRUE;
#endif
            else if (strcasecmp(param,"h")==0)      global_mode=HELP;
            else if (strcasecmp(param,"b")==0)      r.method.buffer = MAX_BUFFER_SIZE;         // set buffer size to the maximum supported by LZ coders
            else if (strcasecmp(param,"x")==0)      r.method.caching_finder = CACHING_MF4;
            else if (strcasecmp(param,"xx")==0)     r.method.caching_finder = CYCLED_MF4;
            else if (strcasecmp(param,"x+")==0)     r.method.caching_finder = CACHING_MF4;
            else if (strcasecmp(param,"x-")==0)     r.method.caching_finder = NON_CACHING_MF;
            else if (strcasecmp(param,"t+")==0)     r.method.find_tables = TRUE;
            else if (strcasecmp(param,"t-")==0)     r.method.find_tables = FALSE;
            else if (strcasecmp(param,"t1")==0)     r.method.find_tables = TRUE;
            else if (strcasecmp(param,"t0")==0)     r.method.find_tables = FALSE;
            else if (strcasecmp(param,"s")==0)      r.method.hash3 = 1;
            else if (strcasecmp(param,"ss")==0)     r.method.hash3 = 2;
            else if (strcasecmp(param,"s+")==0)     r.method.hash3 = 1;
            else if (strcasecmp(param,"s-")==0)     r.method.hash3 = 0;
            else if (start_with(param,"fb"))        r.method.fast_bytes = check_parse_int (param+2, MIN_FAST_BYTES, MAX_FAST_BYTES, *argv_ptr);
#ifdef FREEARC_WIN
            else if (strcasecmp(param,"slp-")==0)   DefaultLargePageMode = DISABLE;
            else if (strcasecmp(param,"slp" )==0)   DefaultLargePageMode = TRY;
            else if (strcasecmp(param,"slp+")==0)   DefaultLargePageMode = FORCE;
#endif
            else if (start_with(param,"rem"))       /* ignore option */;
            else if (isdigit(*param))            ; // -1..-16 option is already processed :)
            else switch( tolower(*param++) ) {
                case 'b': r.method.buffer          = check_parse_mem (param, MIN_BUFFER_SIZE, MAX_BUFFER_SIZE,    *argv_ptr);  break;
                case 'h': r.method.hashsize        = check_parse_mem (param, MIN_HASH_SIZE,   MAX_HASH_SIZE,      *argv_ptr);  break;
                case 'l': r.method.hash_row_width  = check_parse_int (param, 1,               MAX_HASH_ROW_WIDTH, *argv_ptr);  break;
                case 'u': r.method.update_step     = check_parse_int (param, 1,               MAX_UPDATE_STEP,    *argv_ptr);  break;
                case 'c': r.method.encoding_method = check_parse_int (param, BYTECODER,       ARICODER,           *argv_ptr);  break;
                case 's': r.method.hash3           = check_parse_int (param, 0,               2,                  *argv_ptr);  break;
                case 'p': r.method.match_parser    = parseInt (param, &error);  break;
                case 'x': r.method.caching_finder  = parseInt (param, &error);  break;
                case 'o': output_filename          = param;                     break;
                case 'q':
#ifndef FREEARC_NO_TIMING
                          r.quiet_title            = strchr (param, 't');
                          r.quiet_progress         = strchr (param, 'p');
#endif
                          r.quiet_header           = strchr (param, 'h');
                          r.quiet_result           = strchr (param, 'r');
                          break;
                case 'a': switch( tolower(*param++) ) {
                            case 'h': r.method.auxhash_size      = check_parse_mem (param, MIN_HASH_SIZE, MAX_HASH_SIZE, *argv_ptr);  goto check_for_errors;
                            case 'l': r.method.auxhash_row_width = check_parse_int (param, 1,        MAX_HASH_ROW_WIDTH, *argv_ptr);  goto check_for_errors;
                          }
                          // 'a' should be the last case!
                default : fprintf (stderr, "ERROR: unknown option '%s'\n", *argv_ptr);
                          exit(FREEARC_EXIT_ERROR);
            }
check_for_errors:
            if (error) {
                fprintf (stderr, "ERROR: bad option format: '%s'\n", *argv_ptr);
                exit(FREEARC_EXIT_ERROR);
            }
            if (!(r.method.match_parser==GREEDY || r.method.match_parser==LAZY  || r.method.match_parser==OPTIMAL)) {
                fprintf (stderr, "ERROR: bad option value: '%s'\n", *argv_ptr);
                exit(FREEARC_EXIT_ERROR);
            }
            int mf = r.method.caching_finder;
            r.method.caching_finder = mf = (mf==CACHING_MF4_DUB? CACHING_MF4 : (mf==CYCLED_MF4_DUB? CYCLED_MF4 : mf));
            if (!(mf==NON_CACHING_MF || (CYCLED_MF4<=mf && mf<=CYCLED_MF7) || (CACHING_MF4<=mf && mf<=CACHING_MF7) || (BT_MF4<=mf && mf<=BT_MF7))) {
                fprintf (stderr, "ERROR: non-existing match finder: '%s'\n", *argv_ptr);
                exit(FREEARC_EXIT_ERROR);
            }
        }
    }

    // No files to compress: read from stdin and write to stdout
    if (global_mode!=HELP && fcount==0 &&
       (global_mode!=AUTO  ||  !isatty(0) && !isatty(1)) ) {

        static char *_argv[] = {argv[0], (char*)"-", NULL};
        argv = _argv;
        fcount = 1;

    } else if (global_mode==HELP || fcount==0) {
        char h[100], ah[100], b[100], MinHashSizeStr[100], MaxHashSizeStr[100], MinBufSizeStr[100], MaxBufSizeStr[100];
        showMem64 (r.method.hashsize, h);
        showMem64 (r.method.auxhash_size, ah);
        showMem64 (r.method.buffer, b);
        showMem64 (MIN_HASH_SIZE, MinHashSizeStr);
        showMem64 (MAX_HASH_SIZE+1, MaxHashSizeStr);
        showMem64 (MIN_BUFFER_SIZE, MinBufSizeStr);
        showMem64 (MAX_BUFFER_SIZE, MaxBufSizeStr);
        printf( "Tornado compressor v0.6  (c) [email protected]  http://freearc.org  2014-03-08\n"
                "\n"
                " Usage: tor [options and files in any order]\n"
                "   -#      -- compression level (1..%d), default %d\n", int(elements(std_Tornado_method))-1, default_Tornado_method);
        printf( "   -z      -- force compression\n"
                "   -d      -- force decompression\n"
                "   -oNAME  -- output filename/directory (default %s/%s)\n", COMPRESS_EXT, DECOMPRESS_EXT);
        printf( "   -t      -- test (de)compression (redirect output to nul)\n"
                "   -delete -- delete successfully (de)compressed input files\n"
#ifdef FREEARC_NO_TIMING
                "   -q      -- be quiet; -q[hr]* disables header/results individually\n"
#else
                "   -q      -- be quiet; -q[thpr]* disables title/header/progress/results individually\n"
                "   -cpu    -- compute raw CPU time (for benchmarking)\n"
#endif
#ifdef FREEARC_WIN
                "   -slp[+/-/]   -- force/disable/try(default) large pages support (2mb/4mb)\n"
#endif
                "   -rem... -- command-line remark\n"
                "   -h      -- display this help\n"
                "   --      -- stop flags processing\n"
                " \"-\" used as filename means stdin/stdout\n"
                "\n"
                " Advanced compression parameters:\n"
                "   -b#     -- buffer size (%s..%s), default %s\n", MinBufSizeStr, MaxBufSizeStr, b);
        printf( "   -h#     -- hash size (%s..%s-1), default %s\n", MinHashSizeStr, MaxHashSizeStr, h);
        printf( "   -l#     -- length of hash row (1..%d), default %d\n", int(MAX_HASH_ROW_WIDTH), r.method.hash_row_width);
        printf( "   -ah#    -- auxiliary hash size (%s..%s-1), default %s\n", MinHashSizeStr, MaxHashSizeStr, ah);
        printf( "   -al#    -- auxiliary hash row length (1..%d), default %d\n", int(MAX_HASH_ROW_WIDTH), r.method.auxhash_row_width);
        printf( "   -u#     -- update step (1..%d), default %d\n", int(MAX_UPDATE_STEP), r.method.update_step);
        printf( "   -c#     -- coder (1-bytes, 2-bits, 3-huf, 4-arith), default %d\n", r.method.encoding_method);
        printf( "   -p#     -- parser (1-greedy, 2-lazy, 4-optimal), default %d\n", r.method.match_parser);
        printf( "   -x#     -- match finder (0: non-caching ht4, 4-7: cycling cached ht4..ht7,\n"
                "                            14-17: shifting cached ht4..ht7, 24-27: bt4..bt7), default %d\n", r.method.caching_finder);
        printf( "   -s#     -- 2/3-byte hash (0-disabled, 1-fast, 2-max), default %d\n", r.method.hash3);
        printf( "   -t#     -- table diffing (0-disabled, 1-enabled), default %d\n", r.method.find_tables);
        printf( "   -fb#    -- fast bytes in the optimal parser (%d..%d), default %d\n", int(MIN_FAST_BYTES), int(MAX_FAST_BYTES), r.method.fast_bytes);
        printf( "\n"
                " Predefined methods:\n");
        for (int i=1; i<elements(std_Tornado_method); i++)
        {
            printf("   %-8d-- %s\n", -i, name(std_Tornado_method[i]));
        }
        exit(EXIT_SUCCESS);
    }



    // (De)compress all files given on cmdline
    bool parse_options=TRUE;  // options will be parsed until "--"
    Install_signal_handler(signal_handler);

    for (char **parameters = argv; *++parameters!=NULL; )
    {
        // If options are still parsed and this argument starts with "-" - it's an option
        if (parse_options && parameters[0][0]=='-' && parameters[0][1]) {
            if (strequ(*parameters,"--"))  parse_options=FALSE;
            continue;
        }

        // Save input filename
        r.filename = *parameters;

        // Select operation mode if it was not specified on cmdline
        r.mode = global_mode != AUTO?                  global_mode :
                 end_with (r.filename, COMPRESS_EXT)?  _DECOMPRESS  :
                                                       _COMPRESS;
        // Extension that should be added to output filenames
        const char *MODE_EXT  =  r.mode==_COMPRESS? COMPRESS_EXT : DECOMPRESS_EXT;

        // Construct output filename
        if (r.mode==BENCHMARK  ||  output_filename && strequ (output_filename, "")) {  // Redirect output to nul
            strcpy (r.outname, "");
        } else if (output_filename) {
            if (strequ(output_filename,"-"))
                strcpy (r.outname, output_filename);
            else if (is_path_char (last_char (output_filename)))
                {sprintf(r.outname, "%s%s", output_filename, drop_dirname(r.filename));  goto add_remove_ext;}
            else if (dir_exists (output_filename))
                {sprintf(r.outname, "%s%c%s", output_filename, PATH_DELIMITER, drop_dirname(r.filename));  goto add_remove_ext;}
            else
                strcpy (r.outname, output_filename);
        } else if (strequ(r.filename,"-")) {
            strcpy (r.outname, r.filename);
        } else {
            // No output filename was given on cmdline:
            //    on compression   - add COMPRESS_EXT
            //    on decompression - remove COMPRESS_EXT (and add DECOMPRESS_EXT if file already exists)
            strcpy (r.outname, r.filename);
add_remove_ext: // Remove COMPRESS_EXT on the end of name or add DECOMPRESS_EXT (unless we are in _COMPRESS mode)
            if (r.mode!=_COMPRESS && end_with (r.outname, COMPRESS_EXT)) {
                r.outname [strlen(r.outname) - strlen(COMPRESS_EXT)] = '\0';
                if (file_exists (r.outname))
                    strcat(r.outname, MODE_EXT);
            } else {
                strcat(r.outname, MODE_EXT);
            }
        }

        // Open input file
        r.fin = strequ (r.filename, "-")? stdin : file_open_read_binary(r.filename);
        if (r.fin == NULL) {
            fprintf (stderr, "\n Can't open %s for read\n", r.filename);
            exit(FREEARC_EXIT_ERROR);
        }
        set_binary_mode (r.fin);

        // Open output file
        if (*r.outname) {
          r.fout = strequ (r.outname, "-")? stdout : file_open_write_binary(r.outname);
          if (r.fout == NULL) {
              fprintf (stderr, "\n Can't open %s for write\n", r.outname);
              exit(FREEARC_EXIT_ERROR);
          }
          set_binary_mode (r.fout);
        } else {
          r.fout = NULL;
        }

        // Prepare to (de)compression
        int result;  char filesize_str[100];
        start_print_stats(r);

        // Perform actual (de)compression
        switch (r.mode) {
        case _COMPRESS: {
            if (!r.quiet_header && r.filesize >= 0)
                fprintf (stderr, "Compressing %s bytes with %s\n", show3(r.filesize,filesize_str), name(r.method));
            PackMethod m = r.method;
            if (r.filesize >= 0)
                m.buffer = mymin (m.buffer, r.filesize+LOOKAHEAD*2);
            result = tor_compress (m, ReadWriteCallback, &r, NULL, -1);
            break; }

        case _DECOMPRESS: {
            //if (!r.quiet_header && !strequ (r.outname, "-"))   fprintf (stderr, "Unpacking %.3lf mb\n", double(r.filesize)/1000/1000);
            result = tor_decompress (ReadWriteCallback, &r, NULL, -1);
            break; }
        }

        // Finish (de)compression
        print_final_stats(r);
        fclose (r.fin);
        if (r.fout)  fclose (r.fout);

        if (result == FREEARC_OK)  {
            if (delete_input_files && !strequ(r.filename,"-"))    delete_file(r.filename);
        } else {
            if (!strequ(r.outname,"-") && !strequ(r.outname,""))  delete_file(r.outname);
            switch (result) {
            case FREEARC_ERRCODE_INVALID_COMPRESSOR:
                fprintf (stderr, "\nThis compression mode isn't supported by small Tornado version, use full version instead!");
                break;
            case FREEARC_ERRCODE_NOT_ENOUGH_MEMORY:
                fprintf (stderr, "\nNot enough memory for (de)compression!");
                break;
            case FREEARC_ERRCODE_READ:
                fprintf (stderr, "\nRead error! Bad media?");
                break;
            case FREEARC_ERRCODE_WRITE:
                fprintf (stderr, "\nWrite error! Disk full?");
                break;
            case FREEARC_ERRCODE_BAD_COMPRESSED_DATA:
                fprintf (stderr, "\nData can't be decompressed!");
                break;
            default:
                fprintf (stderr, "\n(De)compression failed with error code %d!", result);
                break;
            }
            exit(FREEARC_EXIT_ERROR);
        }

        // going to next file...
    }

    return EXIT_SUCCESS;
}
예제 #8
0
파일: select.c 프로젝트: tvrc4m/mysql_shell
int cmd_select(int argc,const char **argv){
	// check necessary param
	check_cmd_args(argc,argv);

	st_select_sql *stsql=(st_select_sql*)malloc(sizeof(st_select_sql));
	stsql->select="*";
	stsql->limit=" LIMIT 20";
	char *from="";
	char where[256]={""};
	char order[128]={""};
	char limit[16]={""};
	char group[64]={""};

	int has_limit=has_cmd_args(argv,"limit");
	while(*argv){
		if(!strcmp(*argv,"--table") || !strcmp(*argv,"-t")){
			argv++;
			from=(char*)*argv;
			argv++;
		}else if(!strcmp(*argv,"--select")){
			argv++;
			stsql->select=*argv;
			argv++;
		}else if(!strcmp(*argv,"--limit")){
			argv++;
			stsql->limit=cat_sql_limit(*argv,limit);
			argv++;
		}else if(!strcmp(*argv,"--order")){
			argv++;
			const char *field=*argv;
			argv++;
			if(*argv==NULL){
				cat_sql_sort(field,"ASC",order);
			}else{
				if(start_with(*argv,"--")){
					cat_sql_sort(field,*argv,order);
				}else{
					cat_sql_sort(field,"ASC",order);
				}
			}
		}else if(!strcmp(*argv,"--group")){
			argv++;
			stsql->group=cat_sql_group(*argv,"",group);
			argv++;
			if(has_limit==0){
				stsql->limit="";
			}
		}else if(!start_with(*argv,"--")){
			const char *name=*argv+2;
			if(!strcmp(name,"id"))
				name=get_primary_key(from);
			argv++;
			const char *value=*argv;
			cat_sql_where(name,value,where);
			argv++;
		}else{
			argv++;
		}
	}
	stsql->from=from;
	stsql->where=where;
	stsql->order=order;
	stsql->group=group;
	char sql[512];
	parse_select_sql(stsql,sql);
	MYSQL_RES *res=select(sql);
	print_sql_result(res,1);
	free_res(res);
	return 0;
}
예제 #9
0
파일: io_http.c 프로젝트: myliang/works
io_http_res* http_get(const char* url, int timeout) {
  io_http_req req;
  io_http_res* res = malloc(sizeof(io_http_res));
  parse_url(url, &req);
  printf("http.host = %s, http.port = %d, http.path = %s, http.query = %s\n",
      req.host, req.port, req.path, req.query_string);

  int sockfd = io_tcp_connect(req.host, req.port);
  if (sockfd < 0) return NULL;

  // request buff
  char buf[MAX_IO_BUFFER];
  // poll
  struct pollfd pfds[1];
  int maxpfds = 1, nready = 0, n;

  pfds[0].fd = sockfd;
  pfds[0].events = POLLWRNORM;

  for (;;) {
    bzero(buf, sizeof(buf));
    nready = poll(pfds, maxpfds, timeout);
    if (nready < 0) {
      fprintf(stderr, "%s:%d http poll error\n", __FILE__, __LINE__);
      close(sockfd);
      return NULL;
    } else if (nready == 0) {
      fprintf(stderr, "%s:%d http poll timeout\n", __FILE__, __LINE__);
      close(sockfd);
      return NULL;
    }

    if (pfds[0].revents & POLLWRNORM) {
      // write
      // printf("sizeof char[] = %ld\n", sizeof(buf));
      if (req.query_string[0] == '\0')
        snprintf(buf, sizeof(buf), "GET %s HTTP/1.1\r\n", req.path);
      else
        snprintf(buf, sizeof(buf), "GET %s?%s HTTP/1.1\r\n", req.path, req.query_string);

      snprintf(buf + strlen(buf), sizeof(buf), "host: %s\r\n\r\n", req.host);
      printf("request:\n%s\n", buf);
      if (io_writen(sockfd, buf, strlen(buf)) < 0) {
        fprintf(stderr, "%s:%d http send request error: %s\n", __FILE__, __LINE__, buf);
        close(sockfd);
        return NULL;
      }
      pfds[0].events = POLLRDNORM;
    }

    if (pfds[0].revents & POLLRDNORM) {
      // read
      if (io_readline(sockfd, buf, sizeof(buf)) < 0) {
        fprintf(stdout, "%s:%d http recv message error\n", __FILE__, __LINE__);
        close(sockfd);
        return NULL;
      }
      printf("response status line:\n%s\n", buf);
      sscanf(buf, "%s %d %s", res->version, &res->status_code, res->status_message);

      // io_readn(sockfd, buf, 1024);
      // printf("%s\n", buf);
      if (res->status_code == 200) {
        res->content_length = 0;
        while (buf[0] != '\r' && buf[1] != '\n') {
          io_readline(sockfd, buf, sizeof(buf));
          fprintf(stdout, "%s\n", buf);

          // Content-Length
          if (14 == start_with(buf, "Content-Length")) {
            res->content_length = atoi(buf + 15);
            res->content = malloc(res->content_length);
          }
        }
        if (res->content_length <= 0) {
          res->content_length = 8192;
          res->content = malloc(res->content_length);
        }
        n = io_readn(sockfd, res->content, res->content_length);
        res->content[n] = '\0';
        close(sockfd);
        return res;
      }
      break;
    }
  }
  close(sockfd);
  return NULL;
}