source: mainline/uspace/srv/net/app/parse.c@ 60ab6c3

lfn serial ticket/834-toolchain-update topic/msim-upgrade topic/simplify-dev-export
Last change on this file since 60ab6c3 was 3be62bc, checked in by Lukas Mejdrech <lukasmejdrech@…>, 15 years ago
  • net app command line argument checks, * code reorganization
  • Property mode set to 100644
File size: 3.7 KB
Line 
1/*
2 * Copyright (c) 2009 Lukas Mejdrech
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 *
9 * - Redistributions of source code must retain the above copyright
10 * notice, this list of conditions and the following disclaimer.
11 * - Redistributions in binary form must reproduce the above copyright
12 * notice, this list of conditions and the following disclaimer in the
13 * documentation and/or other materials provided with the distribution.
14 * - The name of the author may not be used to endorse or promote products
15 * derived from this software without specific prior written permission.
16 *
17 * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
18 * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
19 * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
21 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
22 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
23 * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
24 * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
25 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
26 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
27 */
28
29/** @addtogroup net_app
30 * @{
31 */
32
33/** @file
34 * Generic application parsing functions implementation.
35 */
36
37#include <stdio.h>
38#include <string.h>
39
40#include "../include/socket.h"
41
42#include "../err.h"
43
44#include "parse.h"
45
46int parse_address_family(const char * name){
47 if(str_lcmp(name, "AF_INET", 7) == 0){
48 return AF_INET;
49 }else if(str_lcmp(name, "AF_INET6", 8) == 0){
50 return AF_INET6;
51 }
52 return EAFNOSUPPORT;
53}
54
55int parse_parameter_int(int argc, char ** argv, int * index, int * value, const char * name, int offset){
56 char * rest;
57
58 if(offset){
59 *value = strtol(argv[*index] + offset, &rest, 10);
60 }else if((*index) + 1 < argc){
61 ++ (*index);
62 *value = strtol(argv[*index], &rest, 10);
63 }else{
64 fprintf(stderr, "Command line error: missing %s\n", name);
65 return EINVAL;
66 }
67 if(rest && (*rest)){
68 fprintf(stderr, "Command line error: %s unrecognized (%d: %s)\n", name, * index, argv[*index]);
69 return EINVAL;
70 }
71 return EOK;
72}
73
74int parse_parameter_name_int(int argc, char ** argv, int * index, int * value, const char * name, int offset, int (*parse_value)(const char * value)){
75 ERROR_DECLARE;
76
77 char * parameter;
78
79 ERROR_PROPAGATE(parse_parameter_string(argc, argv, index, &parameter, name, offset));
80 *value = (*parse_value)(parameter);
81 if((*value) == ENOENT){
82 fprintf(stderr, "Command line error: unrecognized %s value (%d: %s)\n", name, * index, parameter);
83 return ENOENT;
84 }
85 return EOK;
86}
87
88int parse_parameter_string(int argc, char ** argv, int * index, char ** value, const char * name, int offset){
89 if(offset){
90 *value = argv[*index] + offset;
91 }else if((*index) + 1 < argc){
92 ++ (*index);
93 *value = argv[*index];
94 }else{
95 fprintf(stderr, "Command line error: missing %s\n", name);
96 return EINVAL;
97 }
98 return EOK;
99}
100
101int parse_protocol_family(const char * name){
102 if(str_lcmp(name, "PF_INET", 7) == 0){
103 return PF_INET;
104 }else if(str_lcmp(name, "PF_INET6", 8) == 0){
105 return PF_INET6;
106 }
107 return EPFNOSUPPORT;
108}
109
110int parse_socket_type(const char * name){
111 if(str_lcmp(name, "SOCK_DGRAM", 11) == 0){
112 return SOCK_DGRAM;
113 }else if(str_lcmp(name, "SOCK_STREAM", 12) == 0){
114 return SOCK_STREAM;
115 }
116 return ESOCKTNOSUPPORT;
117}
118
119void print_unrecognized(int index, const char * parameter){
120 fprintf(stderr, "Command line error: unrecognized argument (%d: %s)\n", index, parameter);
121}
122
123/** @}
124 */
Note: See TracBrowser for help on using the repository browser.