Oh cock
This commit is contained in:
		
							parent
							
								
									b0c014f6c1
								
							
						
					
					
						commit
						1397c7e479
					
				
					 1 changed files with 74 additions and 0 deletions
				
			
		
							
								
								
									
										74
									
								
								src/if.c
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										74
									
								
								src/if.c
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,74 @@ | |||
| #include <stdlib.h> | ||||
| #include <string.h> | ||||
| #include <errno.h> | ||||
| 
 | ||||
| #include <patty/ax25.h> | ||||
| 
 | ||||
| static patty_ax25_if *create_tnc(const char *device) { | ||||
|     patty_ax25_if *iface; | ||||
| 
 | ||||
|     if ((iface = malloc(sizeof(*iface))) == NULL) { | ||||
|         goto error_malloc_iface; | ||||
|     } | ||||
| 
 | ||||
|     memset(iface, '\0', sizeof(*iface)); | ||||
| 
 | ||||
|     if ((iface->tnc = patty_kiss_tnc_open(device, PATTY_KISS_BUFSZ)) == NULL) { | ||||
|         goto error_kiss_tnc_open; | ||||
|     } | ||||
| 
 | ||||
|     iface->type = PATTY_AX25_IF_KISS_TNC_TTY; | ||||
| 
 | ||||
|     return iface; | ||||
| 
 | ||||
| error_kiss_tnc_open: | ||||
|     free(iface); | ||||
| 
 | ||||
| error_malloc_iface: | ||||
|     return NULL; | ||||
| } | ||||
| 
 | ||||
| static void destroy_tnc(patty_ax25_if *iface) { | ||||
|     patty_kiss_tnc_close(iface->tnc); | ||||
| } | ||||
| 
 | ||||
| patty_ax25_if *patty_ax25_if_create(int opts, void *info) { | ||||
|     patty_ax25_if *iface; | ||||
| 
 | ||||
|     switch (PATTY_AX25_IF_OPT_TYPE(opts)) { | ||||
|         case PATTY_AX25_IF_KISS_TNC_TTY: { | ||||
|             iface = create_tnc((const char *)info); | ||||
|              | ||||
|             break; | ||||
|         } | ||||
| 
 | ||||
|         default: { | ||||
|             errno = EINVAL; | ||||
| 
 | ||||
|             goto error; | ||||
|         } | ||||
|     } | ||||
| 
 | ||||
|     if (iface == NULL) { | ||||
|         goto error; | ||||
|     } | ||||
| 
 | ||||
|     if ((iface->addresses = patty_list_new()) == NULL) { | ||||
|         goto error; | ||||
|     } | ||||
| 
 | ||||
|     return iface; | ||||
| 
 | ||||
| error: | ||||
|     return NULL; | ||||
| } | ||||
| 
 | ||||
| void patty_ax25_if_destroy(patty_ax25_if *iface) { | ||||
|     switch (iface->type) { | ||||
|         case PATTY_AX25_IF_KISS_TNC_TTY: { | ||||
|             destroy_tnc(iface); break; | ||||
|         } | ||||
| 
 | ||||
|         default: break; | ||||
|     } | ||||
| } | ||||
		Loading…
	
	Add table
		
		Reference in a new issue