Пример #1
0
int main(int argc, char *argv[])	  
{
	char buffer, *char_data, out_data[6], string_name[100], *dot_ptr,
		*string_ptr;
   FILE *infile, *outfile;
	long byte_data, data;
	int byte_count, i, index;
#if (defined (BYTE_ORDER)) && (1234==BYTE_ORDER)
	int j;
#endif /* (defined (BYTE_ORDER)) && (1234==BYTE_ORDER) */

	if(argc != 3 && argc != 4)
	{
		printf("Usage: uid2uidh infile outfile [string_prefix_name]\n");
	}
	else
	{
		index = 1;
		if(infile = fopen( argv[index], "r"))
		{
			index++;
			if(outfile = fopen( argv[index], "w"))
			{
				index++;
				byte_count = 0;
				data = 0;

				if (argc == 4)
				{
					string_ptr = argv[3];
				}
				else
				{
					strcpy(string_name, argv[1]);
					i=strlen(string_name);
					while ((i>0)&&(' '==string_name[i-1]))
					{
						i--;
					}
					while ((i>0)&&('/'==string_name[i-1]))
					{
						i--;
					}
					string_name[i]='\0';
					while ((i>0)&&('/'!=string_name[i-1]))
					{
						i--;
					}
					string_ptr = string_name+i;
					if(dot_ptr = strchr(string_ptr, '.'))
					{
						*dot_ptr = 0;
					}
				}

				fprintf(outfile, "static char %s_uidh[] = \"", string_ptr);

				while(!feof(infile))
				{
					if(1 == fread(&buffer, sizeof(char), 1, infile))
					{
#if defined (DEBUG_CODE)
						printf("%d\n", buffer);
#endif /* defined (DEBUG_CODE) */
						byte_data = buffer & 255;
						data += byte_data << (8 * byte_count);

						if(byte_count == 3)
						{
							if(!data)
							{
								out_data[0] = '.';
								out_data[1] = '.';
								out_data[2] = '.';
								out_data[3] = '.';
								out_data[4] = '.';
								out_data[5] = '.';
							}
							else
							{
								char_data = l64a(data);
#if defined (DEBUG_CODE)
								printf("%c%c%c%c%c%c\n", char_data[0], 
								       char_data[1], char_data[2], char_data[3],
								       char_data[4], char_data[5]);
#endif /* defined (DEBUG_CODE) */
#if (defined (BYTE_ORDER)) && (1234==BYTE_ORDER)
								if (!glibc_version_greater_than_2_2_4())
								{
									for(i = 0 ; i < 6 ; i++)
									{
										if(char_data[i])
										{
											out_data[5 - i] = char_data[i];
										}
										else
										{
											for (j = 0 ; j < i ; j++)
											{
												out_data[j] = out_data[6 - i + j];
											}
											for ( ; i < 6 ; i++)
											{
												out_data[i] = '.';
											}
										}
									}
								}
								else
								{
#endif /* (defined (BYTE_ORDER)) && (1234==BYTE_ORDER) */
									for( i = 0 ; i < 6 ; i++)
									{
										if(char_data[i])
										{
											out_data[i] = char_data[i];
										}
										else
										{
											for ( ; i < 6 ; i++)
											{
												out_data[i] = '.';
											}
										}
									}
#if (defined (BYTE_ORDER)) && (1234==BYTE_ORDER)
								}
#endif /* (defined (BYTE_ORDER)) && (1234==BYTE_ORDER) */
							}
					
							fwrite(out_data, sizeof(char), 6, outfile);
#if defined (DEBUG_CODE)
							printf("%c%c%c%c%c%c\n", out_data[0], 
								out_data[1], out_data[2], out_data[3],
								out_data[4], out_data[5]);
#endif /* defined (DEBUG_CODE) */

							data = 0;
							byte_count = 0;
						}
						else
						{
							byte_count++;
						}
					}
				}
				fprintf(outfile, "\";\n");
				fclose (outfile);
			}
			else
			{
				fprintf(stderr,"uid2uidh.  Unable to open output file %s\n",
					argv[index]);
			}
			fclose (infile);
		}
		else
		{
			fprintf(stderr,"uid2uidh.  Unable to open input file %s\n",
				argv[index]);
		}
   }
	return(0);
}
Пример #2
0
static size_t write_base64_data(FILE *outfile, int byte_count, long data)
/*******************************************************************************
LAST MODIFIED : 20 June 2003

DESCRIPTION :
==============================================================================*/
{
	char *char_data, bytes_out, out_data[6];
	size_t bytes_written, i;
#if (defined (BYTE_ORDER)) && (1234==BYTE_ORDER)
	int j;
#endif /* (defined (BYTE_ORDER)) && (1234==BYTE_ORDER) */

	switch(byte_count)
	{
		case 1:
		{
			bytes_out = 2;
		} break;
		case 2:
		{
			bytes_out = 3;
		} break;
		case 3:
		{
			bytes_out = 5;
		} break;
		case 4:
		{
			bytes_out = 6;
		} break;
		default:
		{
			printf("write_base64_data:  Unsupported byte_count %d\n", byte_count);
			exit(1);
		} break;
	}

	if(!data)
	{
		for (i = 0 ; i < bytes_out ; i++)
		{
			out_data[i] = '.';
		}
	}
	else
	{
		char_data = l64a(data);
#if defined (CMISS_DEBUG)
		printf("'%c%c%c%c%c%c'\n", char_data[0], 
			char_data[1], char_data[2], char_data[3],
			char_data[4], char_data[5]);
#endif /* defined (CMISS_DEBUG) */
#if (defined (BYTE_ORDER)) && (1234==BYTE_ORDER)
		if (!glibc_version_greater_than_2_2_4())
		{
			for(i = 0 ; i < bytes_out ; i++)
			{
				if(char_data[i])
				{
					out_data[bytes_out - 1 - i] = char_data[i];
				}
				else
				{
					for (j = 0 ; j < i ; j++)
					{
						out_data[j] = out_data[bytes_out - i + j];
					}
					for ( ; i < bytes_out ; i++)
					{
						out_data[i] = '.';
					}
				}
			}
		}
		else
		{
#endif /* (defined (BYTE_ORDER)) && (1234==BYTE_ORDER) */
			for( i = 0 ; i < bytes_out ; i++)
			{
				if(char_data[i])
				{
					out_data[i] = char_data[i];
				}
				else
				{
					for ( ; i < bytes_out ; i++)
					{
						out_data[i] = '.';
					}
				}
			}
#if (defined (BYTE_ORDER)) && (1234==BYTE_ORDER)
		}
#endif /* (defined (BYTE_ORDER)) && (1234==BYTE_ORDER) */
	}
					
	bytes_written = fwrite(out_data, sizeof(char), bytes_out, outfile);
#if defined (CMISS_DEBUG)
	printf("'%c%c%c%c%c%c'\n", out_data[0], 
		out_data[1], out_data[2], out_data[3],
		out_data[4], out_data[5]);
#endif /* defined (CMISS_DEBUG) */

	return (bytes_written);
}